Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.39 KB | None | 0 0
  1. package org.apache.spark.sql.sources.v2
  2.  
  3. import org.apache.spark.annotation.Experimental
  4. import org.apache.spark.sql.catalog.v2.expressions.NamedReference
  5.  
  6. /**
  7. * A filter that evaluates to `true` iff the field evaluates to a value
  8. * equal to `value`.
  9. *
  10. * @since 3.0.0
  11. */
  12. @Experimental
  13. case class EqualTo(field: NamedReference, value: Any) extends Filter {
  14. override def references: Array[NamedReference] = Array(field) ++ findReferences(value)
  15. }
  16.  
  17. /**
  18. * Performs equality comparison, similar to [[EqualTo]]. However, this differs from [[EqualTo]]
  19. * in that it returns `true` (rather than NULL) if both inputs are NULL, and `false`
  20. * (rather than NULL) if one of the input is NULL and the other is not NULL.
  21. *
  22. * @since 3.0.0
  23. */
  24. @Experimental
  25. case class EqualNullSafe(field: NamedReference, value: Any) extends Filter {
  26. override def references: Array[NamedReference] = Array(field) ++ findReferences(value)
  27. }
  28.  
  29. /**
  30. * A filter that evaluates to `true` iff the field evaluates to a value
  31. * greater than `value`.
  32. *
  33. * @since 3.0.0
  34. */
  35. @Experimental
  36. case class GreaterThan(field: NamedReference, value: Any) extends Filter {
  37. override def references: Array[NamedReference] = Array(field) ++ findReferences(value)
  38. }
  39.  
  40. /**
  41. * A filter that evaluates to `true` iff the field evaluates to a value
  42. * greater than or equal to `value`.
  43. *
  44. * @since 3.0.0
  45. */
  46. @Experimental
  47. case class GreaterThanOrEqual(field: NamedReference, value: Any) extends Filter {
  48. override def references: Array[NamedReference] = Array(field) ++ findReferences(value)
  49. }
  50.  
  51. /**
  52. * A filter that evaluates to `true` iff the field evaluates to a value
  53. * less than `value`.
  54. *
  55. * @since 3.0.0
  56. */
  57. @Experimental
  58. case class LessThan(field: NamedReference, value: Any) extends Filter {
  59. override def references: Array[NamedReference] = Array(field) ++ findReferences(value)
  60. }
  61.  
  62. /**
  63. * A filter that evaluates to `true` iff the field evaluates to a value
  64. * less than or equal to `value`.
  65. *
  66. * @since 3.0.0
  67. */
  68. @Experimental
  69. case class LessThanOrEqual(field: NamedReference, value: Any) extends Filter {
  70. override def references: Array[NamedReference] = Array(field) ++ findReferences(value)
  71. }
  72.  
  73. /**
  74. * A filter that evaluates to `true` iff the field evaluates to one of the values in the array.
  75. *
  76. * @since 3.0.0
  77. */
  78. @Experimental
  79. case class In(field: NamedReference, values: Array[Any]) extends Filter {
  80. override def hashCode(): Int = {
  81. var h = field.hashCode
  82. values.foreach { v =>
  83. h *= 41
  84. h += v.hashCode()
  85. }
  86. h
  87. }
  88. override def equals(o: Any): Boolean = o match {
  89. case In(a, vs) =>
  90. a == field && vs.length == values.length && vs.zip(values).forall(x => x._1 == x._2)
  91. case _ => false
  92. }
  93. override def toString: String = {
  94. s"In($field, [${values.mkString(",")}])"
  95. }
  96.  
  97. override def references: Array[NamedReference] = Array(field) ++ values.flatMap(findReferences)
  98. }
  99.  
  100. /**
  101. * A filter that evaluates to `true` iff the field evaluates to null.
  102. *
  103. * @since 3.0.0
  104. */
  105. @Experimental
  106. case class IsNull(field: NamedReference) extends Filter {
  107. override def references: Array[NamedReference] = Array(field)
  108. }
  109.  
  110. /**
  111. * A filter that evaluates to `true` iff the field evaluates to a non-null value.
  112. *
  113. * @since 3.0.0
  114. */
  115. @Experimental
  116. case class IsNotNull(field: NamedReference) extends Filter {
  117. override def references: Array[NamedReference] = Array(field)
  118. }
  119.  
  120. /**
  121. * A filter that evaluates to `true` iff both `left` or `right` evaluate to `true`.
  122. *
  123. * @since 3.0.0
  124. */
  125. @Experimental
  126. case class And(left: Filter, right: Filter) extends Filter {
  127. override def references: Array[NamedReference] = left.references ++ right.references
  128. }
  129.  
  130. /**
  131. * A filter that evaluates to `true` iff at least one of `left` or `right` evaluates to `true`.
  132. *
  133. * @since 3.0.0
  134. */
  135. @Experimental
  136. case class Or(left: Filter, right: Filter) extends Filter {
  137. override def references: Array[NamedReference] = left.references ++ right.references
  138. }
  139.  
  140. /**
  141. * A filter that evaluates to `true` iff `child` is evaluated to `false`.
  142. *
  143. * @since 3.0.0
  144. */
  145. @Experimental
  146. case class Not(child: Filter) extends Filter {
  147. override def references: Array[NamedReference] = child.references()
  148. }
  149.  
  150. /**
  151. * A filter that evaluates to `true` iff the field evaluates to
  152. * a string that starts with `value`.
  153. *
  154. * @since 3.0.0
  155. */
  156. @Experimental
  157. case class StringStartsWith(field: NamedReference, value: String) extends Filter {
  158. override def references: Array[NamedReference] = Array(field)
  159. }
  160.  
  161. /**
  162. * A filter that evaluates to `true` iff the field evaluates to
  163. * a string that ends with `value`.
  164. *
  165. * @since 3.0.0
  166. */
  167. @Experimental
  168. case class StringEndsWith(field: NamedReference, value: String) extends Filter {
  169. override def references: Array[NamedReference] = Array(field)
  170. }
  171.  
  172. /**
  173. * A filter that evaluates to `true` iff the field evaluates to
  174. * a string that contains the string `value`.
  175. *
  176. * @since 3.0.0
  177. */
  178. @Experimental
  179. case class StringContains(field: NamedReference, value: String) extends Filter {
  180. override def references: Array[NamedReference] = Array(field)
  181. }
  182.  
  183. /**
  184. * A filter that always evaluates to `true`.
  185. */
  186. @Experimental
  187. case class AlwaysTrue() extends Filter {
  188. override def references: Array[NamedReference] = Array.empty
  189. }
  190.  
  191. @Experimental
  192. object AlwaysTrue extends AlwaysTrue {
  193. }
  194.  
  195. /**
  196. * A filter that always evaluates to `false`.
  197. */
  198. @Experimental
  199. case class AlwaysFalse() extends Filter {
  200. override def references: Array[NamedReference] = Array.empty
  201. }
  202.  
  203. @Experimental
  204. object AlwaysFalse extends AlwaysFalse {
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement