private Term evalIsLiteral(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return TERM_FACTORY.getBooleanConstant(function.isDataTypeFunction()); } else { return term; } }
private Term evalIsLiteral(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return termFactory.getBooleanConstant(function.isDataTypeFunction()); } else { return term; } }
/*** * Returns a string with boolean conditions formed with the boolean atoms * found in the atoms list. */ private Set<String> getBooleanConditionsString( List<Function> atoms, QueryAliasIndex index) { Set<String> conditions = new LinkedHashSet<String>(); for (int atomidx = 0; atomidx < atoms.size(); atomidx++) { Term innerAtom = atoms.get(atomidx); Function innerAtomAsFunction = (Function) innerAtom; // Boolean expression if (innerAtomAsFunction.isOperation()) { String condition = getSQLCondition(innerAtomAsFunction, index); conditions.add(condition); } else if (innerAtomAsFunction.isDataTypeFunction()) { String condition = getSQLString(innerAtom, index, false); conditions.add(condition); } } return conditions; }
private int getVariableDataType(Term term, QueryAliasIndex idx) { if (term instanceof Function){ Function f = (Function) term; if (f.isDataTypeFunction()) { Predicate p = f.getFunctionSymbol(); COL_TYPE type = TYPE_FACTORY.getDatatype(p.toString()); return jdbcTypeMapper.getSQLType(type); } // Return varchar for unknown return Types.VARCHAR; }else if (term instanceof Variable){ throw new RuntimeException("Cannot return the SQL type for: " + term.toString()); } /** * Boolean constant */ else if (term.equals(TermConstants.FALSE) || term.equals(TermConstants.TRUE)) { return Types.BOOLEAN; } return Types.VARCHAR; }
private int getDataType(Term term) { if (term instanceof Function) { Function f = (Function) term; if (f.isDataTypeFunction()) { Predicate p = f.getFunctionSymbol(); COL_TYPE type = TYPE_FACTORY.getDatatype(p.getName()).get(); return jdbcTypeMapper.getSQLType(type); } // return varchar for unknown return Types.VARCHAR; } else if (term instanceof Variable) { throw new RuntimeException("Cannot return the SQL type for: " + term); } else if (term.equals(TermConstants.FALSE) || term.equals(TermConstants.TRUE)) { return Types.BOOLEAN; } return Types.VARCHAR; }
private Term evalRegexSingleExpression(Term expr){ if (expr instanceof Function) { Function function1 = (Function) expr; Predicate predicate1 = function1.getFunctionSymbol(); if((predicate1 instanceof URITemplatePredicate) ||(predicate1 instanceof BNodePredicate)) { return valueFalse; } if (!function1.isDataTypeFunction()){ Term evaluatedExpression = eval(expr); return expr.equals(evaluatedExpression) ? expr : evalRegexSingleExpression(evaluatedExpression); } } return expr; }
private Term evalRegexSingleExpression(Term expr){ if (expr instanceof Function) { Function function1 = (Function) expr; Predicate predicate1 = function1.getFunctionSymbol(); if((predicate1 instanceof URITemplatePredicate) ||(predicate1 instanceof BNodePredicate)) { return TermConstants.FALSE; } if (!function1.isDataTypeFunction()){ return evalRegexSingleExpression( eval(expr)); } } return expr; }
private void deleteExplicitTypes(Term term, Function atom, int position) { if(term instanceof Function){ Function castTerm = (Function) term; IntStream.range(0, castTerm.getArity()) .forEach(i -> deleteExplicitTypes( castTerm.getTerm(i), castTerm, i )); if(castTerm.isDataTypeFunction()){ atom.setTerm(position, castTerm.getTerm(0)); } } }
private void deleteExplicitTypes(Term term, Function atom, int position) { if(term instanceof Function){ Function castTerm = (Function) term; IntStream.range(0, castTerm.getArity()) .forEach(i -> deleteExplicitTypes( castTerm.getTerm(i), castTerm, i )); if(castTerm.isDataTypeFunction()){ atom.setTerm(position, castTerm.getTerm(0)); } } }
/** * Returns a string with boolean conditions formed with the boolean atoms * found in the atoms list. */ private Set<String> getBooleanConditions(List<Function> atoms, AliasIndex index) { Set<String> conditions = new LinkedHashSet<>(); for (Function atom : atoms) { if (atom.isOperation()) { // Boolean expression if (atom.getFunctionSymbol() == ExpressionOperation.AND) { // flatten ANDs for (Term t : atom.getTerms()) { Set<String> arg = getBooleanConditions(ImmutableList.of((Function)t), index); conditions.addAll(arg); } } else { String condition = getSQLCondition(atom, index); conditions.add(condition); } } else if (atom.isDataTypeFunction()) { String condition = getSQLString(atom, index, false); conditions.add(condition); } } return conditions; }
/** * Returns a string with boolean conditions formed with the boolean atoms * found in the atoms list. */ private Set<String> getBooleanConditions(List<Function> atoms, AliasIndex index) { Set<String> conditions = new LinkedHashSet<>(); for (Function atom : atoms) { if (atom.isOperation()) { // Boolean expression if (atom.getFunctionSymbol() == ExpressionOperation.AND) { // flatten ANDs for (Term t : atom.getTerms()) { Set<String> arg = getBooleanConditions(ImmutableList.of((Function)t), index); conditions.addAll(arg); } } else { String condition = getSQLCondition(atom, index); conditions.add(condition); } } else if (atom.isDataTypeFunction()) { String condition = getSQLString(atom, index, false); conditions.add(condition); } } return conditions; }
private Term evalIsNumeric(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return TERM_FACTORY.getBooleanConstant(function.isDataTypeFunction() && isNumeric(function.getFunctionSymbol())); } else { return term; } }
private Term evalIsNumeric(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return termFactory.getBooleanConstant(function.isDataTypeFunction() && isNumeric(function.getFunctionSymbol())); } else { return term; } }
/** * updates * * @param rule */ public void updateRuleIndexByBodyPredicate(CQIE rule) { for (Function bodyAtom : rule.getBody()) { if (bodyAtom.isDataFunction()) { Predicate functionSymbol = bodyAtom.getFunctionSymbol(); if (!ruleIndexByBodyPredicate.containsEntry(functionSymbol, rule)){ ruleIndexByBodyPredicate.put(functionSymbol, rule); } } else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) { updateRuleIndexByBodyPredicate_traverseBodyAtom(rule, bodyAtom); // BC: should we reintroduce arithmetic functions? //} else if (bodyAtom.isArithmeticFunction() || bodyAtom.isDataTypeFunction()){ } else if (bodyAtom.isDataTypeFunction()){ continue; } else { throw new IllegalStateException("Unknown Function"); } } }
/** * updates * * @param rule */ public void updateRuleIndexByBodyPredicate(CQIE rule) { for (Function bodyAtom : rule.getBody()) { if (bodyAtom.isDataFunction()) { Predicate functionSymbol = bodyAtom.getFunctionSymbol(); if (!ruleIndexByBodyPredicate.containsEntry(functionSymbol, rule)){ ruleIndexByBodyPredicate.put(functionSymbol, rule); } } else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) { updateRuleIndexByBodyPredicate_traverseBodyAtom(rule, bodyAtom); // BC: should we reintroduce arithmetic functions? //} else if (bodyAtom.isArithmeticFunction() || bodyAtom.isDataTypeFunction()){ } else if (bodyAtom.isDataTypeFunction()){ continue; } else { throw new IllegalStateException("Unknown Function"); } } }
/** * Removes the old indexes given by a rule. * * @param rule */ public void removeOldRuleIndexByBodyPredicate(CQIE rule) { for (Function bodyAtom : rule.getBody()) { if (bodyAtom.isDataFunction()) { Predicate functionSymbol = bodyAtom.getFunctionSymbol(); if (ruleIndexByBodyPredicate.containsEntry(functionSymbol, rule)){ ruleIndexByBodyPredicate.remove(functionSymbol, rule); } } else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) { removeRuleIndexByBodyPredicate_traverseBodyAtom(rule, bodyAtom); // BC: should we reintroduce arithmetic functions?//} // else if (bodyAtom.isArithmeticFunction() || bodyAtom.isDataTypeFunction()){ } else if (bodyAtom.isDataTypeFunction()){ continue; } else { throw new IllegalStateException("Unknown Function"); } } }
/** * Returns the table definition for the given atom. If the atom is a simple * table or view, then it returns the value as defined by the * AliasIndex. If the atom is a Join or Left Join, it will call * getTableDefinitions on the nested term list. */ private String getTableDefinition(Function atom, AliasIndex index, String indent) { if (atom.isAlgebraFunction()) { Predicate functionSymbol = atom.getFunctionSymbol(); ImmutableList<Function> joinAtoms = convert(atom.getTerms()); if (functionSymbol.equals(datalogFactory.getSparqlJoinPredicate())) { // nested joins we need to add parenthesis later boolean parenthesis = joinAtoms.get(0).isAlgebraFunction() || joinAtoms.get(1).isAlgebraFunction(); return getTableDefinitions(joinAtoms, index, "JOIN", parenthesis, indent + INDENT); } else if (functionSymbol.equals(datalogFactory.getSparqlLeftJoinPredicate())) { // in case of left join we want to add the parenthesis only for the right tables // we ignore nested joins from the left tables boolean parenthesis = joinAtoms.get(1).isAlgebraFunction(); return getTableDefinitions(joinAtoms, index, "LEFT OUTER JOIN", parenthesis, indent + INDENT); } } else if (!atom.isOperation() && !atom.isDataTypeFunction()) { return index.getViewDefinition(atom); // a database atom } return null; }
else if (!atom.isOperation() && !atom.isDataTypeFunction()) { return index.getViewDefinition(atom); // a database atom
private Term evalStr(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; Predicate predicate = function.getFunctionSymbol(); Term parameter = function.getTerm(0); if (function.isDataTypeFunction()) { if (TYPE_FACTORY.isString(predicate) ) { // R: was datatype.equals(OBDAVocabulary.RDFS_LITERAL_URI) return TERM_FACTORY.getTypedTerm( TERM_FACTORY.getVariable(parameter.toString()), COL_TYPE.STRING); } else { return TERM_FACTORY.getTypedTerm( TERM_FACTORY.getFunctionCast(TERM_FACTORY.getVariable(parameter.toString()), TERM_FACTORY.getConstantLiteral(TYPE_FACTORY.getDatatypeURI(COL_TYPE.STRING).stringValue())), COL_TYPE.STRING); } } else if (predicate instanceof URITemplatePredicate) { return TERM_FACTORY.getTypedTerm(function.clone(), COL_TYPE.STRING); } else if (predicate instanceof BNodePredicate) { return TermConstants.NULL; } } return term; }
private Term evalStr(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; Predicate predicate = function.getFunctionSymbol(); Term parameter = function.getTerm(0); if (function.isDataTypeFunction()) { if (isXsdString(predicate) ) { // R: was datatype.equals(OBDAVocabulary.RDFS_LITERAL_URI) return termFactory.getTypedTerm( termFactory.getVariable(parameter.toString()), typeFactory.getXsdStringDatatype()); } else { return termFactory.getTypedTerm( termFactory.getFunctionCast(termFactory.getVariable(parameter.toString()), termFactory.getConstantLiteral(typeFactory.getXsdStringDatatype().getIRI().getIRIString())), typeFactory.getXsdStringDatatype()); } } else if (predicate instanceof URITemplatePredicate) { return termFactory.getTypedTerm(function.clone(), typeFactory.getXsdStringDatatype()); } else if (predicate instanceof BNodePredicate) { return valueNull; } } return term; }