Преглед изворни кода

214 double quota supporting (#220)

* add double quota test case.

* add grave symbol test case.

* update grave test case.

* update test case.

* update test cases.

* update hsql.plus-e631e1a

* update hsql.plus-49e1c16

* update hsql.plus-49e1c16

* add test cases.

* update test cases.

* update test cases.

* update test cases.

* update test case.

* update test case.

* update test case.

* update test case.
Yang Shuang пре 1 година
родитељ
комит
81c62f5c84

+ 1 - 1
script/download.sh

@@ -1 +1 @@
-wget https://github.com/DTC8/sql-parser/releases/download/hsql.plus-0ca1fb6/hsql.plus-0ca1fb6.tar.gz -O hsql.tar.gz
+wget https://github.com/DTC8/sql-parser/releases/download/hsql.plus-49e1c16/hsql.plus-49e1c16.tar.gz -O hsql.tar.gz

+ 1 - 1
src/libs/hsql/include/parser/flex_lexer.h

@@ -730,7 +730,7 @@ extern int yylex \
 #undef yyTABLES_NAME
 #endif
 
-#line 272 "flex_lexer.l"
+#line 278 "flex_lexer.l"
 
 
 #line 737 "flex_lexer.h"

BIN
src/libs/hsql/libs/libsqlparser.a


BIN
src/libs/hsql/libs/libsqlparser.so


+ 156 - 17
tests/test_dtcd_cache_only.py

@@ -4,7 +4,7 @@ import pymysql
 def test_insert_with_single_quotes():
     db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test')
     cursor = db.cursor()
-    sql = "insert into opensource(uid, name) values(1, 'hello') where uid = 1"
+    sql = "insert into opensource(uid, name) values(1, 'hello')"
     cursor.execute(sql)
     db.commit()
     rowsaffected = cursor.rowcount
@@ -13,17 +13,6 @@ def test_insert_with_single_quotes():
     db.close()
     assert rowsaffected == 1
 
-'''
-def test_insert_with_double_quotes():
-    db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test')
-    cursor = db.cursor()
-    sql = "insert into opensource(uid, name) values(1, \"hello\") where uid = 1"
-    cursor.execute(sql)
-    db.commit()
-    cursor.close()
-    db.close()
-'''    
-
 def test_select():
     db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test')
     cursor = db.cursor()
@@ -55,12 +44,48 @@ def test_update():
     cursor.close()
 
     cursor = db.cursor()
+
     sql = "update opensource set name = 'Lee' where uid = 1"
-    cursor.execute(sql)
-    db.commit()
-    rowsaffected = cursor.rowcount
-    print("affected rows: %s" % (rowsaffected))
+    rowsaffected = cursor.execute(sql)
     assert rowsaffected == 1
+
+    #sql = "update opensource set name = \"Lee3\" where uid = 1"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1
+
+    #sql = "update opensource set name = `Lee` where uid = 1"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 0
+
+    #sql = "update opensource set name = \"Lee4\" where uid = '1'"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1    
+
+    #sql = "update opensource set name = \"Lee\" where uid = \"1\""
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1        
+
+    #sql = "update opensource set name = 'Lee2' where `uid` = 1"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1
+
+    #sql = "update opensource set name = \"Lee\" where `uid` = 1"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1    
+
+    #sql = "update opensource set `name` = \"Lee2\" where `uid` = 1"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1        
+
+    #sql = "update opensource set `name` = \"Lee\" where `uid` = gh"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 0
+
+    #sql = "update opensource set `name` = Lee2 where `uid` = 1"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 0
+
+    db.commit()
     cursor.close()
 
     cursor = db.cursor()
@@ -199,6 +224,120 @@ def test_insert_automated_conversion():
     insert = cursor.execute(sql)
     assert insert == 0
 
+    sql = "insert into opensource(uid,name,city,sex,age) values(1, 'jack', Shanghai, 1, '18a')"
+    insert = cursor.execute(sql)
+    assert insert == 0
+
     db.commit()
 
-    db.close()
+    db.close()
+
+def test_insert_with_double_quotes():
+    db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test')
+    cursor = db.cursor()
+    sql = "insert into opensource(uid, name) values(33, \"hello\")"
+    cursor.execute(sql)
+    db.commit()
+    rowsaffected = cursor.rowcount
+    cursor.close()
+    db.close()    
+    assert rowsaffected == 1
+
+def test_insert_with_double_quotes():
+    db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test')
+    cursor = db.cursor()
+    sql = "insert into opensource(uid, name) values(33, \"hello\")"
+    rowsaffected = cursor.execute(sql)
+    db.commit()
+    cursor.close()
+    db.close()    
+    assert rowsaffected == 1
+
+def test_insert_with_grave():
+    db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test')
+    cursor = db.cursor()
+
+    sql = "insert into `opensource`(uid, name) values(33, 'hello')"
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 1
+
+    #sql = "insert into opensource(`uid`, name) values(33, 'hello')"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1
+
+    #sql = "insert into opensource(`uid`, `name`) values(33, 'hello')"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1
+
+    #sql = "insert into `opensource`(`uid`, `name`) values(33, 'hello')"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1    
+
+    sql = "insert into opensource(uid, name) values(33, `hello`)"
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 0
+
+    sql = "insert into opensource(uid, name) values(33, `123`)"
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 0    
+
+    #sql = "insert into \"opensource\"(uid, name) values(33, 'hello')"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1
+
+    #sql = "insert into 'opensource'(uid, name) values(33, 'hello')"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1    
+
+    db.commit()
+    cursor.close()
+    db.close()    
+
+def test_insert_with_set_keyword():
+    db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test')
+    cursor = db.cursor()
+    
+    sql = "insert into opensource set uid = 33, name = 'hello'"
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 1   
+
+    #sql = "insert into opensource set `uid` = 33, `name` = 'hello'"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1   
+
+    #sql = "insert into opensource set `uid` = 33, `name` = '12312'"
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1       
+
+    #sql = "insert into opensource set `uid` = 33, `name` = \"12312\""
+    #rowsaffected = cursor.execute(sql)
+    #assert rowsaffected == 1           
+
+    sql = "insert into opensource set uid = 33, name = 'hello'"
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 1   
+
+    sql = "insert into opensource set uid = 33, name = '12312'"
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 1       
+
+    sql = "insert into opensource set uid = 33, name = \"12312waefoioiwa\""
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 1       
+
+    sql = "insert into opensource set uid = 33, name = \"waefoioiwawaefwa\""
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 1       
+
+    sql = "insert into opensource set uid = 33, name = 123waefoioiwawaefwa"
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 0
+
+    sql = "insert into opensource set uid = 33, name = \"12312\""
+    rowsaffected = cursor.execute(sql)
+    assert rowsaffected == 1           
+
+    db.commit()
+    cursor.close()
+    db.close()    
+