use of com.abubusoft.kripton.processor.sqlite.grammars.jql.JQLProjection.ProjectionBuilder 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