From be801be3bf8185106496a1dfd9d379f06a3d0d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Wed, 4 Oct 2017 01:13:03 -0500 Subject: [PATCH] Updated SQL_Schema_Repository (markdown) --- SQL_Schema_Repository.md | 48 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/SQL_Schema_Repository.md b/SQL_Schema_Repository.md index 27ff9f0..96c4f3d 100644 --- a/SQL_Schema_Repository.md +++ b/SQL_Schema_Repository.md @@ -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 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()); + ``` \ No newline at end of file