test_class.file: core/src/test/java/com/qihoo/qsql/plan/TableNameCollectorTest.java
test_class.identifier: TableNameCollectorTest
test_case.body: @Test
      public void testParseSingleTableNameWithLimit() {
          String sql = "SELECT a1 FROM A as a LIMIT 10";
          Assert.assertEquals(Collections.singletonList("A"), parseTableName(sql));
      }
test_case.class_method_signature: TableNameCollectorTest.testParseSingleTableNameWithLimit()
test_case.full_signature: @Test public void testParseSingleTableNameWithLimit()
test_case.identifier: testParseSingleTableNameWithLimit
test_case.invocations: assertEquals singletonList parseTableName
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testParseSingleTableNameWithLimit()
focal_class.declarator: withTempTables = new HashSet<>()
focal_class.modifier: private
focal_class.original_string: private Set<String> withTempTables = new HashSet<>();
focal_class.type: Set<String>
focal_class.var_name: withTempTables
focal_class.declarator: tableNames = new QueryTables()
focal_class.modifier: private
focal_class.original_string: private QueryTables tableNames = new QueryTables();
focal_class.type: QueryTables
focal_class.var_name: tableNames
focal_class.declarator: conformance = SqlConformanceEnum.MYSQL_5
focal_class.modifier: private
focal_class.original_string: private SqlConformance conformance = SqlConformanceEnum.MYSQL_5;
focal_class.type: SqlConformance
focal_class.var_name: conformance
focal_class.declarator: quoting = Quoting.BACK_TICK
focal_class.modifier: private
focal_class.original_string: private Quoting quoting = Quoting.BACK_TICK;
focal_class.type: Quoting
focal_class.var_name: quoting
focal_class.declarator: config = SqlParser
          .configBuilder()
          .setConformance(conformance)
          .setQuoting(quoting)
          .setQuotedCasing(Casing.UNCHANGED)
          .setUnquotedCasing(Casing.UNCHANGED)
          .build()
focal_class.modifier: private
focal_class.original_string: private SqlParser.Config config = SqlParser
          .configBuilder()
          .setConformance(conformance)
          .setQuoting(quoting)
          .setQuotedCasing(Casing.UNCHANGED)
          .setUnquotedCasing(Casing.UNCHANGED)
          .build();
focal_class.type: SqlParser.Config
focal_class.var_name: config
focal_class.file: core/src/main/java/com/qihoo/qsql/plan/TableNameCollector.java
focal_class.identifier: TableNameCollector
focal_class.interfaces: implements SqlVisitor<QueryTables>
focal_class.class_method_signature: TableNameCollector.parseTableName(String sql)
focal_class.full_signature: public QueryTables parseTableName(String sql)
focal_class.identifier: parseTableName
focal_class.modifiers: public
focal_class.parameters: (String sql)
focal_class.return: QueryTables
focal_class.signature: QueryTables parseTableName(String sql)
focal_class.class_method_signature: TableNameCollector.visit(SqlLiteral sqlLiteral)
focal_class.full_signature: @Override public QueryTables visit(SqlLiteral sqlLiteral)
focal_class.identifier: visit
focal_class.modifiers: @Override public
focal_class.parameters: (SqlLiteral sqlLiteral)
focal_class.return: QueryTables
focal_class.signature: QueryTables visit(SqlLiteral sqlLiteral)
focal_class.class_method_signature: TableNameCollector.visit(SqlCall sqlCall)
focal_class.full_signature: @Override public QueryTables visit(SqlCall sqlCall)
focal_class.identifier: visit
focal_class.modifiers: @Override public
focal_class.parameters: (SqlCall sqlCall)
focal_class.return: QueryTables
focal_class.signature: QueryTables visit(SqlCall sqlCall)
focal_class.class_method_signature: TableNameCollector.visit(SqlNodeList sqlNodeList)
focal_class.full_signature: @Override public QueryTables visit(SqlNodeList sqlNodeList)
focal_class.identifier: visit
focal_class.modifiers: @Override public
focal_class.parameters: (SqlNodeList sqlNodeList)
focal_class.return: QueryTables
focal_class.signature: QueryTables visit(SqlNodeList sqlNodeList)
focal_class.class_method_signature: TableNameCollector.visit(SqlIdentifier sqlIdentifier)
focal_class.full_signature: @Override public QueryTables visit(SqlIdentifier sqlIdentifier)
focal_class.identifier: visit
focal_class.modifiers: @Override public
focal_class.parameters: (SqlIdentifier sqlIdentifier)
focal_class.return: QueryTables
focal_class.signature: QueryTables visit(SqlIdentifier sqlIdentifier)
focal_class.class_method_signature: TableNameCollector.visit(SqlDataTypeSpec sqlDataTypeSpec)
focal_class.full_signature: @Override public QueryTables visit(SqlDataTypeSpec sqlDataTypeSpec)
focal_class.identifier: visit
focal_class.modifiers: @Override public
focal_class.parameters: (SqlDataTypeSpec sqlDataTypeSpec)
focal_class.return: QueryTables
focal_class.signature: QueryTables visit(SqlDataTypeSpec sqlDataTypeSpec)
focal_class.class_method_signature: TableNameCollector.visit(SqlDynamicParam sqlDynamicParam)
focal_class.full_signature: @Override public QueryTables visit(SqlDynamicParam sqlDynamicParam)
focal_class.identifier: visit
focal_class.modifiers: @Override public
focal_class.parameters: (SqlDynamicParam sqlDynamicParam)
focal_class.return: QueryTables
focal_class.signature: QueryTables visit(SqlDynamicParam sqlDynamicParam)
focal_class.class_method_signature: TableNameCollector.visit(SqlIntervalQualifier sqlIntervalQualifier)
focal_class.full_signature: @Override public QueryTables visit(SqlIntervalQualifier sqlIntervalQualifier)
focal_class.identifier: visit
focal_class.modifiers: @Override public
focal_class.parameters: (SqlIntervalQualifier sqlIntervalQualifier)
focal_class.return: QueryTables
focal_class.signature: QueryTables visit(SqlIntervalQualifier sqlIntervalQualifier)
focal_class.class_method_signature: TableNameCollector.visitBasicCall(SqlBasicCall sqlCall)
focal_class.full_signature: private void visitBasicCall(SqlBasicCall sqlCall)
focal_class.identifier: visitBasicCall
focal_class.modifiers: private
focal_class.parameters: (SqlBasicCall sqlCall)
focal_class.return: void
focal_class.signature: void visitBasicCall(SqlBasicCall sqlCall)
focal_class.class_method_signature: TableNameCollector.validateTableName(QueryTables tableNames)
focal_class.full_signature: private QueryTables validateTableName(QueryTables tableNames)
focal_class.identifier: validateTableName
focal_class.modifiers: private
focal_class.parameters: (QueryTables tableNames)
focal_class.return: QueryTables
focal_class.signature: QueryTables validateTableName(QueryTables tableNames)
focal_class.class_method_signature: TableNameCollector.parseSql(String sql)
focal_class.full_signature: public SqlNode parseSql(String sql)
focal_class.identifier: parseSql
focal_class.modifiers: public
focal_class.parameters: (String sql)
focal_class.return: SqlNode
focal_class.signature: SqlNode parseSql(String sql)
focal_method.body: public QueryTables parseTableName(String sql) throws SqlParseException {
          SqlParser parser = SqlParser.create(sql, config);
          SqlNode sqlNode = parser.parseQuery();
          return validateTableName(sqlNode.accept(this));
      }
focal_method.class_method_signature: TableNameCollector.parseTableName(String sql)
focal_method.full_signature: public QueryTables parseTableName(String sql)
focal_method.identifier: parseTableName
focal_method.invocations: create parseQuery validateTableName accept
focal_method.modifiers: public
focal_method.parameters: (String sql)
focal_method.return: QueryTables
focal_method.signature: QueryTables parseTableName(String sql)