use of org.folio.dbschema.Index in project raml-module-builder by folio-org.
the class CQL2PgJSON method queryByFt.
/**
* Create an SQL expression using Full Text query syntax.
*
* @param hasIndex
* @param vals
* @param node
* @param comparator
* @param modifiers
* @return
* @throws QueryValidationException
*/
private String queryByFt(String index, DbIndex dbIndex, IndexTextAndJsonValues vals, CQLTermNode node, String comparator, CqlModifiers modifiers, Table targetTable) throws QueryValidationException {
final String indexText = vals.getIndexText();
if (CqlAccents.RESPECT_ACCENTS == modifiers.getCqlAccents()) {
logger.log(Level.WARNING, "Ignoring /respectAccents modifier for FT search {0}", indexText);
}
if (CqlCase.RESPECT_CASE == modifiers.getCqlCase()) {
logger.log(Level.WARNING, "Ignoring /respectCase modifier for FT search {0}", indexText);
}
// Clean the term. Remove stand-alone ' *', not valid word.
String term = node.getTerm().replaceAll(" +\\*", "").trim();
Index schemaIndex = null;
if (targetTable != null) {
schemaIndex = DbSchemaUtils.getIndex(index, targetTable.getFullTextIndex());
}
String sql = queryByFt(indexText, term, comparator, schemaIndex, targetTable);
// array modifier
List<Modifier> relationModifiers = modifiers.getRelationModifiers();
if (!relationModifiers.isEmpty()) {
sql += " AND " + arrayNode(index, node, modifiers, relationModifiers, schemaIndex, vals, targetTable);
}
if (schemaIndex != null && schemaIndex.isCaseSensitive()) {
throw new CQLFeatureUnsupportedException("full text index does not support case sensitive: " + index);
}
if (!dbIndex.hasFullTextIndex() && !"true".equals(sql)) {
String s = String.format("%s, CQL >>> SQL: %s >>> %s", indexText, node.toCQL(), sql);
logger.log(Level.WARNING, "Doing FT search without index for {0}", s);
}
return sql;
}
use of org.folio.dbschema.Index in project raml-module-builder by folio-org.
the class DbSchemaUtilsTest method newIndex.
private static Index newIndex(String name) {
Index index = new Index();
index.setFieldName(name);
return index;
}
Aggregations