The Application Function Library (AFL) in SAP HANA allows for complex computations to be executed in the database instead of at the application server level, resulting in improved performance. AFL includes application functions, which are database procedures written in C++ that can be called from outside to perform data-intensive and complex operations. The Predictive Analysis Library (PAL) is a subset of AFL and includes two types of AFL APIs: Type-Any procedure interfaces and Wrapper procedure based interfaces.
------

SET SCHEMA DM_PAL;

DROP TYPE PAL_SINGLESMOOTH_DATA_T;
CREATE TYPE PAL_SINGLESMOOTH_DATA_T AS TABLE("ID" INT, "RAWDATA" DOUBLE);

DROP TYPE PAL_CONTROL_T;
CREATE TYPE PAL_CONTROL_T AS TABLE ("NAME" VARCHAR(100), "INTARGS" INT, "DOUBLEARGS" DOUBLE, "STRINGARGS" VARCHAR(100));

DROP TYPE PAL_SINGLESMOOTH_RESULT_T;
CREATE TYPE PAL_SINGLESMOOTH_RESULT_T AS TABLE ("TIME" INT, "OUTPUT" DOUBLE, "LOWER1" DOUBLE, "UPPER1" DOUBLE, "LOWER2" DOUBLE, "UPPER2" DOUBLE);

DROP TYPE PAL_SINGLESMOOTH_STATISTICS_T;
CREATE TYPE PAL_SINGLESMOOTH_STATISTICS_T AS TABLE ("NAME" VARCHAR (50), "VALUE" DOUBLE);

DROP TABLE PAL_SINGLESMOOTH_PDATA_TBL;
CREATE COLUMN TABLE PAL_SINGLESMOOTH_PDATA_TBL("POSITION" INT, "SCHEMA_NAME" NVARCHAR(256), "TYPE_NAME" NVARCHAR(256), "PARAMETER_TYPE" VARCHAR(7));
INSERT INTO PAL_SINGLESMOOTH_PDATA_TBL VALUES (1,'DM_PAL', 'PAL_SINGLESMOOTH_DATA_T','IN');
INSERT INTO PAL_SINGLESMOOTH_PDATA_TBL VALUES(2,'DM_PAL', 'PAL_CONTROL_T','IN'); 
INSERT INTO PAL_SINGLESMOOTH_PDATA_TBL VALUES(3,'DM_PAL', 'PAL_SINGLESMOOTH_RESULT_T','OUT');
INSERT INTO PAL_SINGLESMOOTH_PDATA_TBL VALUES(4,'DM_PAL', 'PAL_SINGLESMOOTH_STATISTICS_T','OUT');

CALL SYS.AFLLANG_WRAPPER_PROCEDURE_DROP('DM_PAL', 'SINGLESMOOTH_TEST_PROC'); 

CALL SYS.AFLLANG_WRAPPER_PROCEDURE_CREATE('AFLPAL', 'SINGLESMOOTH', 'DM_PAL', 'SINGLESMOOTH_TEST_PROC',PAL_SINGLESMOOTH_PDATA_TBL); 


DROP TABLE #PAL_CONTROL_TBL;
CREATE LOCAL TEMPORARY COLUMN TABLE #PAL_CONTROL_TBL ("NAME" VARCHAR(100), "INTARGS" INT, "DOUBLEARGS" DOUBLE, "STRINGARGS" VARCHAR(100));
INSERT INTO #PAL_CONTROL_TBL VALUES ('ADAPTIVE_METHOD',0, NULL, NULL);
INSERT INTO #PAL_CONTROL_TBL VALUES ('MEASURE_NAME', NULL, NULL, 'MSE');
INSERT INTO #PAL_CONTROL_TBL VALUES ('ALPHA', NULL,0.1, NULL);
INSERT INTO #PAL_CONTROL_TBL VALUES ('DELTA', NULL,0.2, NULL);
INSERT INTO #PAL_CONTROL_TBL VALUES ('FORECAST_NUM',6, NULL,NULL);
INSERT INTO #PAL_CONTROL_TBL VALUES ('EXPOST_FLAG',1, NULL,NULL);
INSERT INTO #PAL_CONTROL_TBL VALUES ('PREDICTION_CONFIDENCE_1', NULL, 0.8, NULL);
INSERT INTO #PAL_CONTROL_TBL VALUES ('PREDICTION_CONFIDENCE_2', NULL, 0.95, NULL);

DROP TABLE PAL_SINGLESMOOTH_DATA_TBL;
CREATE COLUMN TABLE PAL_SINGLESMOOTH_DATA_TBL  LIKE  PAL_SINGLESMOOTH_DATA_T ;
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (1,200.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (2,135.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (3,195.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (4,197.5);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (5,310.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (6,175.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (7,155.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (8,130.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (9,220.0);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (10,277.5);
INSERT INTO PAL_SINGLESMOOTH_DATA_TBL VALUES (11,235.0);

DROP TABLE PAL_SINGLESMOOTH_RESULT_TBL;
CREATE COLUMN TABLE PAL_SINGLESMOOTH_RESULT_TBL  LIKE PAL_SINGLESMOOTH_RESULT_T ;

DROP TABLE PAL_SINGLESMOOTH_STATISTICS_TBL;
CREATE COLUMN TABLE PAL_SINGLESMOOTH_STATISTICS_TBL LIKE PAL_SINGLESMOOTH_STATISTICS_T;

CALL DM_PAL.SINGLESMOOTH_TEST_PROC(PAL_SINGLESMOOTH_DATA_TBL, "#PAL_CONTROL_TBL", ?, ?);


