File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -33,6 +33,7 @@ Postgres.prototype.visit = function(node) {
3333 case 'DELETE' : return this . visitDelete ( ) ;
3434 case 'CREATE' : return this . visitCreate ( node ) ;
3535 case 'DROP' : return this . visitDrop ( node ) ;
36+ case 'ALIAS' : return this . visitAlias ( node ) ;
3637 case 'ALTER' : return this . visitAlter ( node ) ;
3738 case 'FROM' : return this . visitFrom ( node ) ;
3839 case 'WHERE' : return this . visitWhere ( node ) ;
@@ -155,6 +156,11 @@ Postgres.prototype.visitDrop = function(drop) {
155156 return result ;
156157} ;
157158
159+ Postgres . prototype . visitAlias = function ( alias ) {
160+ var result = [ this . visit ( alias . value ) + ' AS ' + this . quote ( alias . alias ) ] ;
161+ return result ;
162+ } ;
163+
158164Postgres . prototype . visitAlter = function ( alter ) {
159165 this . _visitingAlter = true ;
160166 // don't auto-generate from clause
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ var _ = require ( 'lodash' ) ;
4+ var Node = require ( __dirname ) ;
5+
6+ var AliasNode = Node . define ( {
7+ type : 'ALIAS' ,
8+ constructor : function ( value , alias ) {
9+ Node . call ( this ) ;
10+
11+ this . value = value ;
12+ this . alias = alias ;
13+ }
14+ } ) ;
15+
16+ var AliasMixin = {
17+ as : function ( alias ) {
18+ // create an alias node
19+ var aliasNode = new AliasNode ( this , alias ) ;
20+
21+ // defaults the properties of the aliased node
22+ _ . defaults ( aliasNode , this ) ;
23+
24+ return aliasNode ;
25+ }
26+ } ;
27+
28+ module . exports = AliasNode ;
29+ module . exports . AliasMixin = AliasMixin ;
Original file line number Diff line number Diff line change @@ -22,4 +22,8 @@ var BinaryNode = Node.define(_.extend({
2222 } ,
2323} ) ) ;
2424
25+ // allow aliasing
26+ var AliasNode = require ( __dirname + '/alias' ) ;
27+ _ . extend ( BinaryNode . prototype , AliasNode . AliasMixin ) ;
28+
2529module . exports = BinaryNode ;
Original file line number Diff line number Diff line change @@ -19,4 +19,8 @@ var FunctionCallNode = Node.define({
1919// mix in value expression
2020_ . extend ( FunctionCallNode . prototype , valueExpressionMixin ( ) ) ;
2121
22+ // allow aliasing
23+ var AliasNode = require ( __dirname + '/alias' ) ;
24+ _ . extend ( FunctionCallNode . prototype , AliasNode . AliasMixin ) ;
25+
2226module . exports = FunctionCallNode ;
Original file line number Diff line number Diff line change @@ -24,4 +24,8 @@ var TernaryNode = Node.define(_.extend({
2424 } ,
2525} ) ) ;
2626
27+ // allow aliasing
28+ var AliasNode = require ( __dirname + '/alias' ) ;
29+ _ . extend ( TernaryNode . prototype , AliasNode . AliasMixin ) ;
30+
2731module . exports = TernaryNode ;
Original file line number Diff line number Diff line change @@ -5,7 +5,7 @@ var Node = require(__dirname);
55var valueExpressionMixin = require ( __dirname + '/valueExpression' ) ;
66
77var valueExpressionMixed = false ;
8- var UnaryNode = module . exports = Node . define ( {
8+ var UnaryNode = Node . define ( {
99 type : 'UNARY' ,
1010 constructor : function ( config ) {
1111 Node . call ( this ) ;
@@ -20,3 +20,9 @@ var UnaryNode = module.exports = Node.define({
2020 }
2121 }
2222} ) ;
23+
24+ // allow aliasing
25+ var AliasNode = require ( __dirname + '/alias' ) ;
26+ _ . extend ( UnaryNode . prototype , AliasNode . AliasMixin ) ;
27+
28+ module . exports = UnaryNode ;
Original file line number Diff line number Diff line change 11'use strict' ;
22
3- var _ = require ( 'lodash' ) ;
4- var Node = require ( __dirname ) ;
3+ var _ = require ( 'lodash' ) ;
4+ var Node = require ( __dirname ) ;
55var ParameterNode = require ( __dirname + '/parameter' ) ;
66
77// Process values, wrapping them in ParameterNode if necessary.
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ var Harness = require ( './support' ) ;
4+ var customer = Harness . defineCustomerTable ( ) ;
5+ var post = Harness . definePostTable ( ) ;
6+ var Table = require ( __dirname + '/../../lib/table' ) ;
7+
8+ Harness . test ( {
9+ query : customer . select ( customer . name . isNull ( ) . as ( 'nameIsNull' ) ) ,
10+ pg : 'SELECT ("customer"."name" IS NULL) AS "nameIsNull" FROM "customer"' ,
11+ sqlite : 'SELECT ("customer"."name" IS NULL) AS "nameIsNull" FROM "customer"' ,
12+ mysql : 'SELECT (`customer`.`name` IS NULL) AS `nameIsNull` FROM `customer`' ,
13+ params : [ ]
14+ } ) ;
15+
16+ Harness . test ( {
17+ query : customer . select ( customer . name . plus ( customer . age ) . as ( 'nameAndAge' ) ) . where ( customer . age . gt ( 10 ) . and ( customer . age . lt ( 20 ) ) ) ,
18+ pg : 'SELECT ("customer"."name" + "customer"."age") AS "nameAndAge" FROM "customer" WHERE (("customer"."age" > $1) AND ("customer"."age" < $2))' ,
19+ sqlite : 'SELECT ("customer"."name" + "customer"."age") AS "nameAndAge" FROM "customer" WHERE (("customer"."age" > $1) AND ("customer"."age" < $2))' ,
20+ mysql : 'SELECT (`customer`.`name` + `customer`.`age`) AS `nameAndAge` FROM `customer` WHERE ((`customer`.`age` > ?) AND (`customer`.`age` < ?))' ,
21+ params : [ 10 , 20 ]
22+ } ) ;
23+
24+ Harness . test ( {
25+ query : customer . select ( customer . age . between ( 10 , 20 ) . as ( 'ageBetween' ) ) ,
26+ pg : 'SELECT ("customer"."age" BETWEEN $1 AND $2) AS "ageBetween" FROM "customer"' ,
27+ sqlite : 'SELECT ("customer"."age" BETWEEN $1 AND $2) AS "ageBetween" FROM "customer"' ,
28+ mysql : 'SELECT (`customer`.`age` BETWEEN ? AND ?) AS `ageBetween` FROM `customer`' ,
29+ params : [ 10 , 20 ]
30+ } ) ;
Original file line number Diff line number Diff line change @@ -10,6 +10,13 @@ var user = sql.define({
1010} ) ;
1111
1212suite ( 'function' , function ( ) {
13+ test ( 'alias function call' , function ( ) {
14+ var upper = sql . functions . UPPER ;
15+ var aliasedUpper = upper ( user . email ) . as ( 'upperAlias' ) . toQuery ( ) ;
16+
17+ assert . equal ( aliasedUpper . text , 'UPPER("user"."email") AS "upperAlias"' ) ;
18+ } ) ;
19+
1320 test ( 'creating function call works' , function ( ) {
1421 var upper = sql . functionCallCreator ( 'UPPER' ) ;
1522 var functionCall = upper ( 'hello' , 'world' ) . toQuery ( ) ;
You can’t perform that action at this time.
0 commit comments