1 5 package org.h2.test.jdbc; 6 7 import java.sql.*; 8 9 import org.h2.test.TestBase; 10 11 14 15 public class TestNativeSQL extends TestBase { 16 17 public void test() throws Exception { 18 deleteDb("nativeSql"); 19 Connection conn = getConnection("nativeSql"); 20 21 for(int i=0;i<PAIRS.length;i+=2) { 22 test(conn, PAIRS[i], PAIRS[i+1]); 23 } 24 conn.nativeSQL("TEST"); 25 conn.nativeSQL("TEST--testing"); 26 conn.nativeSQL("TEST--testing{oj }"); 27 conn.nativeSQL("TEST/*{fn }*/"); 28 conn.nativeSQL("TEST//{fn }"); 29 conn.nativeSQL("TEST-TEST/TEST/*TEST*/TEST--\rTEST--{fn }"); 30 conn.nativeSQL("TEST-TEST//TEST"); 31 conn.nativeSQL("'{}' '' \"1\" \"\"\"\""); 32 conn.nativeSQL("{?= call HEELO{t '10'}}"); 33 conn.nativeSQL("TEST 'test'{OJ OUTER JOIN}'test'{oj OUTER JOIN}"); 34 conn.nativeSQL("{call {ts '2001-01-10'}}"); 35 conn.nativeSQL("call ? { 1: '}' };"); 36 conn.nativeSQL("TEST TEST TEST TEST TEST 'TEST' TEST \"TEST\""); 37 conn.nativeSQL("TEST TEST TEST 'TEST' TEST \"TEST\""); 38 Statement stat = conn.createStatement(); 39 stat.setEscapeProcessing(true); 40 stat.execute("CALL {d '2001-01-01'}"); 41 stat.setEscapeProcessing(false); 42 try { 43 stat.execute("CALL {d '2001-01-01'} // this is a test"); 44 error("expected error if setEscapeProcessing=false"); 45 } catch(SQLException e) { 46 checkNotGeneralException(e); 47 } 48 checkFalse(conn.isClosed()); 49 conn.close(); 50 check(conn.isClosed()); 51 } 52 53 54 static final String [] PAIRS=new String []{ 55 "CREATE TABLE TEST(ID INT PRIMARY KEY)", 56 "CREATE TABLE TEST(ID INT PRIMARY KEY)", 57 58 "INSERT INTO TEST VALUES(1)", 59 "INSERT INTO TEST VALUES(1)", 60 61 "SELECT '{nothing}' FROM TEST", 62 "SELECT '{nothing}' FROM TEST", 63 64 "SELECT '{fn ABS(1)}' FROM TEST", 65 "SELECT '{fn ABS(1)}' FROM TEST", 66 67 "SELECT {d '2001-01-01'} FROM TEST", 68 "SELECT '2001-01-01' FROM TEST", 69 70 "SELECT {t '20:00:00'} FROM TEST", 71 "SELECT '20:00:00' FROM TEST", 72 73 "SELECT {ts '2001-01-01 20:00:00'} FROM TEST", 74 "SELECT '2001-01-01 20:00:00' FROM TEST", 75 76 "SELECT {fn CONCAT('{fn x}','{oj}')} FROM TEST", 77 "SELECT CONCAT('{fn x}','{oj}') FROM TEST", 78 79 "SELECT * FROM {oj TEST T1 LEFT OUTER JOIN TEST T2 ON T1.ID=T2.ID}", 80 "SELECT * FROM TEST T1 LEFT OUTER JOIN TEST T2 ON T1.ID=T2.ID ", 81 82 "SELECT * FROM TEST WHERE '{' LIKE '{{' {escape '{'}", 83 "SELECT * FROM TEST WHERE '{' LIKE '{{' escape '{' ", 84 85 "SELECT * FROM TEST WHERE '}' LIKE '}}' {escape '}'}", 86 "SELECT * FROM TEST WHERE '}' LIKE '}}' escape '}' ", 87 88 "{call TEST('}')}", 89 " call TEST('}') ", 90 91 "{?= call TEST('}')}", 92 " call TEST('}') ", 93 94 "{? = call TEST('}')}", 95 " call TEST('}') ", 96 97 "{{{{this is a bug}", 98 null, 99 }; 100 101 void test(Connection conn, String original,String expected) throws Exception { 102 trace("original: <"+original+">"); 103 trace("expected: <"+expected+">"); 104 try { 105 String result=conn.nativeSQL(original); 106 trace("result: <"+result+">"); 107 check(expected, result); 108 } catch(SQLException e) { 109 check(expected, null); 110 checkNotGeneralException(e); 111 trace("got exception, good"); 112 } 113 } 114 115 } 116 | Popular Tags |