Author: brj
Date: Sun Jan 15 01:34:39 2006
New Revision: 369194
URL: http://svn.apache.org/viewcvs?rev=369194&view=rev
Log:
improved OQL-support for InCriteria
Modified:
db/ojb/trunk/src/java/org/apache/ojb/broker/query/BetweenCriteria.java
db/ojb/trunk/src/java/org/apache/ojb/broker/query/BindableCriterion.java
db/ojb/trunk/src/java/org/apache/ojb/broker/query/InCriteria.java
db/ojb/trunk/src/java/org/apache/ojb/broker/query/SelectionCriteria.java
db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexer.java
db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.java
db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.txt
db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLParser.java
db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLQueryImpl.java
db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/oql-ojb.g
Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/query/BetweenCriteria.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/query/BetweenCriteria.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/query/BetweenCriteria.java
(original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/query/BetweenCriteria.java Sun
Jan 15 01:34:39 2006
@@ -80,7 +80,14 @@
return (getValue() == null && getValue2() == null);
}
- // PAW
+ /**
+ * @see org.apache.ojb.broker.query.BindableCriterion#isMultiBindable()
+ */
+ public boolean isMultiBindable()
+ {
+ return true;
+ }
+
/**
* String representation
*/
Modified:
db/ojb/trunk/src/java/org/apache/ojb/broker/query/BindableCriterion.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/query/BindableCriterion.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/query/BindableCriterion.java
(original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/query/BindableCriterion.java
Sun Jan 15 01:34:39 2006
@@ -34,6 +34,13 @@
* Used by the ODMG OQLQuery.bind() operation
*/
public void bind(Object newValue);
+
+ /**
+ * Indicates whether the Criteria can be bound more than once.
+ * (ie. BetweenCriteria with 2 Parameters)
+ * @return true if multi bindable
+ */
+ public boolean isMultiBindable();
}
Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/query/InCriteria.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/query/InCriteria.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/query/InCriteria.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/query/InCriteria.java Sun Jan
15 01:34:39 2006
@@ -65,7 +65,7 @@
}
private Object m_attribute;
- private Collection m_values;
+ private List m_values;
private boolean m_translateAttribute;
private boolean m_preprocessed = false;
@@ -73,14 +73,14 @@
* Constructor.
*
* @param anAttribute the name of the attribute
- * @param values the Collection
+ * @param values the Collection, may contain nulls
* @param negative clause-indicator : true=NOT IN, false=IN
* @param translate if false the attribute name is not translated into
column name
*/
InCriteria(Object anAttribute, Collection values, boolean negative,
boolean translate)
{
m_attribute = anAttribute;
- m_values = values;
+ setValues(values);
m_translateAttribute = translate;
setNegative(negative);
}
@@ -105,15 +105,16 @@
List result = new ArrayList();
Collection inCollection = new ArrayList();
int inLimit = aPb.getSqlInLimit();
+ List values = getValues();
- if (m_values == null || m_values.isEmpty())
+ if (values == null || values.isEmpty())
{
// OQL creates empty Criteria for late binding
- result.add(buildInCriterion(m_values));
+ result.add(buildInCriterion(values));
}
else
{
- Iterator iter = m_values.iterator();
+ Iterator iter = values.iterator();
while (iter.hasNext())
{
@@ -147,6 +148,30 @@
}
/**
+ * @return the values
+ */
+ private List getValues()
+ {
+ return m_values;
+ }
+
+ /**
+ * @param values the values to set
+ */
+ private void setValues(Collection values)
+ {
+ List newValues = null;
+
+ if (values != null)
+ {
+ newValues = new ArrayList(values.size());
+ newValues.addAll(values);
+ }
+
+ m_values = newValues;
+ }
+
+ /**
* Preprocess the Criteria using a PersistenceBroker.
* Build list of InCriterion based on SQL-IN-LIMIT.
*
@@ -168,28 +193,40 @@
{
if (newValue instanceof Collection)
{
- m_values = (Collection) newValue;
+ setValues((Collection) newValue);
}
else
{
- if (m_values != null)
- {
- m_values.add(newValue);
- }
- else
- {
- m_values = new ArrayList();
- m_values.add(newValue);
- }
- }
+ bindSingleObject(newValue);
+ }
}
/**
+ * Bind a single Object to the next null position.
+ * @param obj
+ */
+ private void bindSingleObject(Object obj)
+ {
+ int idx = getValues().indexOf(null);
+
+ getValues().set(idx, obj);
+ }
+
+ /**
* @see org.apache.ojb.broker.query.BindableCriterion#isBound()
+ * @return true if the collection does not contain nulls
*/
public boolean isBound()
{
- return (m_values != null);
+ return !getValues().contains(null);
+ }
+
+ /**
+ * @see org.apache.ojb.broker.query.BindableCriterion#isMultiBindable()
+ */
+ public boolean isMultiBindable()
+ {
+ return true;
}
/**
@@ -198,6 +235,7 @@
public String toString()
{
String clause = isNegative() ? SelectionCriteria.NOT_IN :
SelectionCriteria.IN;
- return "InCriteria:" + m_attribute + clause + super.toString();
+ return "InCriteria:" + m_attribute + clause + getValues();
}
+
}
Modified:
db/ojb/trunk/src/java/org/apache/ojb/broker/query/SelectionCriteria.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/query/SelectionCriteria.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/query/SelectionCriteria.java
(original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/query/SelectionCriteria.java
Sun Jan 15 01:34:39 2006
@@ -129,6 +129,14 @@
return m_bound;
}
+ /**
+ * @see org.apache.ojb.broker.query.BindableCriterion#isMultiBindable()
+ */
+ public boolean isMultiBindable()
+ {
+ return false;
+ }
+
/**
* Sets the bound.
* @param bound The bound to set
Modified: db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexer.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexer.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexer.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexer.java Sun Jan 15
01:34:39 2006
@@ -1,4 +1,4 @@
-// $ANTLR 2.7.3: "oql-ojb.g" -> "OQLLexer.java"$
+// $ANTLR 2.7.5 (20050128): "oql-ojb.g" -> "OQLLexer.java"$
/*
@@ -21,25 +21,35 @@
*/
package org.apache.ojb.odmg.oql;
+import org.odmg.QueryInvalidException;
+import org.apache.ojb.broker.query.*;
+import org.apache.ojb.broker.metadata.*;
+import org.apache.ojb.broker.util.ClassHelper;
+import java.util.*;
+
import java.io.InputStream;
+import antlr.TokenStreamException;
+import antlr.TokenStreamIOException;
+import antlr.TokenStreamRecognitionException;
+import antlr.CharStreamException;
+import antlr.CharStreamIOException;
+import antlr.ANTLRException;
import java.io.Reader;
import java.util.Hashtable;
-
-import antlr.ANTLRHashString;
+import antlr.CharScanner;
+import antlr.InputBuffer;
import antlr.ByteBuffer;
import antlr.CharBuffer;
-import antlr.CharStreamException;
-import antlr.CharStreamIOException;
-import antlr.InputBuffer;
-import antlr.LexerSharedInputState;
-import antlr.NoViableAltForCharException;
-import antlr.RecognitionException;
import antlr.Token;
+import antlr.CommonToken;
+import antlr.RecognitionException;
+import antlr.NoViableAltForCharException;
+import antlr.MismatchedCharException;
import antlr.TokenStream;
-import antlr.TokenStreamException;
-import antlr.TokenStreamIOException;
-import antlr.TokenStreamRecognitionException;
+import antlr.ANTLRHashString;
+import antlr.LexerSharedInputState;
import antlr.collections.impl.BitSet;
+import antlr.SemanticException;
public class OQLLexer extends antlr.CharScanner implements OQLLexerTokenTypes,
TokenStream
{
Modified: db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.java
(original)
+++ db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.java Sun
Jan 15 01:34:39 2006
@@ -1,4 +1,4 @@
-// $ANTLR 2.7.3: "oql-ojb.g" -> "OQLParser.java"$
+// $ANTLR 2.7.5 (20050128): "oql-ojb.g" -> "OQLParser.java"$
/*
@@ -21,67 +21,73 @@
*/
package org.apache.ojb.odmg.oql;
+import org.odmg.QueryInvalidException;
+import org.apache.ojb.broker.query.*;
+import org.apache.ojb.broker.metadata.*;
+import org.apache.ojb.broker.util.ClassHelper;
+import java.util.*;
+
public interface OQLLexerTokenTypes {
- int EOF = 1;
- int NULL_TREE_LOOKAHEAD = 3;
- int TOK_RPAREN = 4;
- int TOK_LPAREN = 5;
- int TOK_COMMA = 6;
- int TOK_SEMIC = 7;
- int TOK_COLON = 8;
- int TOK_DOT = 9;
- int TOK_INDIRECT = 10;
- int TOK_CONCAT = 11;
- int TOK_EQ = 12;
- int TOK_PLUS = 13;
- int TOK_MINUS = 14;
- int TOK_SLASH = 15;
- int TOK_STAR = 16;
- int TOK_LE = 17;
- int TOK_GE = 18;
- int TOK_NE = 19;
- int TOK_NE2 = 20;
- int TOK_LT = 21;
- int TOK_GT = 22;
- int TOK_LBRACK = 23;
- int TOK_RBRACK = 24;
- int TOK_DOLLAR = 25;
- int NameFirstCharacter = 26;
- int NameCharacter = 27;
- int Identifier = 28;
- int TOK_UNSIGNED_INTEGER = 29;
- int TOK_APPROXIMATE_NUMERIC_LITERAL = 30;
- int TOK_EXACT_NUMERIC_LITERAL = 31;
- int CharLiteral = 32;
- int StringLiteral = 33;
- int WhiteSpace = 34;
- int NewLine = 35;
- int CommentLine = 36;
- int MultiLineComment = 37;
- int LITERAL_select = 38;
- int LITERAL_distinct = 39;
- int LITERAL_from = 40;
- int LITERAL_where = 41;
- int LITERAL_order = 42;
- int LITERAL_by = 43;
- int LITERAL_group = 44;
- int LITERAL_prefetch = 45;
- int LITERAL_exists = 46;
- int LITERAL_in = 47;
- int LITERAL_asc = 48;
- int LITERAL_desc = 49;
- int LITERAL_or = 50;
- int LITERAL_and = 51;
- int LITERAL_nil = 52;
- int LITERAL_not = 53;
- int LITERAL_list = 54;
- int LITERAL_between = 55;
- int LITERAL_is_undefined = 56;
- int LITERAL_is_defined = 57;
- int LITERAL_like = 58;
- int LITERAL_true = 59;
- int LITERAL_false = 60;
- int LITERAL_date = 61;
- int LITERAL_time = 62;
- int LITERAL_timestamp = 63;
+ int EOF = 1;
+ int NULL_TREE_LOOKAHEAD = 3;
+ int TOK_RPAREN = 4;
+ int TOK_LPAREN = 5;
+ int TOK_COMMA = 6;
+ int TOK_SEMIC = 7;
+ int TOK_COLON = 8;
+ int TOK_DOT = 9;
+ int TOK_INDIRECT = 10;
+ int TOK_CONCAT = 11;
+ int TOK_EQ = 12;
+ int TOK_PLUS = 13;
+ int TOK_MINUS = 14;
+ int TOK_SLASH = 15;
+ int TOK_STAR = 16;
+ int TOK_LE = 17;
+ int TOK_GE = 18;
+ int TOK_NE = 19;
+ int TOK_NE2 = 20;
+ int TOK_LT = 21;
+ int TOK_GT = 22;
+ int TOK_LBRACK = 23;
+ int TOK_RBRACK = 24;
+ int TOK_DOLLAR = 25;
+ int NameFirstCharacter = 26;
+ int NameCharacter = 27;
+ int Identifier = 28;
+ int TOK_UNSIGNED_INTEGER = 29;
+ int TOK_APPROXIMATE_NUMERIC_LITERAL = 30;
+ int TOK_EXACT_NUMERIC_LITERAL = 31;
+ int CharLiteral = 32;
+ int StringLiteral = 33;
+ int WhiteSpace = 34;
+ int NewLine = 35;
+ int CommentLine = 36;
+ int MultiLineComment = 37;
+ int LITERAL_select = 38;
+ int LITERAL_distinct = 39;
+ int LITERAL_from = 40;
+ int LITERAL_where = 41;
+ int LITERAL_order = 42;
+ int LITERAL_by = 43;
+ int LITERAL_group = 44;
+ int LITERAL_prefetch = 45;
+ int LITERAL_exists = 46;
+ int LITERAL_in = 47;
+ int LITERAL_asc = 48;
+ int LITERAL_desc = 49;
+ int LITERAL_or = 50;
+ int LITERAL_and = 51;
+ int LITERAL_nil = 52;
+ int LITERAL_not = 53;
+ int LITERAL_list = 54;
+ int LITERAL_between = 55;
+ int LITERAL_is_undefined = 56;
+ int LITERAL_is_defined = 57;
+ int LITERAL_like = 58;
+ int LITERAL_true = 59;
+ int LITERAL_false = 60;
+ int LITERAL_date = 61;
+ int LITERAL_time = 62;
+ int LITERAL_timestamp = 63;
}
Modified: db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.txt
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.txt?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.txt
(original)
+++ db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLLexerTokenTypes.txt Sun
Jan 15 01:34:39 2006
@@ -1,4 +1,4 @@
-// $ANTLR 2.7.3: oql-ojb.g -> OQLLexerTokenTypes.txt$
+// $ANTLR 2.7.5 (20050128): oql-ojb.g -> OQLLexerTokenTypes.txt$
OQLLexer // output token vocab name
TOK_RPAREN("right parenthesis")=4
TOK_LPAREN("left parenthesis")=5
Modified: db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLParser.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLParser.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLParser.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLParser.java Sun Jan 15
01:34:39 2006
@@ -1,4 +1,4 @@
-// $ANTLR 2.7.3: "oql-ojb.g" -> "OQLParser.java"$
+// $ANTLR 2.7.5 (20050128): "oql-ojb.g" -> "OQLParser.java"$
/*
@@ -21,27 +21,25 @@
*/
package org.apache.ojb.odmg.oql;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Vector;
+import org.odmg.QueryInvalidException;
+import org.apache.ojb.broker.query.*;
+import org.apache.ojb.broker.metadata.*;
+import org.apache.ojb.broker.util.ClassHelper;
+import java.util.*;
-import antlr.NoViableAltException;
-import antlr.ParserSharedInputState;
-import antlr.RecognitionException;
-import antlr.Token;
import antlr.TokenBuffer;
-import antlr.TokenStream;
import antlr.TokenStreamException;
+import antlr.TokenStreamIOException;
+import antlr.ANTLRException;
+import antlr.LLkParser;
+import antlr.Token;
+import antlr.TokenStream;
+import antlr.RecognitionException;
+import antlr.NoViableAltException;
+import antlr.MismatchedTokenException;
+import antlr.SemanticException;
+import antlr.ParserSharedInputState;
import antlr.collections.impl.BitSet;
-import org.apache.ojb.broker.metadata.ClassDescriptor;
-import org.apache.ojb.broker.metadata.MetadataManager;
-import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
-import org.apache.ojb.broker.query.Criteria;
-import org.apache.ojb.broker.query.Query;
-import org.apache.ojb.broker.query.QueryByCriteria;
-import org.apache.ojb.broker.query.QueryFactory;
-import org.apache.ojb.broker.util.ClassHelper;
-import org.odmg.QueryInvalidException;
public class OQLParser extends antlr.LLkParser implements
OQLLexerTokenTypes
{
@@ -89,8 +87,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_0);
+ recover(ex,_tokenSet_0);
}
return query;
}
@@ -228,8 +225,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_4);
+ recover(ex,_tokenSet_4);
}
return query;
}
@@ -301,8 +297,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_5);
+ recover(ex,_tokenSet_5);
}
return projectionAttrs;
}
@@ -400,8 +395,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_7);
+ recover(ex,_tokenSet_7);
}
}
@@ -415,8 +409,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -443,8 +436,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_2);
+ recover(ex,_tokenSet_2);
}
}
@@ -471,8 +463,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_3);
+ recover(ex,_tokenSet_3);
}
}
@@ -499,8 +490,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_4);
+ recover(ex,_tokenSet_4);
}
}
@@ -550,8 +540,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
return query;
}
@@ -581,8 +570,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -630,8 +618,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_11);
+ recover(ex,_tokenSet_11);
}
}
@@ -650,8 +637,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_12);
+ recover(ex,_tokenSet_12);
}
}
@@ -670,8 +656,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_13);
+ recover(ex,_tokenSet_13);
}
}
@@ -700,8 +685,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -751,8 +735,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -866,8 +849,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -908,8 +890,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -949,8 +930,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -994,8 +974,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -1047,8 +1026,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -1099,8 +1077,7 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
}
@@ -1213,33 +1190,29 @@
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_18);
+ recover(ex,_tokenSet_18);
}
return value;
}
public final Collection argList() throws RecognitionException,
TokenStreamException {
- Collection coll = null;
+ Collection coll = new ArrayList();
try { // for error handling
-
- Collection temp = new Vector();
- Object val;
-
+ Object val;
match(TOK_LPAREN);
{
if ((_tokenSet_17.member(LA(1)))) {
val=literal();
- if (val != null) {temp.add(val);}
+ coll.add(val);
{
_loop129:
do {
if ((LA(1)==TOK_COMMA)) {
match(TOK_COMMA);
val=literal();
- if (val != null)
{temp.add(val);}
+ coll.add(val);
}
else {
break _loop129;
@@ -1256,14 +1229,10 @@
}
match(TOK_RPAREN);
-
- if (!temp.isEmpty()) {coll = temp;}
-
}
catch (RecognitionException ex) {
reportError(ex);
- consume();
- consumeUntil(_tokenSet_8);
+ recover(ex,_tokenSet_8);
}
return coll;
}
Modified: db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLQueryImpl.java
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLQueryImpl.java?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLQueryImpl.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/OQLQueryImpl.java Sun Jan 15
01:34:39 2006
@@ -25,7 +25,6 @@
import org.apache.ojb.broker.ManageableCollection;
import org.apache.ojb.broker.PersistenceBroker;
import org.apache.ojb.broker.accesslayer.OJBIterator;
-import org.apache.ojb.broker.query.BetweenCriteria;
import org.apache.ojb.broker.query.BindableCriterion;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
@@ -113,8 +112,8 @@
BindableCriterion crit = (BindableCriterion)
getBindIterator().next();
crit.bind(parameter);
- // BRJ: bind is called twice for between
- if (crit instanceof BetweenCriteria && !crit.isBound())
+ // BRJ: some criteria can be bound more than once, ie.
BetweenCiriteria, InCriteria
+ if (crit.isMultiBindable() && !crit.isBound())
{
getBindIterator().previous();
}
Modified: db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/oql-ojb.g
URL:
http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/oql-ojb.g?rev=369194&r1=369193&r2=369194&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/oql-ojb.g (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/odmg/oql/oql-ojb.g Sun Jan 15 01:34:39
2006
@@ -874,28 +874,21 @@
{ value = java.sql.Timestamp.valueOf(tokTs.getText()); }
;
-argList returns [Collection coll = null] :
-// return a collection of parameters or null if we only have $1,$2...
- {
- Collection temp = new Vector();
- Object val;
- }
+argList returns [Collection coll = new ArrayList()] :
+// BRJ: return a collection of parameters, or a collection of nulls if we only
have $1,$2...
+
+ { Object val; }
TOK_LPAREN
(
val = literal
- // BRJ: do not add null objects
- {if (val != null) {temp.add(val);} }
+ { coll.add(val); }
(
TOK_COMMA
val = literal
- {if (val != null) {temp.add(val);} }
+ { coll.add(val); }
)*
)?
TOK_RPAREN
-
- {
- if (!temp.isEmpty()) {coll = temp;}
- }
;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]