Java 类com.facebook.presto.sql.tree.CreateTableAsSelect 实例源码

项目:sql4es    文件:ESUpdateState.java   
/**
 * Creates a table based on a select on another type and inserts the data (currently not possible to
 * perform this action 'WITH NO DATA'.
 * @param sql
 * @param createAsSelect
 * @param index
 * @return the number of rows inserted
 * @throws SQLException
 */
public int execute(String sql, CreateTableAsSelect createAsSelect, String index) throws SQLException {
    if(!createAsSelect.isWithData()) throw new SQLException("Not yet possible to create table as select without data (create emtpy table, "
            + "insert data and delete it will have the same effect");
    // first create the index
    SqlParser parser = new SqlParser();
    int queryIdx = sql.toLowerCase().indexOf(" as ");
    try{
        String createSql = sql.substring(0, queryIdx)+" (_id String)" ;
        CreateTable create = (CreateTable)parser.createStatement(createSql);
        this.execute(createSql, create, index);

    }catch(SQLException sqle) {
        throw sqle;
    }catch(Exception e){
        throw new SQLException("Unable to create table due to: "+e.getMessage(), e);
    }

    // secondly add the documents from the query
    String insertSql = "INSERT INTO "+createAsSelect.getName().toString()+" "+sql.substring(queryIdx+4);
    Insert insert = (Insert)parser.createStatement(insertSql);
    int res = this.execute(insertSql, insert, index);
    this.statement.getConnection().getTypeMap(); // trigger a reload of the table&column set for the connection
    return res;
}
项目:presto-query-formatter    文件:StatementFormatter.java   
@Override
protected Void visitCreateTableAsSelect(CreateTableAsSelect node, Integer indent)
{
    builder.append("CREATE TABLE ");
    if (node.isNotExists()) {
        builder.append("IF NOT EXISTS ");
    }
    builder.append(node.getName());

    appendTableProperties(builder, node.getProperties(), indent);

    builder.append(" AS ");
    process(node.getQuery(), indent);

    if (!node.isWithData()) {
        builder.append(" WITH NO DATA");
    }

    return null;
}
项目:presto    文件:SqlFormatter.java   
@Override
protected Void visitCreateTableAsSelect(CreateTableAsSelect node, Integer indent)
{
    builder.append("CREATE TABLE ")
            .append(node.getName());

    if (!node.getProperties().isEmpty()) {
        builder.append(" WITH (");
        Joiner.on(", ").appendTo(builder, transform(node.getProperties().entrySet(),
                entry -> entry.getKey() + " = " + formatExpression(entry.getValue())));
        builder.append(")");
    }

    builder.append(" AS ");
    process(node.getQuery(), indent);

    if (!node.isWithData()) {
        builder.append(" WITH NO DATA");
    }

    return null;
}
项目:EchoQuery    文件:SqlFormatter.java   
@Override
protected Void visitCreateTableAsSelect(CreateTableAsSelect node, Integer indent)
{
    builder.append("CREATE TABLE ")
            .append(node.getName());

    if (!node.getProperties().isEmpty()) {
        builder.append(" WITH (");
        Joiner.on(", ").appendTo(builder, transform(node.getProperties().entrySet(),
                entry -> entry.getKey() + " = " + formatExpression(entry.getValue())));
        builder.append(")");
    }

    builder.append(" AS ");
    process(node.getQuery(), indent);

    if (!node.isWithData()) {
        builder.append(" WITH NO DATA");
    }

    return null;
}
项目:sql4es    文件:ESStatement.java   
@Override
public int executeUpdate(String sql) throws SQLException {
    //System.out.println("QUERY: ["+sql+"]");
    sql = sql.replaceAll("\r", " ").replaceAll("\n", " ").trim();
    // custom stuff to support UPDATE statements since Presto does not parse it
    if(sql.toLowerCase().startsWith("update")){
        return updateState.execute(sql);
    }

    com.facebook.presto.sql.tree.Statement statement = parser.createStatement(sql);
    if(statement instanceof Query) throw new SQLException("A regular query cannot be executed as an Update");
    if(statement instanceof Insert){
        //if(connection.getSchema() == null) throw new SQLException("No active index set for this driver. Pleas specify an active index or alias by executing 'USE <index/alias>' first");
        return updateState.execute(sql, (Insert)statement, connection.getSchema());
    }else if(statement instanceof Delete){
        if(connection.getSchema() == null) throw new SQLException("No active index set for this driver. Pleas specify an active index or alias by executing 'USE <index/alias>' first");
        return updateState.execute(sql, (Delete)statement, connection.getSchema());
    }else if(statement instanceof CreateTable){
        return updateState.execute(sql, (CreateTable)statement, connection.getSchema());
    }else if(statement instanceof CreateTableAsSelect){
        return updateState.execute(sql, (CreateTableAsSelect)statement, connection.getSchema());
    }else if(statement instanceof CreateView){
        return updateState.execute(sql, (CreateView)statement, connection.getSchema());
    }else if(statement instanceof Use){
        connection.setSchema( ((Use)statement).getSchema());
        //connection.getTypeMap(); // updates the type mappings found in properties
        return 0;
    }else if(statement instanceof DropTable){
        return updateState.execute(sql, (DropTable)statement);
    }else if(statement instanceof DropView){
        return updateState.execute(sql, (DropView)statement);
    }throw new SQLFeatureNotSupportedException("Unable to parse provided update sql");
}
项目:sql4es    文件:ESUpdateState.java   
/**
 * Executes the {@link BulkRequest} being hold by this state.
 * @return an integer indicator for each executed request: Statement.SUCCESS_NO_INFO for success, 
 * else Statement.EXECUTE_FAILED)
 */
public int[] executeBulk(){
    int[] result = new int[bulkList.size()];
    SqlParser parser = new SqlParser();
    for(int i=0; i<bulkList.size(); i++) try{
        String sql = bulkList.get(i);
        com.facebook.presto.sql.tree.Statement st = parser.createStatement(sql);
        if(st instanceof DropTable){
            this.execute(sql, (DropTable)st);
        }else if(st instanceof DropView){
            this.execute(sql, (DropView)st);
        }else if(st instanceof CreateTable){
            this.execute(sql, (CreateTable)st, this.statement.getConnection().getSchema());
        }else if(st instanceof CreateTableAsSelect){
            this.execute(sql, (CreateTableAsSelect)st, this.statement.getConnection().getSchema());
        }else if(st instanceof CreateView){
            this.execute(sql, (CreateView)st, this.statement.getConnection().getSchema());
        }else if(st instanceof Delete){
            this.execute(sql, (Delete)st, this.statement.getConnection().getSchema());
        }else  if(st instanceof Insert){
            this.execute(sql, (Insert)st, this.statement.getConnection().getSchema());
        }
        result[i]= Statement.SUCCESS_NO_INFO;
    }catch (Exception e){
        result[i] = Statement.EXECUTE_FAILED;
    }
    this.clearBulk();
    return result;
}
项目:presto    文件:StatementAnalyzer.java   
@Override
protected RelationType visitCreateTableAsSelect(CreateTableAsSelect node, AnalysisContext context)
{
    analysis.setUpdateType("CREATE TABLE");

    // turn this into a query that has a new table writer node on top.
    QualifiedObjectName targetTable = createQualifiedObjectName(session, node, node.getName());
    analysis.setCreateTableDestination(targetTable);

    for (Expression expression : node.getProperties().values()) {
        // analyze table property value expressions which must be constant
        createConstantAnalyzer(metadata, session)
                .analyze(expression, new RelationType(), context);
    }
    analysis.setCreateTableProperties(node.getProperties());

    Optional<TableHandle> targetTableHandle = metadata.getTableHandle(session, targetTable);
    if (targetTableHandle.isPresent()) {
        throw new SemanticException(TABLE_ALREADY_EXISTS, node, "Destination table '%s' already exists", targetTable);
    }
    accessControl.checkCanCreateTable(session.getRequiredTransactionId(), session.getIdentity(), targetTable);

    analysis.setCreateTableAsSelectWithData(node.isWithData());

    // analyze the query that creates the table
    RelationType descriptor = process(node.getQuery(), context);

    validateColumnNames(node, descriptor);

    return new RelationType(Field.newUnqualified("rows", BIGINT));
}
项目:presto    文件:AstBuilder.java   
@Override
public Node visitCreateTableAsSelect(SqlBaseParser.CreateTableAsSelectContext context)
{
    return new CreateTableAsSelect(getLocation(context), getQualifiedName(context.qualifiedName()), (Query) visit(context.query()), processTableProperties(context.tableProperties()), context.NO() == null);
}