Changeset: 238d6a3a6469 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/238d6a3a6469
Modified Files:
        src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
        tests/JDBC_API_Tester.java
Branch: default
Log Message:

Improve composeMatchPart(final String in). Prevent parsing pattern when length 
is 0. Optimise patterns: % or %%.


diffs (51 lines):

diff --git a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java 
b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
--- a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -4240,11 +4240,17 @@ public final class MonetDatabaseMetaData
                if (in == null)
                        return "IS NULL";
 
+               final int len = in.length();
+               if (len == 0)
+                       return "= ''";
+
+               if (in.equals("%") || in.equals("%%"))
+                       return "LIKE '%'";
+
                // Scan input string for SQL wildcard characters: % and _
                // When they are all prefixed by a backslash then the backslash 
is removed (to allow usage of = comparator)
                // else it needs to be interpreted as a wildcard and we need to 
use LIKE instead of = comparator.
                // A backslash can be escaped by using two backslashes.
-               final int len = in.length();
                final StringBuilder sb = new StringBuilder(len);
                boolean removed_bs = false;
                boolean use_like = false;
@@ -4296,7 +4302,7 @@ public final class MonetDatabaseMetaData
                if (removed_bs) {
                // for debug: System.out.println("input: " + in + " changed 
into: " + "= " + MonetWrapper.sq(sb.toString()));
                        // we found only escaped wildcard character(s),
-                       // use the edited string without the ecapes before the 
wildcard character(s) so an equals match can be done (its is faster than LIKE)
+                       // use the edited string without the ecapes before the 
wildcard character(s) so an equals match can be done (which is faster than LIKE)
                        return "= " + MonetWrapper.sq(sb.toString());
                }
                // for debug: System.out.println("input: " + in + " changed 
into: " + "= " + MonetWrapper.sq(in));
diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -1115,6 +1115,16 @@ final public class JDBC_API_Tester {
                        "varchar(1024)  char(1)\n" +
                        "jdbctst        null\n");
 
+                       compareResultSet(dbmd.getSchemas(null, ""), 
"getSchemas(null, emptystring)",
+                       "Resultset with 2 columns\n" +
+                       "TABLE_SCHEM    TABLE_CATALOG\n" +
+                       "varchar(1024)  char(1)\n");
+
+                       compareResultSet(dbmd.getSchemas("%", "%%"), 
"getSchemas(%, %%)",
+                       "Resultset with 2 columns\n" +
+                       "TABLE_SCHEM    TABLE_CATALOG\n" +
+                       "varchar(1024)  char(1)\n");
+
                        compareResultSet(dbmd.getTables(null, "jdbctst", null, 
null), "getTables(null, jdbctst, null, null)",
                        "Resultset with 10 columns\n" +
                        "TABLE_CAT      TABLE_SCHEM     TABLE_NAME      
TABLE_TYPE      REMARKS TYPE_CAT        TYPE_SCHEM      TYPE_NAME       
SELF_REFERENCING_COL_NAME       REF_GENERATION\n" +
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to