@@ -10,10 +10,102 @@ import std.traits;
1010import test.base;
1111import std.string ;
1212
13+ public class MySqlSelectTest_1 {
14+
15+ void test () {
16+ testLike();
17+ // testLeftJoinQuery();
18+ // testInSubQuery();
19+ // test_0();
20+ // test_1();
21+ }
22+
23+ void testLike () {
24+ string sql = " select a from UserInfo a where id::text like '12%' " ;
25+
26+ PGSQLStatementParser parser = new PGSQLStatementParser(sql);
27+ List! SQLStatement statementList = parser.parseStatementList();
28+ SQLStatement statemen = statementList.get (0 );
29+
30+ PGSchemaStatVisitor visitor = new PGSchemaStatVisitor();
31+ statemen.accept(visitor);
1332
14- public class MySqlSelectTest_1 {
33+ // trace("Tables : " ~ visitor.getTables().toString());
34+ // trace("fields : " ~ visitor.getColumns().to!string());
35+ // trace("coditions : " ~ visitor.getConditions().toString());
36+
37+ SQLSelectStatement selStmt = cast (SQLSelectStatement) statemen;
38+ SQLSelectQueryBlock queryBlock = selStmt.getSelect().getQueryBlock();
39+ SQLExpr sqlExpr = queryBlock.getWhere();
40+ string w = SQLUtils.toSQLString(queryBlock);
41+
42+ trace(w);
43+
44+ }
45+
46+ private void testLeftJoinQuery () {
1547
16- public void test_0 () {
48+ mixin (DO_TEST );
49+
50+ string sql = " select a, b from UserInfo a left join Car b on a.id = b.uid " ~
51+ " where a.age = 5" ;
52+
53+ MySqlStatementParser parser = new MySqlStatementParser(sql);
54+ List! SQLStatement statementList = parser.parseStatementList();
55+ SQLStatement statemen = statementList.get (0 );
56+ // print(statementList);
57+ SQLSelectStatement stmt = cast (SQLSelectStatement) statemen;
58+ SQLSelectQueryBlock queryBlock = stmt.getSelect().getQueryBlock();
59+ foreach (selectItem; queryBlock.getSelectList()) {
60+ logDebug(" select : ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()), selectItem.getAlias()));
61+ }
62+
63+ assert (1 == statementList.size());
64+
65+ SQLJoinTableSource tableSource = cast (SQLJoinTableSource) queryBlock.getFrom();
66+ SQLExprTableSource exprTableSource = cast (SQLExprTableSource) tableSource.getLeft();
67+ string name = exprTableSource.getAlias();
68+ warning(" alias: " , name);
69+ assert (name == " a" );
70+
71+ SQLExpr sqlExpr = queryBlock.getWhere();
72+ string tableAlias = tableSource.getAlias();
73+ }
74+
75+ private void testInSubQuery () {
76+
77+ mixin (DO_TEST );
78+
79+ string sql = " select columnName from table1 where id in (select id from table3 where name = ?)" ;
80+ // string sql = "SELECT t1.name as tname, t2.salary FROM employee t1, info t2 WHERE t1.name = t2.name order by name desc;";
81+
82+ MySqlStatementParser parser = new MySqlStatementParser(sql);
83+ List! SQLStatement statementList = parser.parseStatementList();
84+ SQLStatement statemen = statementList.get (0 );
85+ // print(statementList);
86+ SQLSelectStatement stmt = cast (SQLSelectStatement) statemen;
87+ SQLSelectQueryBlock queryBlock = stmt.getSelect().getQueryBlock();
88+ foreach (selectItem; queryBlock.getSelectList()) {
89+ logDebug(" select : ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()), selectItem.getAlias()));
90+ }
91+
92+ assert (1 == statementList.size());
93+
94+ SQLInSubQueryExpr subQueryExpr = cast (SQLInSubQueryExpr) queryBlock.getWhere();
95+ assert (subQueryExpr ! is null );
96+ string w = SQLUtils.toSQLString(subQueryExpr);
97+ tracef(" where: %s" , w);
98+
99+ MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
100+ statemen.accept(visitor);
101+
102+ logDebug(" Tables : " , visitor.getTables());
103+ logDebug(" fields : " , visitor.getColumns());
104+ logDebug(" coditions : " , visitor.getConditions());
105+ logDebug(" orderBy : " , visitor.getOrderByColumns());
106+ }
107+
108+ public void test_0 () {
17109 mixin (DO_TEST );
18110
19111 string sql = " SELECT t1.name as tname, t2.salary FROM employee t1, info t2 WHERE t1.name = t2.name order by name desc;" ;
@@ -22,21 +114,21 @@ public class MySqlSelectTest_1 {
22114 List! SQLStatement statementList = parser.parseStatementList();
23115 SQLStatement statemen = statementList.get (0 );
24116 // print(statementList);
25- SQLSelectStatement stmt = cast (SQLSelectStatement)statemen ;
117+ SQLSelectStatement stmt = cast (SQLSelectStatement) statemen ;
26118 SQLSelectQueryBlock queryBlock = stmt.getSelect().getQueryBlock();
27- foreach (selectItem; queryBlock.getSelectList()) {
28- logDebug(" selcet : ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()),selectItem.getAlias()));
119+ foreach (selectItem; queryBlock.getSelectList()) {
120+ logDebug(" select : ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()), selectItem.getAlias()));
29121 }
30122
31123 assert (1 == statementList.size());
32124
33125 MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
34126 statemen.accept(visitor);
35127
36- logDebug(" Tables : " , visitor.getTables());
37- logDebug(" fields : " , visitor.getColumns());
38- logDebug(" coditions : " , visitor.getConditions());
39- logDebug(" orderBy : " , visitor.getOrderByColumns());
128+ logDebug(" Tables : " , visitor.getTables());
129+ logDebug(" fields : " , visitor.getColumns());
130+ logDebug(" coditions : " , visitor.getConditions());
131+ logDebug(" orderBy : " , visitor.getOrderByColumns());
40132
41133 assert (2 == visitor.getTables().size());
42134 assert (3 == visitor.getColumns().length);
@@ -45,12 +137,12 @@ public class MySqlSelectTest_1 {
45137 assert (visitor.getTables().containsKey(new TableStat.Name(" employee" )));
46138 assert (visitor.getTables().containsKey(new TableStat.Name(" info" )));
47139
48- assert (search(visitor.getColumns(),new TableStat.Column(" employee" , " name" )) != - 1 );
49- assert (search(visitor.getColumns(),new TableStat.Column(" info" , " name" )) != - 1 );
140+ assert (search(visitor.getColumns(), new TableStat.Column(" employee" , " name" )) != - 1 );
141+ assert (search(visitor.getColumns(), new TableStat.Column(" info" , " name" )) != - 1 );
50142 assert (search(visitor.getColumns(), new TableStat.Column(" info" , " salary" )) != - 1 );
51143 }
52144
53- public void test_1 () {
145+ public void test_1 () {
54146 mixin (DO_TEST );
55147
56148 string sql = " SELECT t1, t2.salary FROM employee t1 left join t1.add t2 where t1.id > 0 and t1.name = 'gxc' order by t1.id desc;" ; // on t1.name = t2.name
@@ -60,46 +152,44 @@ public class MySqlSelectTest_1 {
60152 List! SQLStatement statementList = parser.parseStatementList();
61153 SQLStatement statemen = statementList.get (0 );
62154 // print(statementList);
63- SQLSelectStatement stmt = cast (SQLSelectStatement)statemen ;
155+ SQLSelectStatement stmt = cast (SQLSelectStatement) statemen ;
64156 SQLSelectQueryBlock queryBlock = stmt.getSelect().getQueryBlock();
65-
66- foreach (selectItem; queryBlock.getSelectList()) {
67- logDebug(" selcet : ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()),selectItem.getAlias()));
157+
158+ foreach (selectItem; queryBlock.getSelectList()) {
159+ logDebug(" select : ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()), selectItem.getAlias()));
68160 }
69-
161+
70162 auto whe = SQLUtils.toSQLString(queryBlock.getWhere());
71- logDebug(" where : " ,whe);
72- logDebug(" order : " ,SQLUtils.toSQLString(queryBlock.getOrderBy()));
73- foreach (item ; queryBlock.getOrderBy().getItems)
74- {
163+ logDebug(" where : " , whe);
164+ logDebug(" order : " , SQLUtils.toSQLString(queryBlock.getOrderBy()));
165+ foreach (item; queryBlock.getOrderBy().getItems) {
75166 logDebug(" order item : %s" .format(SQLUtils.toSQLString(item.getExpr())));
76- item.replace(item.getExpr(),SQLUtils.toSQLExpr(" t1.name" ));
167+ item.replace(item.getExpr(), SQLUtils.toSQLExpr(" t1.name" ));
77168 }
78-
79169
80170 MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
81171 statemen.accept(visitor);
82172
83- logDebug(" Tables : " , visitor.getTables());
84- logDebug(" fields : " , visitor.getColumns());
85- logDebug(" coditions : " , visitor.getConditions());
86- logDebug(" orderBy : " , visitor.getOrderByColumns());
173+ logDebug(" Tables : " , visitor.getTables());
174+ logDebug(" fields : " , visitor.getColumns());
175+ logDebug(" coditions : " , visitor.getConditions());
176+ logDebug(" orderBy : " , visitor.getOrderByColumns());
87177
88178 auto select_copy = queryBlock.clone();
89- foreach (selectItem; select_copy.getSelectList()) {
90- logDebug(" clone selcet : ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()),selectItem.computeAlias()));
179+ foreach (selectItem; select_copy.getSelectList()) {
180+ logDebug(" clone select: ( %s , %s ) " .format(SQLUtils.toSQLString(selectItem.getExpr()), selectItem
181+ .computeAlias()));
91182 selectItem.setAlias(" _as_b_" );
92183 auto expr = selectItem.getExpr();
93- if (cast (SQLIdentifierExpr)expr ! is null )
184+ if (cast (SQLIdentifierExpr) expr ! is null )
94185 selectItem.setAlias(" _as_idnt_" );
95- if (cast (SQLPropertyExpr)expr ! is null )
186+ if (cast (SQLPropertyExpr) expr ! is null )
96187 selectItem.setAlias(" _as_proper_" );
97188
98189 }
99190
100191 logDebug(" clone : %s" .format(SQLUtils.toSQLString(select_copy)));
101192
102-
103193 // SQLSelectBuilder builder = SQLBuilderFactory.createSelectSQLBuilder(DBType.MYSQL.name);
104194
105195 // builder.from("mytable");
0 commit comments