public String convertToPostgres(Expression transformationFunctionExpression, boolean withRel) { String functionExpression = transformationFunctionExpression.getJepExpression().toStringForSql(); // first fix attribute names for (VariablePathExpression vpe : transformationFunctionExpression.getAttributePaths()) { if (functionExpression.contains(vpe.toString())) { String expressionToCheckForSigns = transformationFunctionExpression.getJepExpression().toString(); int startIndex = expressionToCheckForSigns.indexOf(vpe.toString()); int endIndex = startIndex + vpe.toString().length(); boolean castToFloat = false; // check so that the String index will not get out of bounds if (startIndex - 2 >= 0) { if (math_sign.contains(expressionToCheckForSigns.charAt(startIndex - 2))) { castToFloat = true; } // to catch the '>=' or '<=' case else if (expressionToCheckForSigns.charAt(startIndex - 2) == '=' && startIndex - 3 >= 0) { if (expressionToCheckForSigns.charAt(startIndex - 3) == '<' || expressionToCheckForSigns.charAt(startIndex - 3) == '>') { castToFloat = true; } } } if (endIndex + 2 <= expressionToCheckForSigns.length()) { if (math_sign.contains(expressionToCheckForSigns.charAt(endIndex + 1))) { castToFloat = true; } } String newAttrName; // replace them with the corresponding attribute name if (withRel) { newAttrName = GenerateSQL.attributeNameWithVariable(vpe); } else { newAttrName = GenerateSQL.attributeNameInVariable(vpe); } // if previous or next character is one of {+,-,*,/,<,>} cast it to float if (castToFloat) { functionExpression = functionExpression.replaceAll(vpe.toString(), "cast(" + newAttrName + " as float)"); } else { functionExpression = functionExpression.replaceAll(vpe.toString(), newAttrName); } } } return replaceExpression(functionExpression); }
private String findGeneratorForPath( VariablePathExpression setPath, FORule rule, MappingTask mappingTask) { List<FormulaVariable> universalVariables = rule.getUniversalFormulaVariables(mappingTask); TGDGeneratorsMap generatorsMap = rule.getGenerators(mappingTask); IValueGenerator generator = generatorsMap.getGeneratorForSetPath(setPath); if (generator == null) { return "SK_" + setPath.toString() + "()"; } if (generator instanceof NullValueGenerator) { return NullValueGenerator.getInstance().toString(); } SkolemFunctionGenerator skolemGenerator = (SkolemFunctionGenerator) generator; return skolemGenerator.toStringWithVariableArguments(universalVariables); }
private static String sqlString(Expression expression) { String result = ""; List<VariablePathExpression> attributePaths = expression.getAttributePaths(); if (expression.toString().startsWith("isNull(")) { String attributeName = extractAttributeNameFromExpression(attributePaths.get(0)); return attributeName + " IS NULL"; } if (expression.toString().startsWith("isNotNull(")) { String attributeName = extractAttributeNameFromExpression(attributePaths.get(0)); return attributeName + " IS NOT NULL"; } for (VariablePathExpression attributePath : attributePaths) { String attributeName = extractAttributeNameFromExpression(attributePaths.get(0)); result = expression.toString().replaceAll(attributePath.toString(), attributeName); } result = result.replaceAll("==", "="); result = result.replaceAll("\"", "\'"); return result.replaceAll("&&", "AND"); }