@@ -12,22 +12,34 @@ const escapeMap = {
1212 '\\' : '\\\\' ,
1313}
1414
15+ function commonOptionConnector ( keyword , action , opt ) {
16+ if ( ! opt ) return
17+ return `${ keyword . toUpperCase ( ) } ${ action ( opt ) } `
18+ }
19+
20+ function connector ( keyword , str ) {
21+ if ( ! str ) return
22+ return `${ keyword . toUpperCase ( ) } ${ str } `
23+ }
24+
1525/**
1626 * @param {(Array|boolean|string|number|null) } value
1727 * @return {Object }
1828 */
1929function createValueExpr ( value ) {
20- let expr = { }
2130 const type = typeof value
22-
23- if ( Array . isArray ( value ) ) expr = { type : 'expr_list' , value : value . map ( createValueExpr ) }
24- else if ( type === 'boolean' ) expr = { type : 'bool' , value }
25- else if ( type === 'string' ) expr = { type : 'string' , value }
26- else if ( type === 'number' ) expr = { type : 'number' , value }
27- else if ( value === null ) expr = { type : 'null' , value : null }
28- else throw new Error ( `Cannot convert value "${ value } " to SQL` )
29-
30- return expr
31+ if ( Array . isArray ( value ) ) return { type : 'expr_list' , value : value . map ( createValueExpr ) }
32+ if ( value === null ) return { type : 'null' , value : null }
33+ switch ( type ) {
34+ case 'boolean' :
35+ return { type : 'bool' , value }
36+ case 'string' :
37+ return { type : 'string' , value }
38+ case 'number' :
39+ return { type : 'number' , value }
40+ default :
41+ throw new Error ( `Cannot convert value "${ value } " to SQL` )
42+ }
3143}
3244
3345/**
@@ -38,18 +50,15 @@ function createValueExpr(value) {
3850 */
3951function createBinaryExpr ( operator , left , right ) {
4052 const expr = { operator, type : 'binary_expr' }
41-
42- expr . left = left && left . type ? expr . left = left : createValueExpr ( left )
43-
53+ expr . left = has ( left , 'type' ) ? left : createValueExpr ( left )
4454 if ( operator === 'BETWEEN' || operator === 'NOT BETWEEN' ) {
4555 expr . right = {
4656 type : 'expr_list' ,
4757 value : [ createValueExpr ( right [ 0 ] ) , createValueExpr ( right [ 1 ] ) ] ,
4858 }
49- } else {
50- expr . right = right && right . type ? expr . right = right : expr . right = createValueExpr ( right )
59+ return expr
5160 }
52-
61+ expr . right = has ( right , 'type' ) ? right : createValueExpr ( right )
5362 return expr
5463}
5564
@@ -94,23 +103,39 @@ function escape(str) {
94103
95104function identifierToSql ( ident , isDual ) {
96105 if ( isDual === true ) return `'${ ident } '`
106+ if ( ! ident ) return
97107 return `\`${ ident } \``
98108}
99109
100110function literalToSQL ( literal ) {
101- const { type } = literal
102- let { value } = literal
103-
104- if ( type === 'number' ) {
105- /* nothing */
106- } else if ( type === 'string' ) value = `'${ escape ( value ) } '`
107- else if ( type === 'bool' ) value = value ? 'TRUE' : 'FALSE'
108- else if ( type === 'null' ) value = 'NULL'
109- else if ( type === 'star' ) value = '*'
110- else if ( [ 'time' , 'date' , 'timestamp' ] . includes ( type ) ) value = `${ type . toUpperCase ( ) } '${ value } '`
111- else if ( type === 'param' ) value = `:${ value } `
112-
113- return literal . parentheses ? `(${ value } )` : value
111+ const { type, parentheses, value } = literal
112+ let str = value
113+ switch ( type ) {
114+ case 'string' :
115+ str = `'${ escape ( value ) } '`
116+ break
117+ case 'boolean' :
118+ case 'bool' :
119+ str = value ? 'TRUE' : 'FALSE'
120+ break
121+ case 'null' :
122+ str = 'NULL'
123+ break
124+ case 'star' :
125+ str = '*'
126+ break
127+ case 'param' :
128+ str = `:${ value } `
129+ break
130+ case 'time' :
131+ case 'date' :
132+ case 'timestamp' :
133+ str = `${ type . toUpperCase ( ) } '${ value } '`
134+ break
135+ default :
136+ break
137+ }
138+ return parentheses ? `(${ str } )` : str
114139}
115140
116141function replaceParams ( ast , params ) {
@@ -152,6 +177,8 @@ function commentToSQL(comment) {
152177}
153178
154179export {
180+ commonOptionConnector ,
181+ connector ,
155182 commonTypeValue ,
156183 columnRefToSQL ,
157184 commentToSQL ,
0 commit comments