| 176 | } |
| 177 | |
| 178 | @Override public boolean equalsDeep(@Nullable SqlNode node, Litmus litmus) { |
| 179 | if (node == this) { |
| 180 | return true; |
| 181 | } |
| 182 | if (!(node instanceof SqlCall)) { |
| 183 | return litmus.fail("{} != {}", this, node); |
| 184 | } |
| 185 | SqlCall that = (SqlCall) node; |
| 186 | |
| 187 | // Compare operators by name, not identity, because they may not |
| 188 | // have been resolved yet. Use case insensitive comparison since |
| 189 | // this may be a case insensitive system. |
| 190 | if (!this.getOperator().getName().equalsIgnoreCase(that.getOperator().getName())) { |
| 191 | return litmus.fail("{} != {}", this, node); |
| 192 | } |
| 193 | if (!equalDeep(this.getFunctionQuantifier(), that.getFunctionQuantifier(), litmus)) { |
| 194 | return litmus.fail("{} != {} (function quantifier differs)", this, node); |
| 195 | } |
| 196 | return equalDeep(this.getOperandList(), that.getOperandList(), litmus); |
| 197 | } |
| 198 | |
| 199 | /** |
| 200 | * Returns a string describing the actual argument types of a call, e.g. |