You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/06/27 21:30:50 UTC
svn commit: r551286 - in
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/
test/java/org/apache/cayenne/access/jdbc/
Author: aadamchik
Date: Wed Jun 27 12:30:49 2007
New Revision: 551286
URL: http://svn.apache.org/viewvc?view=rev&rev=551286
Log:
CAY-813 SQLTemplate improvement: #column directive
(a temporary fix for EJBQL that involves an unofficial 5th parameter to #result direcive; will switch to #column directive once that becomes available)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLIdentifierColumnsTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ResultDirective.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLIdentifierColumnsTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLIdentifierColumnsTranslator.java?view=diff&rev=551286&r1=551285&r2=551286
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLIdentifierColumnsTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLIdentifierColumnsTranslator.java Wed Jun 27 12:30:49 2007
@@ -155,8 +155,11 @@
javaType = TypesMapping.getJavaBySqlType(column.getType());
}
+ // TODO: andrus 6/27/2007 - the last parameter is an unofficial "jdbcType"
+ // pending CAY-813 implementation, switch to #column directive
context.append("' '").append(javaType).append("' '").append(
- column.getName()).append("')");
+ column.getName()).append("' '").append(column.getName()).append(
+ "' " + column.getType()).append(")");
}
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java?view=diff&rev=551286&r1=551285&r2=551286
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java Wed Jun 27 12:30:49 2007
@@ -22,6 +22,7 @@
import org.apache.cayenne.ejbql.EJBQLException;
import org.apache.cayenne.ejbql.EJBQLExpression;
import org.apache.cayenne.ejbql.parser.EJBQLPath;
+import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjAttribute;
@@ -55,8 +56,7 @@
public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
- EJBQLPathTranslator pathTranslator = new EJBQLPathTranslator(
- context) {
+ EJBQLPathTranslator pathTranslator = new EJBQLPathTranslator(context) {
protected void appendMultiColumnPath(EJBQLMultiColumnOperand operand) {
throw new EJBQLException("Can't use multi-column paths in column clause");
@@ -67,10 +67,24 @@
String alias = this.lastAlias != null ? lastAlias : context
.getTableAlias(idPath, table.getFullyQualifiedName());
- context.append(" #result('").append(alias).append('.').append(
- attribute.getDbAttributeName()).append("' '").append(
- attribute.getType()).append("' '").append(
- context.nextColumnAlias()).append("')");
+ DbAttribute dbAttribute = (DbAttribute) attribute.getDbAttribute();
+
+ // TODO: andrus 6/27/2007 - the last parameter is an unofficial "jdbcType"
+ // pending CAY-813 implementation, switch to #column directive
+ String columnAlias = context.nextColumnAlias();
+ context
+ .append(" #result('")
+ .append(alias)
+ .append('.')
+ .append(dbAttribute.getName())
+ .append("' '")
+ .append(attribute.getType())
+ .append("' '")
+ .append(columnAlias)
+ .append("' '")
+ .append(columnAlias)
+ .append("' " + dbAttribute.getType())
+ .append(")");
}
};
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ResultDirective.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ResultDirective.java?view=diff&rev=551286&r1=551285&r2=551286
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ResultDirective.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ResultDirective.java Wed Jun 27 12:30:49 2007
@@ -43,10 +43,10 @@
* possible invocation formats inside the template:
*
* <pre>
- * #result(column_name) - e.g. #result('ARTIST_ID')
- * #result(column_name java_type) - e.g. #result('ARTIST_ID' 'String')
- * #result(column_name java_type column_alias) - e.g. #result('ARTIST_ID' 'String' 'ID')
- * #result(column_name java_type column_alias data_row_key) - e.g. #result('ARTIST_ID' 'String' 'ID' 'toArtist.ID')
+ * #result(column_name) - e.g. #result('ARTIST_ID')
+ * #result(column_name java_type) - e.g. #result('ARTIST_ID' 'String')
+ * #result(column_name java_type column_alias) - e.g. #result('ARTIST_ID' 'String' 'ID')
+ * #result(column_name java_type column_alias data_row_key) - e.g. #result('ARTIST_ID' 'String' 'ID' 'toArtist.ID')
* </pre>
*
* <p>
@@ -132,6 +132,13 @@
String type = getChildAsString(context, node, 1);
if (type != null) {
columnDescriptor.setJavaClass(guessType(type.toString()));
+ }
+
+ // TODO: andrus 6/27/2007 - this is an unofficial jdbcType parameter that is added
+ // temporarily pending CAY-813 implementation for the sake of EJBQL query...
+ Object jdbcType = getChild(context, node, 4);
+ if(jdbcType instanceof Number) {
+ columnDescriptor.setJdbcType(((Number) jdbcType).intValue());
}
writer.write(column);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java?view=diff&rev=551286&r1=551285&r2=551286
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java Wed Jun 27 12:30:49 2007
@@ -288,8 +288,8 @@
String sql = query.getDefaultTemplate();
assertTrue(sql, sql.startsWith("SELECT "
- + "#result('t0.ESTIMATED_PRICE' 'java.math.BigDecimal' 'sc0'), "
- + "#result('t1.ARTIST_NAME' 'java.lang.String' 'sc1') FROM"));
+ + "#result('t0.ESTIMATED_PRICE' 'java.math.BigDecimal' 'sc0' 'sc0' 3), "
+ + "#result('t1.ARTIST_NAME' 'java.lang.String' 'sc1' 'sc1' 1) FROM"));
}
private int countDelimiters(String string, String delim, int fromIndex) {