| 1 16 package org.outerj.daisy.query.model.functions; 17 18 import org.outerj.daisy.repository.Document; 19 import org.outerj.daisy.repository.Version; 20 import org.outerj.daisy.repository.query.QueryException; 21 import org.outerj.daisy.repository.query.EvaluationContext; 22 import org.outerj.daisy.query.QueryContext; 23 import org.outerj.daisy.query.model.*; 24 25 import java.util.Locale ; 26 import java.util.Iterator ; 27 import java.sql.PreparedStatement ; 28 import java.sql.SQLException ; 29 30 public class ConcatFunction extends AbstractFunction { 31 public static final String NAME = "Concat"; 32 33 public String getFunctionName() { 34 return NAME; 35 } 36 37 public void prepare(QueryContext context) throws QueryException { 38 super.prepare(context); 39 if (params.size() < 1) 40 throw new QueryException(NAME + " requires at least one argument."); 41 42 Iterator paramsIt = params.iterator(); 43 while (paramsIt.hasNext()) { 44 ValueExpr valueExpr = (ValueExpr)paramsIt.next(); 45 if ((valueExpr.getValueType() != QValueType.STRING && valueExpr.getValueType() != QValueType.UNDEFINED) || valueExpr.isSymbolicIdentifier() || valueExpr.isMultiValue()) 46 throw new QueryException(NAME + " has invalid arguments (only strings allowed)."); 47 } 48 } 49 50 public void generateSqlValueExpr(StringBuffer sql, SqlGenerationContext context) throws QueryException { 51 String [] sqlFunction = context.getJdbcHelper().getStringConcatFunction(); 52 sql.append(' ').append(sqlFunction[0]).append(' '); 53 super.generateSqlValueExpr(sql, context); 54 sql.append(sqlFunction[1]).append(' '); 55 } 56 57 public int bindValueExpr(PreparedStatement stmt, int bindPos, QValueType valueType, EvaluationContext evaluationContext) throws SQLException , QueryException { 58 return super.bindValueExpr(stmt, bindPos, QValueType.STRING, evaluationContext); 59 } 60 61 public Object evaluate(QValueType valueType, EvaluationContext evaluationContext) throws QueryException { 62 StringBuffer result = new StringBuffer (); 63 Iterator paramsIt = params.iterator(); 64 while (paramsIt.hasNext()) { 65 ValueExpr valueExpr = (ValueExpr)paramsIt.next(); 66 result.append(valueExpr.evaluate(QValueType.STRING, evaluationContext)); 67 } 68 return result.toString(); 69 } 70 71 public Object evaluate(QValueType valueType, Document document, Version version, EvaluationContext evaluationContext) throws QueryException { 72 StringBuffer result = new StringBuffer (); 73 Iterator paramsIt = params.iterator(); 74 while (paramsIt.hasNext()) { 75 ValueExpr valueExpr = (ValueExpr)paramsIt.next(); 76 result.append(valueExpr.evaluate(QValueType.STRING, document, version, evaluationContext)); 77 } 78 return result.toString(); 79 } 80 81 public QValueType getValueType() { 82 return QValueType.STRING; 83 } 84 85 public String getTitle(Locale locale) { 86 return getExpression(); 87 } 88 89 public QValueType getOutputValueType() { 90 return QValueType.STRING; 91 } 92 93 public Object getOutputValue(Document document, Version version, EvaluationContext evaluationContext) throws QueryException { 94 return evaluate(null, document, version, evaluationContext); 95 } 96 } 97 | Popular Tags |