Implementation of DDLUTILS-198: Replace Jakarta ORO regular expressions with Java 1.4 regular expressions

git-svn-id: https://svn.apache.org/repos/asf/db/ddlutils/trunk@635262 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/.classpath b/.classpath
index 3756f86..f5f1917 100644
--- a/.classpath
+++ b/.classpath
@@ -10,7 +10,6 @@
 	<classpathentry exported="true" kind="lib" path="lib/commons-beanutils-1.7.0.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/commons-lang-2.1.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/commons-codec-1.3.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/jakarta-oro-2.0.8.jar"/>
 	<classpathentry kind="lib" path="lib/build-only/ant-1.6.5.jar"/>
 	<classpathentry kind="lib" path="lib/build-only/junit-3.8.2.jar"/>
 	<classpathentry kind="lib" path="lib/stax-api-1.0.1.jar"/>
diff --git a/lib/jakarta-oro-2.0.8.jar b/lib/jakarta-oro-2.0.8.jar
deleted file mode 100644
index 23488d2..0000000
--- a/lib/jakarta-oro-2.0.8.jar
+++ /dev/null
Binary files differ
diff --git a/src/java/org/apache/ddlutils/io/converters/DateConverter.java b/src/java/org/apache/ddlutils/io/converters/DateConverter.java
index 939aadc..0b7f7a4 100644
--- a/src/java/org/apache/ddlutils/io/converters/DateConverter.java
+++ b/src/java/org/apache/ddlutils/io/converters/DateConverter.java
@@ -22,14 +22,11 @@
 import java.sql.Date;

 import java.sql.Types;

 import java.util.Calendar;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+import java.util.regex.PatternSyntaxException;

 

 import org.apache.ddlutils.DdlUtilsException;

-import org.apache.oro.text.regex.MalformedPatternException;

-import org.apache.oro.text.regex.MatchResult;

-import org.apache.oro.text.regex.Pattern;

-import org.apache.oro.text.regex.PatternCompiler;

-import org.apache.oro.text.regex.Perl5Compiler;

-import org.apache.oro.text.regex.Perl5Matcher;

 

 /**

  * Converts between {@link java.sql.Date} and {@link java.lang.String} using the standard

@@ -49,13 +46,11 @@
 	 */

 	public DateConverter()

 	{

-        PatternCompiler compiler = new Perl5Compiler();

-

         try

         {

-            _datePattern = compiler.compile("(\\d{2,4})(?:\\-(\\d{2}))?(?:\\-(\\d{2}))?.*");

+            _datePattern = Pattern.compile("(\\d{2,4})(?:\\-(\\d{2}))?(?:\\-(\\d{2}))?.*");

         }

-        catch (MalformedPatternException ex)

+        catch (PatternSyntaxException ex)

         {

             throw new DdlUtilsException(ex);

         }

@@ -77,26 +72,25 @@
         {

             // we're not using {@link java.sql.Date#valueOf(String)} as this method is too strict

             // it only parses the full spec "yyyy-mm-dd"

-            Perl5Matcher matcher = new Perl5Matcher();

-            int          year    = 1970;

-            int          month   = 1;

-            int          day     = 1;

+            Matcher matcher = _datePattern.matcher(textRep);

+            int     year    = 1970;

+            int     month   = 1;

+            int     day     = 1;

 

-            if (matcher.matches(textRep, _datePattern))

+            if (matcher.matches())

             {

-                MatchResult match     = matcher.getMatch();

-                int         numGroups = match.groups();

+                int numGroups = matcher.groupCount();

 

                 try

                 {

-                    year = Integer.parseInt(match.group(1));

-                    if ((numGroups > 2) && (match.group(2) != null))

+                    year = Integer.parseInt(matcher.group(1));

+                    if ((numGroups >= 2) && (matcher.group(2) != null))

                     {

-                        month = Integer.parseInt(match.group(2));

+                        month = Integer.parseInt(matcher.group(2));

                     }

-                    if ((numGroups > 3) && (match.group(3) != null))

+                    if ((numGroups >= 3) && (matcher.group(3) != null))

                     {

-                        day = Integer.parseInt(match.group(3));

+                        day = Integer.parseInt(matcher.group(3));

                     }

                 }

                 catch (NumberFormatException ex)

diff --git a/src/java/org/apache/ddlutils/io/converters/TimeConverter.java b/src/java/org/apache/ddlutils/io/converters/TimeConverter.java
index c24f4c0..02bd430 100644
--- a/src/java/org/apache/ddlutils/io/converters/TimeConverter.java
+++ b/src/java/org/apache/ddlutils/io/converters/TimeConverter.java
@@ -22,14 +22,11 @@
 import java.sql.Time;

 import java.sql.Types;

 import java.util.Calendar;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+import java.util.regex.PatternSyntaxException;

 

 import org.apache.ddlutils.DdlUtilsException;

-import org.apache.oro.text.regex.MalformedPatternException;

-import org.apache.oro.text.regex.MatchResult;

-import org.apache.oro.text.regex.Pattern;

-import org.apache.oro.text.regex.PatternCompiler;

-import org.apache.oro.text.regex.Perl5Compiler;

-import org.apache.oro.text.regex.Perl5Matcher;

 

 /**

  * Converts between {@link java.sql.Time} and {@link java.lang.String} using the standard

@@ -49,13 +46,11 @@
 	 */

 	public TimeConverter()

 	{

-        PatternCompiler compiler = new Perl5Compiler();

-

         try

         {

-            _timePattern = compiler.compile("(?:\\d{4}\\-\\d{2}\\-\\d{2}\\s)?(\\d{2})(?::(\\d{2}))?(?::(\\d{2}))?(?:\\..*)?");

+            _timePattern = Pattern.compile("(?:\\d{4}\\-\\d{2}\\-\\d{2}\\s)?(\\d{2})(?::(\\d{2}))?(?::(\\d{2}))?(?:\\..*)?");

         }

-        catch (MalformedPatternException ex)

+        catch (PatternSyntaxException ex)

         {

             throw new DdlUtilsException(ex);

         }

@@ -77,26 +72,25 @@
         {

             // we're not using {@link java.sql.Time#valueOf(String)} as this method is too strict

             // it only parses the full spec "hh:mm:ss"

-            Perl5Matcher matcher = new Perl5Matcher();

-            int          hours   = 0;

-            int          minutes = 0;

-            int          seconds = 0;

+            Matcher matcher = _timePattern.matcher(textRep);

+            int     hours   = 0;

+            int     minutes = 0;

+            int     seconds = 0;

 

-            if (matcher.matches(textRep, _timePattern))

+            if (matcher.matches())

             {

-                MatchResult match     = matcher.getMatch();

-                int         numGroups = match.groups();

+                int numGroups = matcher.groupCount();

 

                 try

                 {

-                    hours = Integer.parseInt(match.group(1));

-                    if ((numGroups > 2) && (match.group(2) != null))

+                    hours = Integer.parseInt(matcher.group(1));

+                    if ((numGroups >= 2) && (matcher.group(2) != null))

                     {

-                        minutes = Integer.parseInt(match.group(2));

+                        minutes = Integer.parseInt(matcher.group(2));

                     }

-                    if ((numGroups > 3) && (match.group(3) != null))

+                    if ((numGroups >= 3) && (matcher.group(3) != null))

                     {

-                        seconds = Integer.parseInt(match.group(3));

+                        seconds = Integer.parseInt(matcher.group(3));

                     }

                 }

                 catch (NumberFormatException ex)

diff --git a/src/java/org/apache/ddlutils/platform/db2/Db2ModelReader.java b/src/java/org/apache/ddlutils/platform/db2/Db2ModelReader.java
index 499d162..00c50b5 100644
--- a/src/java/org/apache/ddlutils/platform/db2/Db2ModelReader.java
+++ b/src/java/org/apache/ddlutils/platform/db2/Db2ModelReader.java
@@ -25,6 +25,9 @@
 import java.sql.Types;

 import java.util.HashSet;

 import java.util.Map;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+import java.util.regex.PatternSyntaxException;

 

 import org.apache.ddlutils.DdlUtilsException;

 import org.apache.ddlutils.Platform;

@@ -34,12 +37,6 @@
 import org.apache.ddlutils.model.TypeMap;

 import org.apache.ddlutils.platform.DatabaseMetaDataWrapper;

 import org.apache.ddlutils.platform.JdbcModelReader;

-import org.apache.oro.text.regex.MalformedPatternException;

-import org.apache.oro.text.regex.Pattern;

-import org.apache.oro.text.regex.PatternCompiler;

-import org.apache.oro.text.regex.PatternMatcher;

-import org.apache.oro.text.regex.Perl5Compiler;

-import org.apache.oro.text.regex.Perl5Matcher;

 

 /**

  * Reads a database model from a Db2 UDB database.

@@ -66,14 +63,12 @@
         setDefaultCatalogPattern(null);

         setDefaultSchemaPattern(null);

 

-        PatternCompiler compiler = new Perl5Compiler();

-

     	try

     	{

-    		_db2TimePattern      = compiler.compile("'(\\d{2}).(\\d{2}).(\\d{2})'");

-    		_db2TimestampPattern = compiler.compile("'(\\d{4}\\-\\d{2}\\-\\d{2})\\-(\\d{2}).(\\d{2}).(\\d{2})(\\.\\d{1,8})?'");

+    		_db2TimePattern      = Pattern.compile("'(\\d{2}).(\\d{2}).(\\d{2})'");

+    		_db2TimestampPattern = Pattern.compile("'(\\d{4}\\-\\d{2}\\-\\d{2})\\-(\\d{2}).(\\d{2}).(\\d{2})(\\.\\d{1,8})?'");

         }

-    	catch (MalformedPatternException ex)

+    	catch (PatternSyntaxException ex)

         {

         	throw new DdlUtilsException(ex);

         }

@@ -115,22 +110,22 @@
 		{

 			if (column.getTypeCode() == Types.TIME)

 			{

-				PatternMatcher matcher = new Perl5Matcher();

+				Matcher matcher = _db2TimePattern.matcher(column.getDefaultValue());

 

 				// Db2 returns "HH24.MI.SS"

-				if (matcher.matches(column.getDefaultValue(), _db2TimePattern))

+				if (matcher.matches())

 				{

 					StringBuffer newDefault = new StringBuffer();

 

 					newDefault.append("'");

 					// the hour

-					newDefault.append(matcher.getMatch().group(1));

+					newDefault.append(matcher.group(1));

 					newDefault.append(":");

 					// the minute

-					newDefault.append(matcher.getMatch().group(2));

+					newDefault.append(matcher.group(2));

 					newDefault.append(":");

 					// the second

-					newDefault.append(matcher.getMatch().group(3));

+					newDefault.append(matcher.group(3));

 					newDefault.append("'");

 

 					column.setDefaultValue(newDefault.toString());

@@ -138,29 +133,29 @@
 			}

 			else if (column.getTypeCode() == Types.TIMESTAMP)

 			{

-				PatternMatcher matcher = new Perl5Matcher();

+                Matcher matcher = _db2TimestampPattern.matcher(column.getDefaultValue());

 

 				// Db2 returns "YYYY-MM-DD-HH24.MI.SS.FF"

-				if (matcher.matches(column.getDefaultValue(), _db2TimestampPattern))

+				if (matcher.matches())

 				{

 					StringBuffer newDefault = new StringBuffer();

 

 					newDefault.append("'");

 					// group 1 is the date which has the correct format

-					newDefault.append(matcher.getMatch().group(1));

+					newDefault.append(matcher.group(1));

 					newDefault.append(" ");

 					// the hour

-					newDefault.append(matcher.getMatch().group(2));

+					newDefault.append(matcher.group(2));

 					newDefault.append(":");

 					// the minute

-					newDefault.append(matcher.getMatch().group(3));

+					newDefault.append(matcher.group(3));

 					newDefault.append(":");

 					// the second

-					newDefault.append(matcher.getMatch().group(4));

+					newDefault.append(matcher.group(4));

 					// optionally, the fraction

-					if ((matcher.getMatch().groups() > 4) && (matcher.getMatch().group(4) != null))

+					if ((matcher.groupCount() >= 5) && (matcher.group(5) != null))

 					{

-						newDefault.append(matcher.getMatch().group(5));

+						newDefault.append(matcher.group(5));

 					}

 					newDefault.append("'");

 

diff --git a/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java b/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java
index b7986f7..c4aa27b 100644
--- a/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java
+++ b/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java
@@ -26,6 +26,9 @@
 import java.sql.Timestamp;

 import java.sql.Types;

 import java.util.Map;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+import java.util.regex.PatternSyntaxException;

 

 import org.apache.ddlutils.DdlUtilsException;

 import org.apache.ddlutils.Platform;

@@ -35,12 +38,6 @@
 import org.apache.ddlutils.model.TypeMap;

 import org.apache.ddlutils.platform.DatabaseMetaDataWrapper;

 import org.apache.ddlutils.platform.JdbcModelReader;

-import org.apache.oro.text.regex.MalformedPatternException;

-import org.apache.oro.text.regex.Pattern;

-import org.apache.oro.text.regex.PatternCompiler;

-import org.apache.oro.text.regex.PatternMatcher;

-import org.apache.oro.text.regex.Perl5Compiler;

-import org.apache.oro.text.regex.Perl5Matcher;

 

 /**

  * Reads a database model from a Microsoft Sql Server database.

@@ -68,14 +65,12 @@
         setDefaultSchemaPattern(null);

         setDefaultTablePattern("%");

 

-        PatternCompiler compiler = new Perl5Compiler();

-

     	try

     	{

-            _isoDatePattern = compiler.compile("'(\\d{4}\\-\\d{2}\\-\\d{2})'");

-            _isoTimePattern = compiler.compile("'(\\d{2}:\\d{2}:\\d{2})'");

+            _isoDatePattern = Pattern.compile("'(\\d{4}\\-\\d{2}\\-\\d{2})'");

+            _isoTimePattern = Pattern.compile("'(\\d{2}:\\d{2}:\\d{2})'");

         }

-    	catch (MalformedPatternException ex)

+    	catch (PatternSyntaxException ex)

         {

         	throw new DdlUtilsException(ex);

         }

@@ -189,16 +184,21 @@
 			{

 				// Sql Server maintains the default values for DATE/TIME jdbc types, so we have to

 				// migrate the default value to TIMESTAMP

-				PatternMatcher matcher   = new Perl5Matcher();

-				Timestamp      timestamp = null;

+				Matcher   matcher   = _isoDatePattern.matcher(defaultValue);

+				Timestamp timestamp = null;

 	

-				if (matcher.matches(defaultValue, _isoDatePattern))

+				if (matcher.matches())

 				{

-					timestamp = new Timestamp(Date.valueOf(matcher.getMatch().group(1)).getTime());

+					timestamp = new Timestamp(Date.valueOf(matcher.group(1)).getTime());

 				}

-				else if (matcher.matches(defaultValue, _isoTimePattern))

+				else

 				{

-					timestamp = new Timestamp(Time.valueOf(matcher.getMatch().group(1)).getTime());

+	                matcher = _isoTimePattern.matcher(defaultValue);

+

+	                if (matcher.matches())

+	                {

+	                    timestamp = new Timestamp(Time.valueOf(matcher.group(1)).getTime());

+	                }

 				}

 				if (timestamp != null)

 				{

diff --git a/src/java/org/apache/ddlutils/platform/oracle/Oracle8Builder.java b/src/java/org/apache/ddlutils/platform/oracle/Oracle8Builder.java
index 0a8ce44..428f93e 100644
--- a/src/java/org/apache/ddlutils/platform/oracle/Oracle8Builder.java
+++ b/src/java/org/apache/ddlutils/platform/oracle/Oracle8Builder.java
@@ -22,6 +22,8 @@
 import java.io.IOException;
 import java.sql.Types;
 import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
 import org.apache.ddlutils.DdlUtilsException;
 import org.apache.ddlutils.Platform;
@@ -33,11 +35,6 @@
 import org.apache.ddlutils.model.TypeMap;
 import org.apache.ddlutils.platform.SqlBuilder;
 import org.apache.ddlutils.util.StringUtilsExt;
-import org.apache.oro.text.regex.MalformedPatternException;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.PatternCompiler;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
 
 /**
  * The SQL Builder for Oracle.
@@ -63,15 +60,13 @@
         super(platform);
         addEscapedCharSequence("'", "''");
 
-        PatternCompiler compiler = new Perl5Compiler();
-
     	try
     	{
-            _isoDatePattern      = compiler.compile("\\d{4}\\-\\d{2}\\-\\d{2}");
-            _isoTimePattern      = compiler.compile("\\d{2}:\\d{2}:\\d{2}");
-            _isoTimestampPattern = compiler.compile("\\d{4}\\-\\d{2}\\-\\d{2} \\d{2}:\\d{2}:\\d{2}[\\.\\d{1,8}]?");
+            _isoDatePattern      = Pattern.compile("\\d{4}\\-\\d{2}\\-\\d{2}");
+            _isoTimePattern      = Pattern.compile("\\d{2}:\\d{2}:\\d{2}");
+            _isoTimestampPattern = Pattern.compile("\\d{4}\\-\\d{2}\\-\\d{2} \\d{2}:\\d{2}:\\d{2}[\\.\\d{1,8}]?");
         }
-    	catch (MalformedPatternException ex)
+    	catch (PatternSyntaxException ex)
         {
         	throw new DdlUtilsException(ex);
         }
@@ -294,21 +289,21 @@
     	// and thus the user has to ensure that it is correct
         else if (column.getTypeCode() == Types.DATE)
         {
-            if (new Perl5Matcher().matches(column.getDefaultValue(), _isoDatePattern))
+            if (_isoDatePattern.matcher(column.getDefaultValue()).matches())
             {
             	return "TO_DATE('"+column.getDefaultValue()+"', 'YYYY-MM-DD')";
             }
         }
         else if (column.getTypeCode() == Types.TIME)
         {
-            if (new Perl5Matcher().matches(column.getDefaultValue(), _isoTimePattern))
+            if (_isoTimePattern.matcher(column.getDefaultValue()).matches())
             {
             	return "TO_DATE('"+column.getDefaultValue()+"', 'HH24:MI:SS')";
             }
         }
         else if (column.getTypeCode() == Types.TIMESTAMP)
         {
-            if (new Perl5Matcher().matches(column.getDefaultValue(), _isoTimestampPattern))
+            if (_isoTimestampPattern.matcher(column.getDefaultValue()).matches())
             {
             	return "TO_DATE('"+column.getDefaultValue()+"', 'YYYY-MM-DD HH24:MI:SS')";
             }
diff --git a/src/java/org/apache/ddlutils/platform/oracle/Oracle8ModelReader.java b/src/java/org/apache/ddlutils/platform/oracle/Oracle8ModelReader.java
index 8a025c9..ba21770 100644
--- a/src/java/org/apache/ddlutils/platform/oracle/Oracle8ModelReader.java
+++ b/src/java/org/apache/ddlutils/platform/oracle/Oracle8ModelReader.java
@@ -30,6 +30,9 @@
 import java.util.Collection;

 import java.util.HashMap;

 import java.util.Map;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+import java.util.regex.PatternSyntaxException;

 

 import org.apache.commons.collections.map.ListOrderedMap;

 import org.apache.ddlutils.DdlUtilsException;

@@ -39,12 +42,6 @@
 import org.apache.ddlutils.model.TypeMap;

 import org.apache.ddlutils.platform.DatabaseMetaDataWrapper;

 import org.apache.ddlutils.platform.JdbcModelReader;

-import org.apache.oro.text.regex.MalformedPatternException;

-import org.apache.oro.text.regex.Pattern;

-import org.apache.oro.text.regex.PatternCompiler;

-import org.apache.oro.text.regex.PatternMatcher;

-import org.apache.oro.text.regex.Perl5Compiler;

-import org.apache.oro.text.regex.Perl5Matcher;

 

 /**

  * Reads a database model from an Oracle 8 database.

@@ -72,15 +69,13 @@
         setDefaultSchemaPattern(null);

         setDefaultTablePattern("%");

 

-        PatternCompiler compiler = new Perl5Compiler();

-

     	try

     	{

-    		_oracleIsoDatePattern      = compiler.compile("TO_DATE\\('([^']*)'\\, 'YYYY\\-MM\\-DD'\\)");

-    		_oracleIsoTimePattern      = compiler.compile("TO_DATE\\('([^']*)'\\, 'HH24:MI:SS'\\)");

-    		_oracleIsoTimestampPattern = compiler.compile("TO_DATE\\('([^']*)'\\, 'YYYY\\-MM\\-DD HH24:MI:SS'\\)");

+    		_oracleIsoDatePattern      = Pattern.compile("TO_DATE\\('([^']*)'\\, 'YYYY\\-MM\\-DD'\\)");

+    		_oracleIsoTimePattern      = Pattern.compile("TO_DATE\\('([^']*)'\\, 'HH24:MI:SS'\\)");

+    		_oracleIsoTimestampPattern = Pattern.compile("TO_DATE\\('([^']*)'\\, 'YYYY\\-MM\\-DD HH24:MI:SS'\\)");

         }

-    	catch (MalformedPatternException ex)

+    	catch (PatternSyntaxException ex)

         {

         	throw new DdlUtilsException(ex);

         }

@@ -189,26 +184,34 @@
 			// we also reverse the ISO-format adaptation, and adjust the default value to timestamp

 			if (column.getDefaultValue() != null)

 			{

-				PatternMatcher matcher   = new Perl5Matcher();

-				Timestamp      timestamp = null;

+				Matcher   matcher   = _oracleIsoTimestampPattern.matcher(column.getDefaultValue());

+				Timestamp timestamp = null;

 	

-				if (matcher.matches(column.getDefaultValue(), _oracleIsoTimestampPattern))

+				if (matcher.matches())

 				{

-					String timestampVal = matcher.getMatch().group(1);

+					String timestampVal = matcher.group(1);

 

 					timestamp = Timestamp.valueOf(timestampVal);

 				}

-				else if (matcher.matches(column.getDefaultValue(), _oracleIsoDatePattern))

+				else

 				{

-					String dateVal = matcher.getMatch().group(1);

+				    matcher = _oracleIsoDatePattern.matcher(column.getDefaultValue());

+	                if (matcher.matches())

+	                {

+	                    String dateVal = matcher.group(1);

 

-					timestamp = new Timestamp(Date.valueOf(dateVal).getTime());

-				}

-				else if (matcher.matches(column.getDefaultValue(), _oracleIsoTimePattern))

-				{

-					String timeVal = matcher.getMatch().group(1);

+	                    timestamp = new Timestamp(Date.valueOf(dateVal).getTime());

+	                }

+	                else

+	                {

+	                    matcher = _oracleIsoTimePattern.matcher(column.getDefaultValue());

+	                    if (matcher.matches())

+	                    {

+	                        String timeVal = matcher.group(1);

 

-					timestamp = new Timestamp(Time.valueOf(timeVal).getTime());

+	                        timestamp = new Timestamp(Time.valueOf(timeVal).getTime());

+	                    }

+	                }

 				}

 				if (timestamp != null)

 				{

@@ -306,7 +309,7 @@
 		    "a.TABLE_NAME=? AND a.GENERATED=? AND a.TABLE_TYPE=? AND a.TABLE_NAME=b.TABLE_NAME AND a.INDEX_NAME=b.INDEX_NAME AND " +

 		    "a.INDEX_NAME NOT IN (SELECT DISTINCT c.CONSTRAINT_NAME FROM USER_CONSTRAINTS c WHERE c.CONSTRAINT_TYPE=? AND c.TABLE_NAME=a.TABLE_NAME)";

 		final String queryWithSchema =

-		    query.substring(query.length() - 1) + " AND c.OWNER LIKE ?) AND a.TABLE_OWNER LIKE ?";

+		    query.substring(0, query.length() - 1) + " AND c.OWNER LIKE ?) AND a.TABLE_OWNER LIKE ?";

 

         Map               indices = new ListOrderedMap();

 		PreparedStatement stmt    = null;

diff --git a/src/java/org/apache/ddlutils/platform/sybase/SybaseModelReader.java b/src/java/org/apache/ddlutils/platform/sybase/SybaseModelReader.java
index face615..4cf3122 100644
--- a/src/java/org/apache/ddlutils/platform/sybase/SybaseModelReader.java
+++ b/src/java/org/apache/ddlutils/platform/sybase/SybaseModelReader.java
@@ -29,6 +29,9 @@
 import java.util.ArrayList;

 import java.util.Collection;

 import java.util.Map;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+import java.util.regex.PatternSyntaxException;

 

 import org.apache.ddlutils.DdlUtilsException;

 import org.apache.ddlutils.Platform;

@@ -40,12 +43,6 @@
 import org.apache.ddlutils.model.TypeMap;

 import org.apache.ddlutils.platform.DatabaseMetaDataWrapper;

 import org.apache.ddlutils.platform.JdbcModelReader;

-import org.apache.oro.text.regex.MalformedPatternException;

-import org.apache.oro.text.regex.Pattern;

-import org.apache.oro.text.regex.PatternCompiler;

-import org.apache.oro.text.regex.PatternMatcher;

-import org.apache.oro.text.regex.Perl5Compiler;

-import org.apache.oro.text.regex.Perl5Matcher;

 

 /**

  * Reads a database model from a Sybase database.

@@ -71,14 +68,12 @@
         setDefaultSchemaPattern(null);

         setDefaultTablePattern("%");

 

-        PatternCompiler compiler = new Perl5Compiler();

-

     	try

     	{

-            _isoDatePattern = compiler.compile("'(\\d{4}\\-\\d{2}\\-\\d{2})'");

-            _isoTimePattern = compiler.compile("'(\\d{2}:\\d{2}:\\d{2})'");

+            _isoDatePattern = Pattern.compile("'(\\d{4}\\-\\d{2}\\-\\d{2})'");

+            _isoTimePattern = Pattern.compile("'(\\d{2}:\\d{2}:\\d{2})'");

         }

-    	catch (MalformedPatternException ex)

+    	catch (PatternSyntaxException ex)

         {

         	throw new DdlUtilsException(ex);

         }

@@ -117,17 +112,21 @@
     		{

     			// Sybase maintains the default values for DATE/TIME jdbc types, so we have to

     			// migrate the default value to TIMESTAMP

-    			PatternMatcher matcher   = new Perl5Matcher();

-    			Timestamp      timestamp = null;

+    			Matcher   matcher   = _isoDatePattern.matcher(column.getDefaultValue());

+    			Timestamp timestamp = null;

     

-    			if (matcher.matches(column.getDefaultValue(), _isoDatePattern))

+    			if (matcher.matches())

     			{

-    				timestamp = new Timestamp(Date.valueOf(matcher.getMatch().group(1)).getTime());

+    				timestamp = new Timestamp(Date.valueOf(matcher.group(1)).getTime());

     			}

-    			else if (matcher.matches(column.getDefaultValue(), _isoTimePattern))

-    			{

-    				timestamp = new Timestamp(Time.valueOf(matcher.getMatch().group(1)).getTime());

-    			}

+    			else

+			    {

+    			    matcher = _isoTimePattern.matcher(column.getDefaultValue());

+    			    if (matcher.matches())

+                    {

+                        timestamp = new Timestamp(Time.valueOf(matcher.group(1)).getTime());

+                    }

+			    }

     			if (timestamp != null)

     			{

     				column.setDefaultValue(timestamp.toString());

diff --git a/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java b/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java
index cd27f00..c874a91 100644
--- a/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java
+++ b/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java
@@ -19,14 +19,11 @@
  * under the License.

  */

 

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+

 import org.apache.ddlutils.TestPlatformBase;

 import org.apache.ddlutils.platform.mssql.MSSqlPlatform;

-import org.apache.oro.text.regex.MatchResult;

-import org.apache.oro.text.regex.Pattern;

-import org.apache.oro.text.regex.PatternMatcher;

-import org.apache.oro.text.regex.PatternMatcherInput;

-import org.apache.oro.text.regex.Perl5Compiler;

-import org.apache.oro.text.regex.Perl5Matcher;

 

 /**

  * Tests the Microsoft SQL Server platform.

@@ -52,15 +49,15 @@
 

         // Since we have no way of knowing the auto-generated variables in the SQL,

         // we simply try to extract it from the SQL

-        Pattern        declarePattern    = new Perl5Compiler().compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

-        PatternMatcher matcher           = new Perl5Matcher();

-        String         tableNameVar      = "tablename";

-        String         constraintNameVar = "constraintname";

+        Pattern declarePattern    = Pattern.compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

+        Matcher matcher           = declarePattern.matcher(sql);

+        String  tableNameVar      = "tablename";

+        String  constraintNameVar = "constraintname";

 

-        if (matcher.contains(sql, declarePattern))

+        if (matcher.find())

         {

-            tableNameVar      = matcher.getMatch().group(1);

-            constraintNameVar = matcher.getMatch().group(2);

+            tableNameVar      = matcher.group(1);

+            constraintNameVar = matcher.group(2);

         }

         assertEqualsIgnoringWhitespaces(

             "SET quoted_identifier on;\n"+

@@ -130,15 +127,15 @@
 

         // Since we have no way of knowing the auto-generated variables in the SQL,

         // we simply try to extract it from the SQL

-        Pattern        declarePattern    = new Perl5Compiler().compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

-        PatternMatcher matcher           = new Perl5Matcher();

-        String         tableNameVar      = "tablename";

-        String         constraintNameVar = "constraintname";

+        Pattern declarePattern    = Pattern.compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

+        Matcher matcher           = declarePattern.matcher(sql);

+        String  tableNameVar      = "tablename";

+        String  constraintNameVar = "constraintname";

 

-        if (matcher.contains(sql, declarePattern))

+        if (matcher.find())

         {

-            tableNameVar      = matcher.getMatch().group(1);

-            constraintNameVar = matcher.getMatch().group(2);

+            tableNameVar      = matcher.group(1);

+            constraintNameVar = matcher.group(2);

         }

         // Note that this is not valid SQL as a table can have only one identity column at most 

         assertEqualsIgnoringWhitespaces(

@@ -184,19 +181,17 @@
 

         // Since we have no way of knowing the auto-generated variables in the SQL,

         // we simply try to extract it from the SQL

-        Pattern             declarePattern     = new Perl5Compiler().compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

-        PatternMatcherInput input              = new PatternMatcherInput(sql);

-        PatternMatcher      matcher            = new Perl5Matcher();

-        String[]            tableNameVars      = { "tablename", "tablename", "tablename" };

-        String[]            constraintNameVars = { "constraintname", "constraintname", "constraintname" };

+        Pattern  declarePattern     = Pattern.compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

+        Matcher  matcher            = declarePattern.matcher(sql);

+        int      startPos           = 0;

+        String[] tableNameVars      = { "tablename", "tablename", "tablename" };

+        String[] constraintNameVars = { "constraintname", "constraintname", "constraintname" };

 

-        for (int idx = 0; (idx < 3) && matcher.contains(input, declarePattern); idx++)

+        for (int idx = 0; (idx < 3) && matcher.find(startPos); idx++)

         {

-            MatchResult result = matcher.getMatch();

-

-            tableNameVars[idx]      = result.group(1);

-            constraintNameVars[idx] = result.group(2);

-            input.setCurrentOffset(result.endOffset(2));

+            tableNameVars[idx]      = matcher.group(1);

+            constraintNameVars[idx] = matcher.group(2);

+            startPos                = matcher.end();

         }

         assertEqualsIgnoringWhitespaces(

             "SET quoted_identifier on;\n"+

@@ -301,15 +296,15 @@
 

         // Since we have no way of knowing the auto-generated variables in the SQL,

         // we simply try to extract it from the SQL

-        Pattern        declarePattern    = new Perl5Compiler().compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

-        PatternMatcher matcher           = new Perl5Matcher();

-        String         tableNameVar      = "tablename";

-        String         constraintNameVar = "constraintname";

+        Pattern declarePattern    = Pattern.compile("DECLARE @([\\S]+) [^@]+@([\\S]+)");

+        Matcher matcher           = declarePattern.matcher(sql);

+        String  tableNameVar      = "tablename";

+        String  constraintNameVar = "constraintname";

 

-        if (matcher.contains(sql, declarePattern))

+        if (matcher.find())

         {

-            tableNameVar      = matcher.getMatch().group(1);

-            constraintNameVar = matcher.getMatch().group(2);

+            tableNameVar      = matcher.group(1);

+            constraintNameVar = matcher.group(2);

         }

         assertEqualsIgnoringWhitespaces(

             "SET quoted_identifier on;\n"+