@@ -40,50 +40,69 @@ func (n *nopCloser) Close() error {
4040
4141func TestBuildCommands (t * testing.T ) {
4242 tests := []struct {
43- Input string
44- Expected []* command
43+ Input string
44+ Expected []* command
45+ ExpectError bool
4546 }{
46- {`SELECT * FROM t1;` , []* command {{& SelectStatement {"SELECT * FROM t1" }, false }}},
47- {`CREATE TABLE t1;` , []* command {{& BulkDdlStatement {[]string {"CREATE TABLE t1" }}, false }}},
48- {`CREATE TABLE t1(pk INT64) PRIMARY KEY(pk); ALTER TABLE t1 ADD COLUMN col INT64; CREATE INDEX i1 ON t1(col); DROP INDEX i1; DROP TABLE t1;` ,
49- []* command {{& BulkDdlStatement {[]string {
47+ {Input : `SELECT * FROM t1;` , Expected : []* command {{& SelectStatement {"SELECT * FROM t1" }, false }}},
48+ {Input : `CREATE TABLE t1;` , Expected : []* command {{& BulkDdlStatement {[]string {"CREATE TABLE t1" }}, false }}},
49+ {Input : `CREATE TABLE t1(pk INT64) PRIMARY KEY(pk); ALTER TABLE t1 ADD COLUMN col INT64; CREATE INDEX i1 ON t1(col); DROP INDEX i1; DROP TABLE t1;` ,
50+ Expected : []* command {{& BulkDdlStatement {[]string {
5051 "CREATE TABLE t1(pk INT64) PRIMARY KEY(pk)" ,
5152 "ALTER TABLE t1 ADD COLUMN col INT64" ,
5253 "CREATE INDEX i1 ON t1(col)" ,
5354 "DROP INDEX i1" ,
5455 "DROP TABLE t1" ,
5556 }}, false }}},
56- {`CREATE TABLE t1(pk INT64) PRIMARY KEY(pk);
57+ {Input : `CREATE TABLE t1(pk INT64) PRIMARY KEY(pk);
5758 CREATE TABLE t2(pk INT64) PRIMARY KEY(pk);
5859 SELECT * FROM t1\G
5960 DROP TABLE t1;
6061 DROP TABLE t2;
6162 SELECT 1;` ,
62- []* command {
63+ Expected : []* command {
6364 {& BulkDdlStatement {[]string {"CREATE TABLE t1(pk INT64) PRIMARY KEY(pk)" , "CREATE TABLE t2(pk INT64) PRIMARY KEY(pk)" }}, false },
6465 {& SelectStatement {"SELECT * FROM t1" }, true },
6566 {& BulkDdlStatement {[]string {"DROP TABLE t1" , "DROP TABLE t2" }}, false },
6667 {& SelectStatement {"SELECT 1" }, false },
6768 }},
6869 {
69- `
70+ Input : `
7071 CREATE TABLE t1(pk INT64 /* NOT NULL*/, col INT64) PRIMARY KEY(pk);
7172 INSERT t1(pk/*, col*/) VALUES(1/*, 2*/);
7273 UPDATE t1 SET col = /* pk + */ col + 1 WHERE TRUE;
7374 DELETE t1 WHERE TRUE /* AND pk = 1 */;
7475 SELECT 0x1/**/A` ,
75- []* command {
76+ Expected : []* command {
7677 {& BulkDdlStatement {[]string {"CREATE TABLE t1(pk INT64 , col INT64) PRIMARY KEY(pk)" }}, false },
7778 {& DmlStatement {"INSERT t1(pk/*, col*/) VALUES(1/*, 2*/)" }, false },
7879 {& DmlStatement {"UPDATE t1 SET col = /* pk + */ col + 1 WHERE TRUE" }, false },
7980 {& DmlStatement {"DELETE t1 WHERE TRUE /* AND pk = 1 */" }, false },
8081 {& SelectStatement {"SELECT 0x1/**/A" }, false },
8182 }},
83+ {
84+ // spanner-cli don't permit empty statements.
85+ Input : `SELECT 1; /* comment */; SELECT 2` ,
86+ ExpectError : true ,
87+ },
88+ {
89+ Input : `SELECT 1; /* comment 1 */; /* comment 2 */` ,
90+ ExpectError : true ,
91+ },
92+ {
93+ // A comment after the last semicolon is permitted.
94+ Input : `SELECT 1; /* comment */` ,
95+ Expected : []* command {
96+ {& SelectStatement {"SELECT 1" }, false },
97+ }},
8298 }
8399
84100 for _ , test := range tests {
85101 got , err := buildCommands (test .Input )
86- if err != nil {
102+ if test .ExpectError && err == nil {
103+ t .Errorf ("expect error but not error, input: %v" , test .Input )
104+ }
105+ if ! test .ExpectError && err != nil {
87106 t .Errorf ("err: %v, input: %v" , err , test .Input )
88107 }
89108
0 commit comments