use of com.abubusoft.kripton.processor.sqlite.grammars.jsql.JqlBaseListener in project kripton by xcesco.
the class JQLChecker method extractColumnsToInsertOrUpdate.
public Set<String> extractColumnsToInsertOrUpdate(final JQLContext jqlContext, String jqlValue, final Finder<SQLProperty> entity) {
final Set<String> result = new LinkedHashSet<String>();
final One<Boolean> selectionOn = new One<Boolean>(null);
final One<Boolean> insertOn = new One<Boolean>(null);
// Column_name_set is needed for insert
// Columns_to_update is needed for update
analyzeInternal(jqlContext, jqlValue, new JqlBaseListener() {
@Override
public void enterColumn_name_set(Column_name_setContext ctx) {
if (insertOn.value0 == null) {
insertOn.value0 = true;
}
}
@Override
public void exitColumn_name_set(Column_name_setContext ctx) {
insertOn.value0 = false;
}
@Override
public void enterColumns_to_update(Columns_to_updateContext ctx) {
if (selectionOn.value0 == null) {
selectionOn.value0 = true;
}
}
@Override
public void exitColumns_to_update(Columns_to_updateContext ctx) {
selectionOn.value0 = false;
}
@Override
public void enterColumn_name(Column_nameContext ctx) {
// works for INSERTS
if (insertOn.value0 != null && insertOn.value0 == true) {
result.add(ctx.getText());
}
}
@Override
public void enterColumn_name_to_update(Column_name_to_updateContext ctx) {
result.add(ctx.getText());
}
});
return result;
}
use of com.abubusoft.kripton.processor.sqlite.grammars.jsql.JqlBaseListener in project kripton by xcesco.
the class JQLChecker method extractProjections.
/**
* Retrieve set of projected field.
*
* @param jql
* @return
*/
public Set<JQLProjection> extractProjections(final JQLContext jqlContext, String jqlValue, final Finder<SQLProperty> entity) {
final Set<JQLProjection> result = new LinkedHashSet<JQLProjection>();
final One<Boolean> projection = new One<Boolean>(null);
analyzeInternal(jqlContext, jqlValue, new JqlBaseListener() {
@Override
public void enterProjected_columns(Projected_columnsContext ctx) {
if (projection.value0 == null) {
projection.value0 = true;
}
}
@Override
public void exitProjected_columns(Projected_columnsContext ctx) {
projection.value0 = false;
}
@Override
public void enterResult_column(Result_columnContext ctx) {
if (projection.value0 != true)
return;
ProjectionBuilder builder = ProjectionBuilder.create();
if (ctx.getText().endsWith("*")) {
builder.type(ProjectionType.STAR);
} else if (ctx.table_name() != null) {
builder.table(ctx.expr().table_name().getText());
} else if (ctx.expr().column_fully_qualified_name() != null && ctx.expr().column_fully_qualified_name().column_simple_name() != null) {
if (ctx.expr().column_fully_qualified_name().table_simple_name() != null) {
builder.table(ctx.expr().column_fully_qualified_name().table_simple_name().getText());
}
String jqlColumnName = ctx.expr().column_fully_qualified_name().column_simple_name().getText();
builder.column(jqlColumnName);
builder.property(entity.findPropertyByName(jqlColumnName));
builder.type(ProjectionType.COLUMN);
} else {
builder.type(ProjectionType.COMPLEX);
builder.expression(ctx.expr().getText());
}
if (ctx.column_alias() != null) {
builder.alias(ctx.column_alias().getText());
}
result.add(builder.build());
}
@Override
public void exitResult_column(Result_columnContext ctx) {
}
});
if (result.size() == 1 && result.toArray(new JQLProjection[1])[0].type == ProjectionType.STAR) {
// the projected columns are full
result.clear();
if (entity != null) {
for (SQLProperty item : entity.getCollection()) {
JQLProjection col = new JQLProjection(ProjectionType.COLUMN, entity.getSimpleName(), item.getName(), null, null, item);
result.add(col);
}
}
}
return result;
}
Aggregations