@@ -165,8 +165,37 @@ private[sql] object JDBCRDD extends Logging {
165
165
* @return A Catalyst schema corresponding to columns in the given order.
166
166
*/
167
167
private def pruneSchema (schema : StructType , columns : Array [String ]): StructType = {
168
- val fieldMap = Map (schema.fields map { x => x.metadata.getString(" name" ) -> x }: _* )
169
- new StructType (columns map { name => fieldMap(name) })
168
+ val fieldMap = Map (schema.fields.map(x => x.metadata.getString(" name" ) -> x): _* )
169
+ new StructType (columns.map(name => fieldMap(name)))
170
+ }
171
+
172
+ /**
173
+ * Converts value to SQL expression.
174
+ */
175
+ private def compileValue (value : Any ): Any = value match {
176
+ case stringValue : String => s " ' ${escapeSql(stringValue)}' "
177
+ case timestampValue : Timestamp => " '" + timestampValue + " '"
178
+ case dateValue : Date => " '" + dateValue + " '"
179
+ case _ => value
180
+ }
181
+
182
+ private def escapeSql (value : String ): String =
183
+ if (value == null ) null else StringUtils .replace(value, " '" , " ''" )
184
+
185
+ /**
186
+ * Turns a single Filter into a String representing a SQL expression.
187
+ * Returns null for an unhandled filter.
188
+ */
189
+ private def compileFilter (f : Filter ): String = f match {
190
+ case EqualTo (attr, value) => s " $attr = ${compileValue(value)}"
191
+ case Not (EqualTo (attr, value)) => s " $attr != ${compileValue(value)}"
192
+ case LessThan (attr, value) => s " $attr < ${compileValue(value)}"
193
+ case GreaterThan (attr, value) => s " $attr > ${compileValue(value)}"
194
+ case LessThanOrEqual (attr, value) => s " $attr <= ${compileValue(value)}"
195
+ case GreaterThanOrEqual (attr, value) => s " $attr >= ${compileValue(value)}"
196
+ case IsNull (attr) => s " $attr IS NULL "
197
+ case IsNotNull (attr) => s " $attr IS NOT NULL "
198
+ case _ => null
170
199
}
171
200
172
201
@@ -240,37 +269,12 @@ private[sql] class JDBCRDD(
240
269
if (sb.length == 0 ) " 1" else sb.substring(1 )
241
270
}
242
271
243
- /**
244
- * Converts value to SQL expression.
245
- */
246
- private def compileValue (value : Any ): Any = value match {
247
- case stringValue : String => s " ' ${escapeSql(stringValue)}' "
248
- case timestampValue : Timestamp => " '" + timestampValue + " '"
249
- case dateValue : Date => " '" + dateValue + " '"
250
- case _ => value
251
- }
252
-
253
- private def escapeSql (value : String ): String =
254
- if (value == null ) null else StringUtils .replace(value, " '" , " ''" )
255
-
256
- /**
257
- * Turns a single Filter into a String representing a SQL expression.
258
- * Returns null for an unhandled filter.
259
- */
260
- private def compileFilter (f : Filter ): String = f match {
261
- case EqualTo (attr, value) => s " $attr = ${compileValue(value)}"
262
- case LessThan (attr, value) => s " $attr < ${compileValue(value)}"
263
- case GreaterThan (attr, value) => s " $attr > ${compileValue(value)}"
264
- case LessThanOrEqual (attr, value) => s " $attr <= ${compileValue(value)}"
265
- case GreaterThanOrEqual (attr, value) => s " $attr >= ${compileValue(value)}"
266
- case _ => null
267
- }
268
272
269
273
/**
270
274
* `filters`, but as a WHERE clause suitable for injection into a SQL query.
271
275
*/
272
276
private val filterWhereClause : String = {
273
- val filterStrings = filters map compileFilter filter (_ != null )
277
+ val filterStrings = filters. map( JDBCRDD . compileFilter). filter(_ != null )
274
278
if (filterStrings.size > 0 ) {
275
279
val sb = new StringBuilder (" WHERE " )
276
280
filterStrings.foreach(x => sb.append(x).append(" AND " ))
0 commit comments