You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2011/11/13 11:04:19 UTC

svn commit: r1201418 - in /incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db: DBDatabaseDriver.java sqlserver/DBDatabaseDriverMSSQL.java

Author: doebele
Date: Sun Nov 13 10:04:19 2011
New Revision: 1201418

URL: http://svn.apache.org/viewvc?rev=1201418&view=rev
Log:
EMPIREDB-122
unicode patch for sql server driver

Modified:
    incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
    incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java

Modified: incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java?rev=1201418&r1=1201417&r2=1201418&view=diff
==============================================================================
--- incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java (original)
+++ incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java Sun Nov 13 10:04:19 2011
@@ -597,36 +597,6 @@ public abstract class DBDatabaseDriver i
             log.error("close statement:" + sqle.toString());
         }
     }
-
-    // helper for Date and DateTime Strings
-    protected String getDateTimeString(Object value, int sqlTemplate, int sqlPattern, int sqlCurrentDate)
-    {
-        // is it a sysdate expression
-        if (DBDatabase.SYSDATE.equals(value))
-            return getSQLPhrase(sqlCurrentDate);
-        // Format the date (ymd)
-        String datetime = value.toString(); 
-        SimpleDateFormat sqlFormat = new SimpleDateFormat(getSQLPhrase(sqlPattern));
-        if ((value instanceof Date)==false)
-        {   // Convert String to Date
-            try
-            {
-                DateFormat source = DateFormat.getDateInstance(DateFormat.SHORT);
-                Date dt = source.parse(value.toString());
-               datetime = sqlFormat.format(dt);
-            } catch (ParseException e)
-            {
-                log.error("Date parsing error ", e);
-            }
-        }
-        else
-        {   // Format the date as string
-            datetime = sqlFormat.format((Date)value);
-        }
-        // Now Build String
-        String template = getSQLPhrase(sqlTemplate);
-        return StringUtils.replace(template, "{0}", datetime);
-    }
     
     /**
      * Creates a sql string for a given value. 
@@ -638,7 +608,7 @@ public abstract class DBDatabaseDriver i
      * @param type the sql data type of the supplied value
      * @return the sql string representing this value
      */
-    public final String getValueString(Object value, DataType type)
+    public String getValueString(Object value, DataType type)
     { 
         if (ObjectUtils.isEmpty(value))
         {
@@ -660,14 +630,7 @@ public abstract class DBDatabaseDriver i
             case CLOB:
             case UNIQUEID:
             {   // Text value
-                StringBuilder valBuf = new StringBuilder();
-                // for SQLSERVER utf8 support, see EMPIREDB-122
-                // valBuf.append("N'");
-                valBuf.append("'");
-                if (DBDatabase.EMPTY_STRING.equals(value)==false)
-                    appendTextValue(valBuf, value.toString());
-                valBuf.append("'");
-                return valBuf.toString();
+                return getTextString(type, value);
             }
             case BOOL:
             {   // Get Boolean value   
@@ -677,7 +640,7 @@ public abstract class DBDatabaseDriver i
                 } 
                 else
                 { // Boolean from String
-                    boolVal = stringToBoolean(value);
+                    boolVal = stringToBoolean(value.toString());
                 }
                 return getSQLPhrase((boolVal) ? SQL_BOOLEAN_TRUE : SQL_BOOLEAN_FALSE);
             }
@@ -687,6 +650,93 @@ public abstract class DBDatabaseDriver i
     }
 
     /**
+     * encodes a Date value for an SQL command string. 
+     * @param value
+     * @param sqlTemplate
+     * @param sqlPattern
+     * @param sqlCurrentDate
+     * @return
+     */
+    protected String getDateTimeString(Object value, int sqlTemplate, int sqlPattern, int sqlCurrentDate)
+    {
+        // is it a sysdate expression
+        if (DBDatabase.SYSDATE.equals(value))
+            return getSQLPhrase(sqlCurrentDate);
+        // Format the date (ymd)
+        String datetime = value.toString(); 
+        SimpleDateFormat sqlFormat = new SimpleDateFormat(getSQLPhrase(sqlPattern));
+        if ((value instanceof Date)==false)
+        {   // Convert String to Date
+            try
+            {
+                DateFormat source = DateFormat.getDateInstance(DateFormat.SHORT);
+                Date dt = source.parse(value.toString());
+               datetime = sqlFormat.format(dt);
+            } catch (ParseException e)
+            {
+                log.error("Date parsing error ", e);
+            }
+        }
+        else
+        {   // Format the date as string
+            datetime = sqlFormat.format((Date)value);
+        }
+        // Now Build String
+        String template = getSQLPhrase(sqlTemplate);
+        return StringUtils.replace(template, "{0}", datetime);
+    }
+
+    /**
+     * encodes Text values for an SQL command string.
+     * @param type date type (can only be TEXT, CHAR, CLOB and UNIQUEID)
+     * @param value the text to be encoded
+     * @return the encoded sql value
+     */
+    protected String getTextString(DataType type, Object value)
+    {
+        StringBuilder valBuf = new StringBuilder();
+        valBuf.append("'");
+        if (DBDatabase.EMPTY_STRING.equals(value)==false)
+            appendTextValue(valBuf, value.toString());
+        valBuf.append("'");
+        return valBuf.toString();
+    }
+
+    /** 
+     * this helper function doubles up single quotes for SQL 
+     */
+    protected void appendTextValue(StringBuilder buf, String value)
+    {
+        if (value.indexOf('\'') >= 0)
+        { // a routine to double up single quotes for SQL
+            int len = value.length();
+            for (int i = 0; i < len; i++)
+            {
+                if (value.charAt(i) == '\'')
+                    buf.append("''");
+                else
+                    buf.append(value.charAt(i));
+            }
+        } 
+        else
+        {
+            buf.append(value);
+        }
+    }
+
+    /**
+     * this function converts a string containing a boolean expression to a boolean. 
+     * @param value the string containing a boolean expression
+     * @return true if the string contains either "true", "y" or "1" or false otherwise
+     */
+    protected boolean stringToBoolean(final String value) 
+    {
+        return "1".equals(value) ||
+               "true".equalsIgnoreCase(value) ||
+               "y".equalsIgnoreCase(value);
+    }
+    
+    /**
      * Called when a database is opened
      */
     protected void attachDatabase(DBDatabase db, Connection conn)
@@ -763,33 +813,4 @@ public abstract class DBDatabaseDriver i
         return new java.sql.Timestamp(date.getTime());
     }
 
-    /** 
-     * this helper function doubles up single quotes for SQL 
-     */
-    protected void appendTextValue(StringBuilder buf, String value)
-    {
-        if (value.indexOf('\'') >= 0)
-        { // a routine to double up single quotes for SQL
-            int len = value.length();
-            for (int i = 0; i < len; i++)
-            {
-                if (value.charAt(i) == '\'')
-                    buf.append("''");
-                else
-                    buf.append(value.charAt(i));
-            }
-        } 
-        else
-        {
-            buf.append(value);
-        }
-    }
-    
-	private boolean stringToBoolean(final Object value) {
-		String strVal = value.toString();
-		return "1".equals(strVal) ||
-		          "true".equalsIgnoreCase(strVal) ||
-		          "y".equalsIgnoreCase(strVal);
-	}
-
 }
\ No newline at end of file

Modified: incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java?rev=1201418&r1=1201417&r2=1201418&view=diff
==============================================================================
--- incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java (original)
+++ incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java Sun Nov 13 10:04:19 2011
@@ -349,6 +349,21 @@ public class DBDatabaseDriverMSSQL exten
             return null;
         }
     }
+
+    /**
+     * @see DBDatabaseDriver#getTextString(DataType type, Object value)
+     */
+    @Override
+    protected String getTextString(DataType type, Object value)
+    {
+        StringBuilder valBuf = new StringBuilder();
+        // for SQLSERVER utf8 support, see EMPIREDB-122
+        valBuf.append("N'");
+        if (DBDatabase.EMPTY_STRING.equals(value)==false)
+            appendTextValue(valBuf, value.toString());
+        valBuf.append("'");
+        return valBuf.toString();
+    }
     
     /**
      * Overridden. Returns a timestamp that is used for record updates created by the database server.