/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at .
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox ,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.dynamo.db;
import java.lang.reflect.*;
import java.sql.*;
import com.silverwrist.util.*;
import com.silverwrist.dynamo.iface.DBUtilities;
abstract class DBUtilitiesImpl implements DBUtilities
{
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static final Class[] ARGS_TYPE = new Class[0];
private static final Object[] ARGS = new Object[0];
private static final String SQL_WILDCARD_CHARS = "%_'";
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
protected DBUtilitiesImpl()
{ // do nothing
} // end constructor
/*--------------------------------------------------------------------------------
* Implementations from interface DBUtilities
*--------------------------------------------------------------------------------
*/
public String encodeString(String data)
{
if (data==null)
return null; // safety feature
int ndx = data.indexOf('\'');
if (ndx<0)
return data;
StringBuffer buf = new StringBuffer();
while (ndx>=0)
{ // convert each single quote mark to a pair of them
if (ndx>0)
buf.append(data.substring(0,ndx));
buf.append("''");
data = data.substring(ndx+1);
ndx = data.indexOf('\'');
} // end while
buf.append(data);
return buf.toString();
} // end encodeString
public String encodeStringWildcards(String data)
{
if (data==null)
return null; // safety feature
AnyCharMatcher nhc = new AnyCharMatcher(SQL_WILDCARD_CHARS);
int ndx = nhc.get(data);
if (ndx<0)
return data; // trivial short-circuit case
StringBuffer buf = new StringBuffer();
while (ndx>=0)
{ // append the matched "head" and then the encoded character
if (ndx>0)
buf.append(data.substring(0,ndx));
switch (data.charAt(ndx++))
{
case '%':
buf.append("\\%");
break;
case '_':
buf.append("\\_");
break;
case '\'':
buf.append("\'\'");
break;
} // end switch
if (ndx==data.length())
return buf.toString(); // munched the entire string - all done!
data = data.substring(ndx);
ndx = nhc.get(data);
} // end while
buf.append(data); // append the unmatched tail
return buf.toString();
} // end encodeStringWildcards
/*--------------------------------------------------------------------------------
* Abstract declarations from interface DBUtilities
*--------------------------------------------------------------------------------
*/
public abstract java.util.Date getDateTime(ResultSet rs, String column) throws SQLException;
public abstract java.util.Date getDateTime(ResultSet rs, int column) throws SQLException;
public abstract void setDateTime(PreparedStatement stmt, int index, java.util.Date date) throws SQLException;
public abstract void testDatabase(Connection conn) throws SQLException;
/*--------------------------------------------------------------------------------
* External static operations
*--------------------------------------------------------------------------------
*/
public static DBUtilities get(String type) throws Exception
{
String impl_class_name = DBUtilitiesImpl.class.getName() + "_" + type.toLowerCase();
Method m = Class.forName(impl_class_name).getMethod("get",ARGS_TYPE);
return (DBUtilities)(m.invoke(null,ARGS));
} // end get
} // end class DBUtilitiesImpl