@@ -167,6 +167,35 @@ private[sql] object JDBCRDD extends Logging {
167167 new StructType (columns map { name => fieldMap(name) })
168168 }
169169
170+ /**
171+ * Converts value to SQL expression.
172+ */
173+ private def compileValue (value : Any ): Any = value match {
174+ case stringValue : String => s " ' ${escapeSql(stringValue)}' "
175+ case timestampValue : Timestamp => " '" + timestampValue + " '"
176+ case dateValue : Date => " '" + dateValue + " '"
177+ case _ => value
178+ }
179+
180+ private def escapeSql (value : String ): String =
181+ if (value == null ) null else StringUtils .replace(value, " '" , " ''" )
182+
183+ /**
184+ * Turns a single Filter into a String representing a SQL expression.
185+ * Returns null for an unhandled filter.
186+ */
187+ private def compileFilter (f : Filter ): String = f match {
188+ case EqualTo (attr, value) => s " $attr = ${compileValue(value)}"
189+ case Not (EqualTo (attr, value)) => s " $attr != ${compileValue(value)}"
190+ case LessThan (attr, value) => s " $attr < ${compileValue(value)}"
191+ case GreaterThan (attr, value) => s " $attr > ${compileValue(value)}"
192+ case LessThanOrEqual (attr, value) => s " $attr <= ${compileValue(value)}"
193+ case GreaterThanOrEqual (attr, value) => s " $attr >= ${compileValue(value)}"
194+ case IsNull (attr) => s " $attr IS NULL "
195+ case IsNotNull (attr) => s " $attr IS NOT NULL "
196+ case _ => null
197+ }
198+
170199 /**
171200 * Given a driver string and an url, return a function that loads the
172201 * specified driver string then returns a connection to the JDBC url.
@@ -262,40 +291,12 @@ private[sql] class JDBCRDD(
262291 if (sb.length == 0 ) " 1" else sb.substring(1 )
263292 }
264293
265- /**
266- * Converts value to SQL expression.
267- */
268- private def compileValue (value : Any ): Any = value match {
269- case stringValue : String => s " ' ${escapeSql(stringValue)}' "
270- case timestampValue : Timestamp => " '" + timestampValue + " '"
271- case dateValue : Date => " '" + dateValue + " '"
272- case _ => value
273- }
274-
275- private def escapeSql (value : String ): String =
276- if (value == null ) null else StringUtils .replace(value, " '" , " ''" )
277-
278- /**
279- * Turns a single Filter into a String representing a SQL expression.
280- * Returns null for an unhandled filter.
281- */
282- private def compileFilter (f : Filter ): String = f match {
283- case EqualTo (attr, value) => s " $attr = ${compileValue(value)}"
284- case Not (EqualTo (attr, value)) => s " $attr != ${compileValue(value)}"
285- case LessThan (attr, value) => s " $attr < ${compileValue(value)}"
286- case GreaterThan (attr, value) => s " $attr > ${compileValue(value)}"
287- case LessThanOrEqual (attr, value) => s " $attr <= ${compileValue(value)}"
288- case GreaterThanOrEqual (attr, value) => s " $attr >= ${compileValue(value)}"
289- case IsNull (attr) => s " $attr IS NULL "
290- case IsNotNull (attr) => s " $attr IS NOT NULL "
291- case _ => null
292- }
293294
294295 /**
295296 * `filters`, but as a WHERE clause suitable for injection into a SQL query.
296297 */
297298 private val filterWhereClause : String = {
298- val filterStrings = filters map compileFilter filter (_ != null )
299+ val filterStrings = filters map JDBCRDD . compileFilter filter (_ != null )
299300 if (filterStrings.size > 0 ) {
300301 val sb = new StringBuilder (" WHERE " )
301302 filterStrings.foreach(x => sb.append(x).append(" AND " ))
0 commit comments