|
| 1 | +package common; |
| 2 | + |
| 3 | +import gudusoft.gsqlparser.EDbVendor; |
| 4 | +import gudusoft.gsqlparser.TGSqlParser; |
| 5 | +import junit.framework.TestCase; |
| 6 | + |
| 7 | +public class testStmtDelimiter extends TestCase { |
| 8 | + |
| 9 | + public void test3() { |
| 10 | + TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvmysql); |
| 11 | + sqlparser.sqltext = "CREATE FUNCTION PAC4_USER.\"PS_FIRST_ERROR_BEGIN\"(\n" + |
| 12 | + "\n" + |
| 13 | + " PI_KAISHA_CD VARCHAR(16383),\n" + |
| 14 | + "\n" + |
| 15 | + " PI_SESSION_ID VARCHAR(16383),\n" + |
| 16 | + "\n" + |
| 17 | + " PO_REPLACE_STRING VARCHAR(16383)\n" + |
| 18 | + "\n" + |
| 19 | + ")\n" + |
| 20 | + "\n" + |
| 21 | + "RETURNS VARCHAR(16383)\n" + |
| 22 | + "\n" + |
| 23 | + "BEGIN\n" + |
| 24 | + "\n" + |
| 25 | + " DECLARE W_LOOP_COUNT DECIMAL(4,0) DEFAULT 1;\n" + |
| 26 | + "\n" + |
| 27 | + " DECLARE PO_DEN_NO VARCHAR(30) DEFAULT NULL;\n" + |
| 28 | + "\n" + |
| 29 | + " DECLARE EXIT HANDLER FOR NOT FOUND,SQLEXCEPTION\n" + |
| 30 | + "\n" + |
| 31 | + " BEGIN\n" + |
| 32 | + "\n" + |
| 33 | + " SET PO_DEN_NO = PI_KAISHA_CD;\n" + |
| 34 | + "\n" + |
| 35 | + " RETURN PO_DEN_NO;\n" + |
| 36 | + "\n" + |
| 37 | + " END;\n" + |
| 38 | + "\n" + |
| 39 | + " SET W_LOOP_COUNT = W_LOOP_COUNT + 1;\n" + |
| 40 | + "\n" + |
| 41 | + " RETURN PO_DEN_NO;\n" + |
| 42 | + "\n" + |
| 43 | + "END;\n" + |
| 44 | + "\n" + |
| 45 | + "-- sqlflow-delimiter\n" + |
| 46 | + "\n" + |
| 47 | + "create function func_26093_b(x int, y int) returns int\n" + |
| 48 | + "begin\n" + |
| 49 | + "set @invoked := @invoked + 1;\n" + |
| 50 | + "return x;\n" + |
| 51 | + "end\n" + |
| 52 | + "\n" + |
| 53 | + "\n" + |
| 54 | + "-- sqlflow-delimiter\n" + |
| 55 | + "\n" + |
| 56 | + "create aggregate function encsum returns string soname 'udf_example.so';\n" + |
| 57 | + "\n" + |
| 58 | + "-- sqlflow-delimiter\n" + |
| 59 | + "\n" + |
| 60 | + "\n" + |
| 61 | + "create function encmul returns string soname 'udf_example.so'"; |
| 62 | + |
| 63 | + assertTrue(sqlparser.parse() == 0); |
| 64 | + assertTrue(sqlparser.sqlstatements.size() ==4); |
| 65 | + |
| 66 | + } |
| 67 | + |
| 68 | + public void test1() { |
| 69 | + TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvpostgresql); |
| 70 | + sqlparser.sqltext = "CREATE FUNCTION check_password(uname TEXT, pass TEXT)\n" + |
| 71 | + "RETURNS BOOLEAN AS $$\n" + |
| 72 | + "DECLARE passed BOOLEAN;\n" + |
| 73 | + "BEGIN\n" + |
| 74 | + " SELECT (pwd = $2) INTO passed\n" + |
| 75 | + " FROM pwds\n" + |
| 76 | + " WHERE username = $1;\n" + |
| 77 | + "\n" + |
| 78 | + " RETURN passed;\n" + |
| 79 | + "END;\n" + |
| 80 | + "$$ LANGUAGE plpgsql\n" + |
| 81 | + " SECURITY DEFINER\n" + |
| 82 | + "\n" + |
| 83 | + "-- sqlflow-delimiter\n" + |
| 84 | + "\n" + |
| 85 | + "SELECT (pwd = $2) INTO passed\n" + |
| 86 | + "FROM pwds\n" + |
| 87 | + "WHERE username = $1;\n" + |
| 88 | + "\t\n" + |
| 89 | + "-- sqlflow-delimiter\n" + |
| 90 | + "\t\n" + |
| 91 | + "CREATE FUNCTION dup(int) RETURNS TABLE(f1 int, f2 text)\n" + |
| 92 | + " AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$\n" + |
| 93 | + " LANGUAGE SQL;\n" + |
| 94 | + "\t\n" + |
| 95 | + "-- sqlflow_delimiter\n" + |
| 96 | + "\n" + |
| 97 | + "CREATE OR REPLACE FUNCTION test_data_it.function3(double precision, double precision)\n" + |
| 98 | + " RETURNS double precision\n" + |
| 99 | + " LANGUAGE sql\n" + |
| 100 | + " STABLE\n" + |
| 101 | + "AS $function$\n" + |
| 102 | + " select case when $1 > $2 then $1\n" + |
| 103 | + " else $2\n" + |
| 104 | + " end\n" + |
| 105 | + "$function$\t\n" + |
| 106 | + "\n" + |
| 107 | + "-- sqlflow_delimiter"; |
| 108 | + |
| 109 | + assertTrue(sqlparser.parse() == 0); |
| 110 | + assertTrue(sqlparser.sqlstatements.size() ==4); |
| 111 | + } |
| 112 | + public void test0(){ |
| 113 | + TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvteradata); |
| 114 | + sqlparser.sqltext = "REPLACE PROCEDURE S1.IF_CHECK(IN RUN_ID DECIMAL(12,0))\n" + |
| 115 | + " BEGIN\n" + |
| 116 | + "\t DECLARE EXIT HANDLER FOR incorrectStep,incorrectInput\n" + |
| 117 | + "\t BEGIN\n" + |
| 118 | + "\t\t INSERT INTO PROD_INT_SL_META.Error_Log(ERRORTIME,SQL_CODE,SQL_STATE) VALUES(CURRENT_TIMESTAMP(0),:SQLCODE,:SQLSTATE);\n" + |
| 119 | + "\t\t CALL PROD_INT_SL_SHARED_META.DETAIL_LOG_ENTRY_EE (CURRENT_TIMESTAMP(0));\n" + |
| 120 | + "\t\t END;\n" + |
| 121 | + "\t\t DECLARE EXIT HANDLER FOR inValidOperation\n" + |
| 122 | + "\t\t BEGIN\n" + |
| 123 | + "\t\t INSERT INTO PROD_INT_SL_META.Error_Log(ERRORTIME,SQL_CODE,SQL_STATE) VALUES(CURRENT_TIMESTAMP(0),:SQLCODE,:SQLSTATE);\n" + |
| 124 | + "\t\t CALL PROD_INT_SL_SHARED_META.DETAIL_LOG_ENTRY_EE (CURRENT_TIMESTAMP(0));\n" + |
| 125 | + "\t END;\n" + |
| 126 | + "\n" + |
| 127 | + "\t DECLARE EXIT HANDLER FOR SQLEXCEPTION\n" + |
| 128 | + "\t\tCALL PROD_INT_SL_SHARED_META.DETAIL_LOG_ENTRY_EE (CURRENT_TIMESTAMP(0));\n" + |
| 129 | + "\t \n" + |
| 130 | + "\t CALL PROD_INT_SL_SHARED_META.DETAIL_LOG_ENTRY_FF (CURRENT_TIMESTAMP(6));\n" + |
| 131 | + " END;\n" + |
| 132 | + " \n" + |
| 133 | + "-- sqlflow-delimiter\n" + |
| 134 | + "\n" + |
| 135 | + "REPLACE PROCEDURE foodmart.delStmtCur()\n" + |
| 136 | + "BEGIN\n" + |
| 137 | + "INSERT INTO foodmart.tem_dep\n" + |
| 138 | + " (\n" + |
| 139 | + " department_id, department_name\n" + |
| 140 | + ")\n" + |
| 141 | + "\n" + |
| 142 | + "SELECT\n" + |
| 143 | + " CAST ( ((10 * foodmart.employee.salary)\n" + |
| 144 | + "/foodmart.employee.employee_id)\n" + |
| 145 | + "AS DECIMAL (18,2)) AS department_id\n" + |
| 146 | + ",first_name AS department_name\n" + |
| 147 | + "FROM foodmart.employee where employee_id < 10;\n" + |
| 148 | + "END;\n" + |
| 149 | + "\n" + |
| 150 | + "-- sqlflow-delimiter\n" + |
| 151 | + "\n" + |
| 152 | + "\tCreate PROCEDURE S1.FOR_CURSOR()\n" + |
| 153 | + " BEGIN\n" + |
| 154 | + " DECLARE id integer;\n" + |
| 155 | + " \n" + |
| 156 | + " FOR for_loop_var AS cur CURSOR FOR\n" + |
| 157 | + " SELECT department_id000, department_description111 FROM foodmart.department\n" + |
| 158 | + " DO\n" + |
| 159 | + " SET id = for_loop_var.department_id;\n" + |
| 160 | + " if(id < 10) then\n" + |
| 161 | + " REWIND cur;\n" + |
| 162 | + " End if;\n" + |
| 163 | + " END FOR;\n" + |
| 164 | + " END;\n" + |
| 165 | + "\n" + |
| 166 | + "\n" + |
| 167 | + "-- sqlflow-delimiter\n" + |
| 168 | + "\n" + |
| 169 | + "INSERT INTO PROD_INT_SL_META.Error_Log(ERRORTIME,SQL_CODE,SQL_STATE) VALUES(CURRENT_TIMESTAMP(0),:SQLCODE,:SQLSTATE); \n" + |
| 170 | + "\n" + |
| 171 | + "\n" + |
| 172 | + "-- sqlflow-delimiter\n"; |
| 173 | + assertTrue(sqlparser.parse() == 0); |
| 174 | + |
| 175 | + assertTrue(sqlparser.sqlstatements.size() ==4); |
| 176 | + |
| 177 | + } |
| 178 | +} |
0 commit comments