mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
Updated SQL_Schema_Repository (markdown)
@@ -91,4 +91,52 @@ assertEquals("+--------------+--------------+------+-----+---------------------+
|
||||
"+--------------+--------------+------+-----+---------------------+-----------------------------+\n",
|
||||
repository.console("show columns from test1"));
|
||||
|
||||
```
|
||||
|
||||
3. Column Resolve
|
||||
```java
|
||||
final String dbType = JdbcConstants.MYSQL;
|
||||
|
||||
SchemaRepository repository = new SchemaRepository(dbType);
|
||||
|
||||
repository.console("create table t_emp(emp_id bigint, name varchar(20));");
|
||||
repository.console("create table t_org(org_id bigint, name varchar(20));");
|
||||
|
||||
String sql = "SELECT emp_id, a.name AS emp_name, org_id, b.name AS org_name\n" +
|
||||
"FROM t_emp a\n" +
|
||||
"\tINNER JOIN t_org b ON a.emp_id = b.org_id";
|
||||
|
||||
List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
|
||||
assertEquals(1, stmtList.size());
|
||||
|
||||
SQLSelectStatement stmt = (SQLSelectStatement) stmtList.get(0);
|
||||
SQLSelectQueryBlock queryBlock = stmt.getSelect().getQueryBlock();
|
||||
|
||||
// 大小写不敏感
|
||||
assertNotNull(queryBlock.findTableSource("A"));
|
||||
assertSame(queryBlock.findTableSource("a"), queryBlock.findTableSource("A"));
|
||||
|
||||
assertNull(queryBlock.findTableSourceWithColumn("emp_id"));
|
||||
|
||||
// 使用repository做column resolve
|
||||
repository.resolve(stmt);
|
||||
|
||||
assertNotNull(queryBlock.findTableSourceWithColumn("emp_id"));
|
||||
|
||||
SQLExprTableSource tableSource = (SQLExprTableSource) queryBlock.findTableSourceWithColumn("emp_id");
|
||||
assertNotNull(tableSource.getSchemaObject());
|
||||
|
||||
SQLCreateTableStatement createTableStmt = (SQLCreateTableStatement) tableSource.getSchemaObject().getStatement();
|
||||
assertNotNull(createTableStmt);
|
||||
|
||||
SQLSelectItem selectItem = queryBlock.findSelectItem("org_name");
|
||||
assertNotNull(selectItem);
|
||||
SQLPropertyExpr selectItemExpr = (SQLPropertyExpr) selectItem.getExpr();
|
||||
SQLColumnDefinition column = selectItemExpr.getResolvedColumn();
|
||||
assertNotNull(column);
|
||||
assertEquals("name", column.getName().toString());
|
||||
assertEquals("t_org", (((SQLCreateTableStatement)column.getParent()).getName().toString()));
|
||||
|
||||
assertSame(queryBlock.findTableSource("B"), selectItemExpr.getResolvedTableSource());
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user