Package com.alibaba.wasp.plan.parser.druid.dialect

Source Code of com.alibaba.wasp.plan.parser.druid.dialect.WaspSqlExprParser

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.wasp.plan.parser.druid.dialect;

import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSQLColumnDefinition;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlExprParser;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.Token;
import com.alibaba.wasp.FieldKeyWord;

public class WaspSqlExprParser extends MySqlExprParser {

  public WaspSqlExprParser(Lexer lexer) {
    super(lexer);
  }

  public WaspSqlExprParser(String sql) {
    super(sql);
  }

  // parse a column
  public SQLColumnDefinition parseCreateColumn() {
    WaspSqlColumnDefinition column = new WaspSqlColumnDefinition();
    SQLName name = name();
    if (name.getSimleName().equalsIgnoreCase(WaspSqlCreateTableParser.REQUIRED)) {
      column.setColumnConstraint(FieldKeyWord.REQUIRED);
    } else if (name.getSimleName().equalsIgnoreCase(
        WaspSqlCreateTableParser.OPTIONAL)) {
      column.setColumnConstraint(FieldKeyWord.OPTIONAL);
    } else if (name.getSimleName().equalsIgnoreCase(
        WaspSqlCreateTableParser.REPEATED)) {
      column.setColumnConstraint(FieldKeyWord.REPEATED);
    } else {
      throw new ParserException("error " + name);
    }
    column.setDataType(parseDataType());
    column.setName(name());
    return parseColumnRest(column);
  }

  public SQLColumnDefinition parseColumn() {
    WaspSqlColumnDefinition column = new WaspSqlColumnDefinition();
    column.setName(name());
    column.setDataType(parseDataType());

    return parseColumnRest(column);
  }

  public SQLColumnDefinition parseColumnRest(SQLColumnDefinition column) {
    if (identifierEquals("AUTO_INCREMENT")) {
      lexer.nextToken();
      if (column instanceof MySqlSQLColumnDefinition) {
        ((MySqlSQLColumnDefinition) column).setAutoIncrement(true);
      }
      return parseColumnRest(column);
    }

    if (identifierEquals("COLUMNFAMILY")) {// columnfamily
      lexer.nextToken();
      if (column instanceof WaspSqlColumnDefinition) {
        ((WaspSqlColumnDefinition) column).setColumnFamily(name());
      }
      return parseColumnRest(column);
    }

    if (identifierEquals("COMMENT")) {// columnfamily
      lexer.nextToken();
      // accept();
      column.setComment(name().getSimleName());
      return parseColumnRest(column);
    }

    if (identifierEquals("PARTITION")) {
      throw new ParserException("syntax error " + lexer.token() + " "
          + lexer.stringVal());
    }

    super.parseColumnRest(column);

    return column;
  }

  public Limit parseLimit() {
    if (lexer.token() == Token.LIMIT) {
      lexer.nextToken();

      Limit limit = new Limit();

      SQLExpr temp = this.expr();
      if (lexer.token() == (Token.COMMA)) {
        limit.setOffset(temp);
        lexer.nextToken();
        limit.setRowCount(this.expr());
      } else if (identifierEquals("OFFSET")) {
        limit.setRowCount(temp);
        lexer.nextToken();
        limit.setOffset(this.expr());
      } else {
        limit.setRowCount(temp);
      }
      return limit;
    }
    return null;
  }
}
TOP

Related Classes of com.alibaba.wasp.plan.parser.druid.dialect.WaspSqlExprParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.