Represents a complex SQL expression, with a given operator and one or more attributes (which may also be ComplexExpressions, forming a tree).

This is an abstract class that is not that useful by itself. The subclasses @link patio.sql.BooleanExpression}, patio.sql.NumericExpression and patio.sql.StringExpression should be used instead of this class directly.

Extends Static Properties
PropertyTypeDefault ValueDescription
BITWISE_OPERATORSObject {bitWiseAnd:"&", bitWiseOr:"|", exclusiveOr:"^", leftShift:"<<", rightShift:">>"}

Default bitwise operators.

BOOLEAN_OPERATORSObject {AND:"AND",OR:"OR"}

Default boolean operators.

INEQUALITY_OPERATORSObject {GT:">",GTE:">=",LT:"<",LTE:"<="}

Default inequality operators.

IN_OPERATORSObject {IN:"IN",NOTIN:'NOT IN'}

Default IN operators.

IS_OPERATORSObject {IS:"IS", ISNOT:'IS NOT'}

Default IS operators.

MATHEMATICAL_OPERATORSObject {PLUS:"+", MINUS:"-", DIVIDE:"/", MULTIPLY:"*"}

Default mathematical operators.

N_ARITY_OPERATORSObject { "||":"||", AND:"AND", OR:"OR", PLUS:"+", MINUS:"-", DIVIDE:"/", MULTIPLY:"*" }

Default N(multi) arity operators.

ONE_ARITY_OPERATORSObject { "NOT":"NOT", "NOOP":"NOOP" }

Default ONE operators.

OPERATOR_INVERSIONSObject { AND:"OR", OR:"AND", GT:"lte", GTE:"lt", LT:"gte", LTE:"gt", EQ:"neq", NEQ:"eq", LIKE:'NOT LIKE', "NOT LIKE":"LIKE", '!~*':'~*', '~*':'!~*', "~":'!~', "IN":'NOTIN', "NOTIN":"IN", "IS":'IS NOT', "ISNOT":"IS", NOT:"NOOP", NOOP:"NOT", ILIKE:'NOT ILIKE', NOTILIKE:"ILIKE" }

Hash of operator inversions

TWO_ARITY_OPERATORSObject { EQ:'=', NEQ:'!=', LIKE:"LIKE", "NOT LIKE":'NOT LIKE', ILIKE:"ILIKE", "NOT ILIKE":'NOT ILIKE', "~":"~", '!~':"!~", '~*':"~*", '!~*':"!~*", GT:">", GTE:">=", LT:"<", LTE:"<=", bitWiseAnd:"&", bitWiseOr:"|", exclusiveOr:"^", leftShift:"<<", rightShift:">>", IS:"IS", ISNOT:'IS NOT', IN:"IN", NOTIN:'NOT IN' }

Default two arity operators.

Constructor

Defined sql.js Throws Source
  1. function (op){
  2. if (op) {
  3. var args = argsToArray(arguments, 1);
  4. //make a copy of the args
  5. var origArgs = args.slice(0);
  6. args.forEach(function (a, i) {
  7. if (Expression.isConditionSpecifier(a)) {
  8. args[i] = BooleanExpression.fromValuePairs(a);
  9. }
  10. });
  11. op = op.toUpperCase();
  12. if (N_ARITY_OPERATORS.hasOwnProperty(op)) {
  13. if (args.length &lt; 1) {
  14. throw new ExpressionError("The " + op + " operator requires at least 1 argument");
  15. }
  16. var oldArgs = args.slice(0);
  17. args = [];
  18. oldArgs.forEach(function (a) {
  19. a instanceof ComplexExpression && a.op === op ? args = args.concat(a.args) : args.push(a);
  20. });
  21. } else if (TWO_ARITY_OPERATORS.hasOwnProperty(op)) {
  22. if (args.length !== 2) {
  23. throw new ExpressionError("The " + op + " operator requires precisely 2 arguments");
  24. }
  25. //With IN/NOT IN, even if the second argument is an array of two element arrays,
  26. //don't convert it into a boolean expression, since it's definitely being used
  27. //as a value list.
  28. if (IN_OPERATORS[op]) {
  29. args[1] = origArgs[1];
  30. }
  31. } else if (ONE_ARITY_OPERATORS.hasOwnProperty(op)) {
  32. if (args.length !== 1) {
  33. throw new ExpressionError("The " + op + " operator requires only one argument");
  34. }
  35. } else {
  36. throw new ExpressionError("Invalid operator " + op);
  37. }
  38. this.op = op;
  39. this.args = args;
  40. }
  41. }

toString Function Public


Defined sql.js

Converts the ComplexExpression to a string.

Arguments Returns Source
  1. function (ds){
  2. !Dataset && (Dataset = require("./dataset"));
  3. ds = ds || new Dataset();
  4. return ds.complexExpressionSql(this.op, this.args);
  5. }

Documentation generated using coddoc.