/** JOIN clause in FROM */ public Integer fromJoin(HplsqlParser.From_join_clauseContext ctx) { StringBuilder sql = new StringBuilder(); if (ctx.T_COMMA() != null) { sql.append(", "); sql.append(evalPop(ctx.from_table_clause())); } else if (ctx.from_join_type_clause() != null) { sql.append(" "); sql.append(exec.getText(ctx.from_join_type_clause())); sql.append(" "); sql.append(evalPop(ctx.from_table_clause())); sql.append(" "); sql.append(exec.getText(ctx, ctx.T_ON().getSymbol(), ctx.bool_expr().getStop())); } exec.stackPush(sql); return 0; }
/** CREATE TABLE statement */ public Integer createTable(HplsqlParser.Create_table_stmtContext ctx) { trace(ctx, "CREATE TABLE"); StringBuilder sql = new StringBuilder(); sql.append(exec.getText(ctx, ctx.T_CREATE().getSymbol(), ctx.T_OPEN_P().getSymbol())); int cnt = ctx.create_table_columns().create_table_columns_item().size(); int cols = 0; for (int i = 0; i < cnt; i++) { Create_table_columns_itemContext col = ctx.create_table_columns().create_table_columns_item(i); if (col.create_table_column_cons() != null) { continue; } if (cols > 0) { sql.append(",\n"); } sql.append(col.ident().getText()); sql.append(" "); sql.append(exec.evalPop(col.dtype(), col.dtype_len())); cols++; } sql.append("\n)"); if (ctx.create_table_options() != null) { sql.append(" " + evalPop(ctx.create_table_options()).toString()); } trace(ctx, sql.toString()); Query query = exec.executeSql(ctx, sql.toString(), exec.conf.defaultConnection); if (query.error()) { exec.signal(query); return 1; } exec.setSqlSuccess(); exec.closeQuery(query, exec.conf.defaultConnection); return 0; }
/** Unary boolean expression in executable SQL statement */ public Integer execBoolUnarySql(HplsqlParser.Bool_expr_unaryContext ctx) { StringBuilder sql = new StringBuilder(); if (ctx.T_IS() != null) { sql.append(evalPop(ctx.expr(0)).toString()); sql.append(" " + exec.getText(ctx, ctx.T_IS().getSymbol(), ctx.T_NULL().getSymbol())); } else if (ctx.T_BETWEEN() != null) { sql.append(evalPop(ctx.expr(0)).toString()); sql.append(" " + ctx.T_BETWEEN().getText() + " "); sql.append(evalPop(ctx.expr(1)).toString()); sql.append(" " + ctx.T_AND().getText() + " "); sql.append(evalPop(ctx.expr(2)).toString()); } else if (ctx.T_EXISTS() != null) { exec.append(sql, exec.nvl(ctx.T_NOT(), ctx.T_EXISTS()), ctx.T_OPEN_P()); exec.append( sql, evalPop(ctx.select_stmt()).toString(), ctx.T_OPEN_P().getSymbol(), ctx.select_stmt().getStart()); exec.append( sql, ctx.T_CLOSE_P().getText(), ctx.select_stmt().stop, ctx.T_CLOSE_P().getSymbol()); } else if (ctx.bool_expr_single_in() != null) { singleInClauseSql(ctx.bool_expr_single_in(), sql); } else if (ctx.bool_expr_multi_in() != null) { multiInClauseSql(ctx.bool_expr_multi_in(), sql); } exec.stackPush(sql); return 0; }
/** Single table name in FROM */ public Integer fromTable(HplsqlParser.From_table_name_clauseContext ctx) { StringBuilder sql = new StringBuilder(); sql.append(evalPop(ctx.table_name())); if (ctx.from_alias_clause() != null) { sql.append(" ").append(exec.getText(ctx.from_alias_clause())); } exec.stackPush(sql); return 0; }
/** SELECT list */ public Integer selectList(HplsqlParser.Select_listContext ctx) { StringBuilder sql = new StringBuilder(); if (ctx.select_list_set() != null) { sql.append(exec.getText(ctx.select_list_set())).append(" "); } int cnt = ctx.select_list_item().size(); for (int i = 0; i < cnt; i++) { if (ctx.select_list_item(i).select_list_asterisk() == null) { sql.append(evalPop(ctx.select_list_item(i).expr())); if (ctx.select_list_item(i).select_list_alias() != null) { sql.append(" " + exec.getText(ctx.select_list_item(i).select_list_alias())); } } else { sql.append(exec.getText(ctx.select_list_item(i).select_list_asterisk())); } if (i + 1 < cnt) { sql.append(", "); } } exec.stackPush(sql); return 0; }