1. 简介

2. 如何使用SchemaRepository

3. Column Resolve

  1. final String dbType = JdbcConstants.MYSQL;
  2.  
  3. SchemaRepository repository = new SchemaRepository(dbType);
  4.  
  5. repository.console("create table t_emp(emp_id bigint, name varchar(20));");
  6. repository.console("create table t_org(org_id bigint, name varchar(20));");
  7.  
  8. String sql = "SELECT emp_id, a.name AS emp_name, org_id, b.name AS org_name\n" +
  9. "FROM t_emp a\n" +
  10. "\tINNER JOIN t_org b ON a.emp_id = b.org_id";
  11.  
  12. List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
  13.  
  14. SQLSelectStatement stmt = (SQLSelectStatement) stmtList.get(0);
  15. SQLSelectQueryBlock queryBlock = stmt.getSelect().getQueryBlock();
  16.  
  17. // 大小写不敏感
  18. assertNotNull(queryBlock.findTableSource("A"));
  19. assertSame(queryBlock.findTableSource("a"), queryBlock.findTableSource("A"));
  20.  
  21. assertNull(queryBlock.findTableSourceWithColumn("emp_id"));
  22.  
  23. // 使用repository做column resolve
  24. repository.resolve(stmt);
  25.  
  26. assertNotNull(queryBlock.findTableSourceWithColumn("emp_id"));
  27. SQLExprTableSource tableSource = (SQLExprTableSource) queryBlock.findTableSourceWithColumn("emp_id");
  28. assertNotNull(tableSource.getSchemaObject());
  29.  
  30. SQLCreateTableStatement createTableStmt = (SQLCreateTableStatement) tableSource.getSchemaObject().getStatement();
  31. assertNotNull(createTableStmt);
  32.  
  33. SQLSelectItem selectItem = queryBlock.findSelectItem("org_name");
  34. assertNotNull(selectItem);
  35. SQLPropertyExpr selectItemExpr = (SQLPropertyExpr) selectItem.getExpr();
  36. SQLColumnDefinition column = selectItemExpr.getResolvedColumn();
  37. assertNotNull(column);
  38. assertEquals("name", column.getName().toString());
  39. assertEquals("t_org", (((SQLCreateTableStatement)column.getParent()).getName().toString()));
  40.