Ejemplo n.º 1
0
  public SQLCreateTableStatement parseCrateTable(boolean acceptCreate) {
    if (acceptCreate) {
      accept(Token.CREATE);
    }

    SQLCreateTableStatement createTable = newCreateStatement();

    if (identifierEquals("GLOBAL")) {
      lexer.nextToken();

      if (identifierEquals("TEMPORARY")) {
        lexer.nextToken();
        createTable.setType(SQLCreateTableStatement.Type.GLOBAL_TEMPORARY);
      } else {
        throw new ParserException("syntax error " + lexer.token() + " " + lexer.stringVal());
      }
    } else if (lexer.token() == Token.IDENTIFIER && lexer.stringVal().equalsIgnoreCase("LOCAL")) {
      lexer.nextToken();
      if (lexer.token() == Token.IDENTIFIER && lexer.stringVal().equalsIgnoreCase("TEMPORAY")) {
        lexer.nextToken();
        createTable.setType(SQLCreateTableStatement.Type.LOCAL_TEMPORARY);
      } else {
        throw new ParserException("syntax error");
      }
    }

    accept(Token.TABLE);

    createTable.setName(this.exprParser.name());

    if (lexer.token() == Token.LPAREN) {
      lexer.nextToken();

      for (; ; ) {
        if (lexer.token() == Token.IDENTIFIER //
            || lexer.token() == Token.LITERAL_ALIAS) {
          SQLColumnDefinition column = this.exprParser.parseColumn();
          createTable.getTableElementList().add(column);
        } else if (lexer.token == Token.PRIMARY //
            || lexer.token == Token.UNIQUE //
            || lexer.token == Token.CHECK //
            || lexer.token == Token.CONSTRAINT) {
          SQLConstraint constraint = this.exprParser.parseConstaint();
          constraint.setParent(createTable);
          createTable.getTableElementList().add((SQLTableElement) constraint);
        } else if (lexer.token() == Token.TABLESPACE) {
          throw new ParserException("TODO " + lexer.token());
        } else {
          SQLColumnDefinition column = this.exprParser.parseColumn();
          createTable.getTableElementList().add(column);
        }

        if (lexer.token() == Token.COMMA) {
          lexer.nextToken();

          if (lexer.token() == Token.RPAREN) { // compatible for sql server
            break;
          }
          continue;
        }

        break;
      }

      // while
      // (this.tokenList.current().equals(OracleToken.ConstraintToken)) {
      // parseConstaint(table.getConstraints());
      //
      // if (this.tokenList.current().equals(OracleToken.CommaToken))
      // ;
      // lexer.nextToken();
      // }

      accept(Token.RPAREN);

      if (identifierEquals("INHERITS")) {
        lexer.nextToken();
        accept(Token.LPAREN);
        SQLName inherits = this.exprParser.name();
        createTable.setInherits(new SQLExprTableSource(inherits));
        accept(Token.RPAREN);
      }
    }

    return createTable;
  }