2021-04-24 20:32:31 +00:00
; ( function ( root , factory ) {
if ( typeof define === 'function' && define . amd ) {
define ( [ ] , factory ) ;
} else if ( typeof exports === 'object' ) {
module . exports = factory ( ) ;
} else {
root . squel = factory ( ) ;
}
} ( this , function ( ) {
'use strict' ;
var _get = function get ( object , property , receiver ) { if ( object === null ) object = Function . prototype ; var desc = Object . getOwnPropertyDescriptor ( object , property ) ; if ( desc === undefined ) { var parent = Object . getPrototypeOf ( object ) ; if ( parent === null ) { return undefined ; } else { return get ( parent , property , receiver ) ; } } else if ( "value" in desc ) { return desc . value ; } else { var getter = desc . get ; if ( getter === undefined ) { return undefined ; } return getter . call ( receiver ) ; } } ;
var _createClass = function ( ) { function defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } } return function ( Constructor , protoProps , staticProps ) { if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) defineProperties ( Constructor , staticProps ) ; return Constructor ; } ; } ( ) ;
var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ;
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; }
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
// append to string if non-empty
function _pad ( str , pad ) {
return str . length ? str + pad : str ;
}
// Extend given object's with other objects' properties, overriding existing ones if necessary
function _extend ( dst ) {
for ( var _len = arguments . length , sources = Array ( _len > 1 ? _len - 1 : 0 ) , _key = 1 ; _key < _len ; _key ++ ) {
sources [ _key - 1 ] = arguments [ _key ] ;
}
if ( dst && sources ) {
var _loop = function _loop ( src ) {
if ( ( typeof src === 'undefined' ? 'undefined' : _typeof ( src ) ) === 'object' ) {
Object . getOwnPropertyNames ( src ) . forEach ( function ( key ) {
dst [ key ] = src [ key ] ;
} ) ;
}
} ;
var _iteratorNormalCompletion = true ;
var _didIteratorError = false ;
var _iteratorError = undefined ;
try {
for ( var _iterator = sources [ Symbol . iterator ] ( ) , _step ; ! ( _iteratorNormalCompletion = ( _step = _iterator . next ( ) ) . done ) ; _iteratorNormalCompletion = true ) {
var src = _step . value ;
_loop ( src ) ;
}
} catch ( err ) {
_didIteratorError = true ;
_iteratorError = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion && _iterator . RETURN ) {
_iterator . RETURN ( ) ;
}
} finally {
if ( _didIteratorError ) {
throw _iteratorError ;
}
}
}
}
return dst ;
} ;
// get whether object is a plain object
function _isPlainObject ( obj ) {
return obj && obj . constructor . prototype === Object . prototype ;
} ;
// get whether object is an array
function _isArray ( obj ) {
return obj && obj . constructor . prototype === Array . prototype ;
} ;
// clone given item
function _clone ( src ) {
if ( ! src ) {
return src ;
}
if ( typeof src . clone === 'function' ) {
return src . clone ( ) ;
} else if ( _isPlainObject ( src ) || _isArray ( src ) ) {
var ret = new src . constructor ( ) ;
Object . getOwnPropertyNames ( src ) . forEach ( function ( key ) {
if ( typeof src [ key ] !== 'function' ) {
ret [ key ] = _clone ( src [ key ] ) ;
}
} ) ;
return ret ;
} else {
return JSON . parse ( JSON . stringify ( src ) ) ;
}
} ;
/ * *
* Register a value type handler
*
* Note : this will override any existing handler registered for this value type .
* /
function _registerValueHandler ( handlers , type , handler ) {
var typeofType = typeof type === 'undefined' ? 'undefined' : _typeof ( type ) ;
if ( typeofType !== 'function' && typeofType !== 'string' ) {
throw new Error ( "type must be a class constructor or string" ) ;
}
if ( typeof handler !== 'function' ) {
throw new Error ( "handler must be a function" ) ;
}
var _iteratorNormalCompletion2 = true ;
var _didIteratorError2 = false ;
var _iteratorError2 = undefined ;
try {
for ( var _iterator2 = handlers [ Symbol . iterator ] ( ) , _step2 ; ! ( _iteratorNormalCompletion2 = ( _step2 = _iterator2 . next ( ) ) . done ) ; _iteratorNormalCompletion2 = true ) {
var typeHandler = _step2 . value ;
if ( typeHandler . type === type ) {
typeHandler . handler = handler ;
return ;
}
}
} catch ( err ) {
_didIteratorError2 = true ;
_iteratorError2 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion2 && _iterator2 . RETURN ) {
_iterator2 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError2 ) {
throw _iteratorError2 ;
}
}
}
handlers . push ( {
type : type ,
handler : handler
} ) ;
} ;
/ * *
* Get value type handler for given type
* /
function getValueHandler ( value , localHandlers , globalHandlers ) {
return _getValueHandler ( value , localHandlers ) || _getValueHandler ( value , globalHandlers ) ;
} ;
function _getValueHandler ( value , handlers ) {
for ( var i = 0 ; i < handlers . length ; i ++ ) {
var typeHandler = handlers [ i ] ;
// if type is a string then use `typeof` or else use `instanceof`
if ( ( typeof value === 'undefined' ? 'undefined' : _typeof ( value ) ) === typeHandler . type || typeof typeHandler . type !== 'string' && value instanceof typeHandler . type ) {
return typeHandler . handler ;
}
}
} ;
/ * *
* Build base squel classes and methods
* /
function _buildSquel ( ) {
var flavour = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : null ;
var cls = {
// Get whether obj is a query builder
isSquelBuilder : function isSquelBuilder ( obj ) {
return obj && ! ! obj . _toParamString ;
}
} ;
// Get whether nesting should be applied for given item
var _shouldApplyNesting = function _shouldApplyNesting ( obj ) {
return ! cls . isSquelBuilder ( obj ) || ! obj . options . rawNesting ;
} ;
// default query builder options
cls . DefaultQueryBuilderOptions = {
// If true then table names will be rendered inside quotes. The quote character used is configurable via the nameQuoteCharacter option.
autoQuoteTableNames : false ,
// If true then field names will rendered inside quotes. The quote character used is configurable via the nameQuoteCharacter option.
autoQuoteFieldNames : false ,
// If true then alias names will rendered inside quotes. The quote character used is configurable via the `tableAliasQuoteCharacter` and `fieldAliasQuoteCharacter` options.
autoQuoteAliasNames : true ,
// If true then table alias names will rendered after AS keyword.
useAsForTableAliasNames : false ,
// The quote character used for when quoting table and field names
nameQuoteCharacter : '`' ,
// The quote character used for when quoting table alias names
tableAliasQuoteCharacter : '`' ,
// The quote character used for when quoting table alias names
fieldAliasQuoteCharacter : '"' ,
// Custom value handlers where key is the value type and the value is the handler function
valueHandlers : [ ] ,
// Character used to represent a parameter value
parameterCharacter : '?' ,
// Numbered parameters returned from toParam() as $1, $2, etc.
numberedParameters : false ,
// Numbered parameters prefix character(s)
numberedParametersPrefix : '$' ,
// Numbered parameters start at this number.
numberedParametersStartAt : 1 ,
// If true then replaces all single quotes within strings. The replacement string used is configurable via the `singleQuoteReplacement` option.
replaceSingleQuotes : false ,
// The string to replace single quotes with in query strings
singleQuoteReplacement : '\'\'' ,
// String used to join individual blocks in a query when it's stringified
separator : ' ' ,
// Function for formatting string values prior to insertion into query string
stringFormatter : null ,
// Whether to prevent the addition of brackets () when nesting this query builder's output
rawNesting : false
} ;
// Global custom value handlers for all instances of builder
cls . globalValueHandlers = [ ] ;
/ *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# Custom value types
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
// Register a new value handler
cls . registerValueHandler = function ( type , handler ) {
_registerValueHandler ( cls . globalValueHandlers , type , handler ) ;
} ;
/ *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# Base classes
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
// Base class for cloneable builders
cls . Cloneable = function ( ) {
function _class ( ) {
_classCallCheck ( this , _class ) ;
}
_createClass ( _class , [ {
key : 'clone' ,
/ * *
* Clone this builder
* /
value : function clone ( ) {
var newInstance = new this . constructor ( ) ;
return _extend ( newInstance , _clone ( _extend ( { } , this ) ) ) ;
}
} ] ) ;
return _class ;
} ( ) ;
// Base class for all builders
cls . BaseBuilder = function ( _cls$Cloneable ) {
_inherits ( _class2 , _cls$Cloneable ) ;
/ * *
* Constructor .
* this . param { Object } options Overriding one or more of ` cls.DefaultQueryBuilderOptions ` .
* /
function _class2 ( options ) {
_classCallCheck ( this , _class2 ) ;
var _this = _possibleConstructorReturn ( this , ( _class2 . _ _proto _ _ || Object . getPrototypeOf ( _class2 ) ) . call ( this ) ) ;
var defaults = JSON . parse ( JSON . stringify ( cls . DefaultQueryBuilderOptions ) ) ;
// for function values, etc we need to manually copy
[ 'stringFormatter' ] . forEach ( function ( p ) {
defaults [ p ] = cls . DefaultQueryBuilderOptions [ p ] ;
} ) ;
_this . options = _extend ( { } , defaults , options ) ;
return _this ;
}
/ * *
* Register a custom value handler for this builder instance .
*
* Note : this will override any globally registered handler for this value type .
* /
_createClass ( _class2 , [ {
key : 'registerValueHandler' ,
value : function registerValueHandler ( type , handler ) {
_registerValueHandler ( this . options . valueHandlers , type , handler ) ;
return this ;
}
/ * *
* Sanitize given expression .
* /
} , {
key : '_sanitizeExpression' ,
value : function _sanitizeExpression ( expr ) {
// If it's not a base builder instance
if ( ! cls . isSquelBuilder ( expr ) ) {
// It must then be a string
if ( typeof expr !== "string" ) {
throw new Error ( "expression must be a string or builder instance" ) ;
}
}
return expr ;
}
/ * *
* Sanitize the given name .
*
* The 'type' parameter is used to construct a meaningful error message in case validation fails .
* /
} , {
key : '_sanitizeName' ,
value : function _sanitizeName ( value , type ) {
if ( typeof value !== "string" ) {
throw new Error ( type + ' must be a string' ) ;
}
return value ;
}
} , {
key : '_sanitizeField' ,
value : function _sanitizeField ( item ) {
if ( ! cls . isSquelBuilder ( item ) ) {
item = this . _sanitizeName ( item , "field name" ) ;
}
return item ;
}
} , {
key : '_sanitizeBaseBuilder' ,
value : function _sanitizeBaseBuilder ( item ) {
if ( cls . isSquelBuilder ( item ) ) {
return item ;
}
throw new Error ( "must be a builder instance" ) ;
}
} , {
key : '_sanitizeTable' ,
value : function _sanitizeTable ( item ) {
if ( typeof item !== "string" ) {
try {
item = this . _sanitizeBaseBuilder ( item ) ;
} catch ( e ) {
throw new Error ( "table name must be a string or a builder" ) ;
}
} else {
item = this . _sanitizeName ( item , 'table' ) ;
}
return item ;
}
} , {
key : '_sanitizeTableAlias' ,
value : function _sanitizeTableAlias ( item ) {
return this . _sanitizeName ( item , "table alias" ) ;
}
} , {
key : '_sanitizeFieldAlias' ,
value : function _sanitizeFieldAlias ( item ) {
return this . _sanitizeName ( item , "field alias" ) ;
}
// Sanitize the given limit/offset value.
} , {
key : '_sanitizeLimitOffset' ,
value : function _sanitizeLimitOffset ( value ) {
value = parseInt ( value ) ;
if ( 0 > value || isNaN ( value ) ) {
throw new Error ( "limit/offset must be >= 0" ) ;
}
return value ;
}
// Santize the given field value
} , {
key : '_sanitizeValue' ,
value : function _sanitizeValue ( item ) {
var itemType = typeof item === 'undefined' ? 'undefined' : _typeof ( item ) ;
if ( null === item ) {
// null is allowed
} else if ( "string" === itemType || "number" === itemType || "boolean" === itemType ) {
// primitives are allowed
} else if ( cls . isSquelBuilder ( item ) ) {
// Builders allowed
} else {
var typeIsValid = ! ! getValueHandler ( item , this . options . valueHandlers , cls . globalValueHandlers ) ;
if ( ! typeIsValid ) {
throw new Error ( "field value must be a string, number, boolean, null or one of the registered custom value types" ) ;
}
}
return item ;
}
// Escape a string value, e.g. escape quotes and other characters within it.
} , {
key : '_escapeValue' ,
value : function _escapeValue ( value ) {
return this . options . replaceSingleQuotes && value ? value . replace ( /\'/g , this . options . singleQuoteReplacement ) : value ;
}
} , {
key : '_formatTableName' ,
value : function _formatTableName ( item ) {
if ( this . options . autoQuoteTableNames ) {
var quoteChar = this . options . nameQuoteCharacter ;
item = '' + quoteChar + item + quoteChar ;
}
return item ;
}
} , {
key : '_formatFieldAlias' ,
value : function _formatFieldAlias ( item ) {
if ( this . options . autoQuoteAliasNames ) {
var quoteChar = this . options . fieldAliasQuoteCharacter ;
item = '' + quoteChar + item + quoteChar ;
}
return item ;
}
} , {
key : '_formatTableAlias' ,
value : function _formatTableAlias ( item ) {
if ( this . options . autoQuoteAliasNames ) {
var quoteChar = this . options . tableAliasQuoteCharacter ;
item = '' + quoteChar + item + quoteChar ;
}
return this . options . useAsForTableAliasNames ? 'AS ' + item : item ;
}
} , {
key : '_formatFieldName' ,
value : function _formatFieldName ( item ) {
var formattingOptions = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
if ( this . options . autoQuoteFieldNames ) {
var quoteChar = this . options . nameQuoteCharacter ;
if ( formattingOptions . ignorePeriodsForFieldNameQuotes ) {
// a.b.c -> `a.b.c`
item = '' + quoteChar + item + quoteChar ;
} else {
// a.b.c -> `a`.`b`.`c`
item = item . split ( '.' ) . map ( function ( v ) {
// treat '*' as special case (#79)
return '*' === v ? v : '' + quoteChar + v + quoteChar ;
} ) . join ( '.' ) ;
}
}
return item ;
}
// Format the given custom value
} , {
key : '_formatCustomValue' ,
value : function _formatCustomValue ( value , asParam , formattingOptions ) {
// user defined custom handlers takes precedence
var customHandler = getValueHandler ( value , this . options . valueHandlers , cls . globalValueHandlers ) ;
// use the custom handler if available
if ( customHandler ) {
value = customHandler ( value , asParam , formattingOptions ) ;
// custom value handler can instruct caller not to process returned value
if ( value && value . rawNesting ) {
return {
formatted : true ,
rawNesting : true ,
value : value . value
} ;
}
}
return {
formatted : ! ! customHandler ,
value : value
} ;
}
/ * *
* Format given value for inclusion into parameter values array .
* /
} , {
key : '_formatValueForParamArray' ,
value : function _formatValueForParamArray ( value ) {
var _this2 = this ;
var formattingOptions = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
if ( _isArray ( value ) ) {
return value . map ( function ( v ) {
return _this2 . _formatValueForParamArray ( v , formattingOptions ) ;
} ) ;
} else {
return this . _formatCustomValue ( value , true , formattingOptions ) . value ;
}
}
/ * *
* Format the given field value for inclusion into the query string
* /
} , {
key : '_formatValueForQueryString' ,
value : function _formatValueForQueryString ( initialValue ) {
var _this3 = this ;
var formattingOptions = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
// maybe we have a cusotm value handler
var _formatCustomValue2 = this . _formatCustomValue ( initialValue , false , formattingOptions ) ,
rawNesting = _formatCustomValue2 . rawNesting ,
formatted = _formatCustomValue2 . formatted ,
value = _formatCustomValue2 . value ;
// if formatting took place then return it directly
if ( formatted ) {
if ( rawNesting ) {
return value ;
} else {
return this . _applyNestingFormatting ( value , _shouldApplyNesting ( initialValue ) ) ;
}
}
// if it's an array then format each element separately
if ( _isArray ( value ) ) {
value = value . map ( function ( v ) {
return _this3 . _formatValueForQueryString ( v ) ;
} ) ;
value = this . _applyNestingFormatting ( value . join ( ', ' ) , _shouldApplyNesting ( value ) ) ;
} else {
var typeofValue = typeof value === 'undefined' ? 'undefined' : _typeof ( value ) ;
if ( null === value ) {
value = "NULL" ;
} else if ( typeofValue === "boolean" ) {
value = value ? "TRUE" : "FALSE" ;
} else if ( cls . isSquelBuilder ( value ) ) {
value = this . _applyNestingFormatting ( value . toString ( ) , _shouldApplyNesting ( value ) ) ;
} else if ( typeofValue !== "number" ) {
// if it's a string and we have custom string formatting turned on then use that
if ( 'string' === typeofValue && this . options . stringFormatter ) {
return this . options . stringFormatter ( value ) ;
}
if ( formattingOptions . dontQuote ) {
value = '' + value ;
} else {
var escapedValue = this . _escapeValue ( value ) ;
value = '\'' + escapedValue + '\'' ;
}
}
}
return value ;
}
} , {
key : '_applyNestingFormatting' ,
value : function _applyNestingFormatting ( str ) {
var nesting = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : true ;
if ( str && typeof str === 'string' && nesting && ! this . options . rawNesting ) {
// apply brackets if they're not already existing
var alreadyHasBrackets = '(' === str . charAt ( 0 ) && ')' === str . charAt ( str . length - 1 ) ;
if ( alreadyHasBrackets ) {
// check that it's the form "((x)..(y))" rather than "(x)..(y)"
var idx = 0 ,
open = 1 ;
while ( str . length - 1 > ++ idx ) {
var c = str . charAt ( idx ) ;
if ( '(' === c ) {
open ++ ;
} else if ( ')' === c ) {
open -- ;
if ( 1 > open ) {
alreadyHasBrackets = false ;
break ;
}
}
}
}
if ( ! alreadyHasBrackets ) {
str = '(' + str + ')' ;
}
}
return str ;
}
/ * *
* Build given string and its corresponding parameter values into
* output .
*
* @ param { String } str
* @ param { Array } values
* @ param { Object } [ options ] Additional options .
* @ param { Boolean } [ options . buildParameterized ] Whether to build paramterized string . Default is false .
* @ param { Boolean } [ options . nested ] Whether this expression is nested within another .
* @ param { Boolean } [ options . formattingOptions ] Formatting options for values in query string .
* @ return { Object }
* /
} , {
key : '_buildString' ,
value : function _buildString ( str , values ) {
var options = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : { } ;
var nested = options . nested ,
buildParameterized = options . buildParameterized ,
formattingOptions = options . formattingOptions ;
values = values || [ ] ;
str = str || '' ;
var formattedStr = '' ,
curValue = - 1 ,
formattedValues = [ ] ;
var paramChar = this . options . parameterCharacter ;
var idx = 0 ;
while ( str . length > idx ) {
// param char?
if ( str . substr ( idx , paramChar . length ) === paramChar ) {
var value = values [ ++ curValue ] ;
if ( buildParameterized ) {
if ( cls . isSquelBuilder ( value ) ) {
var ret = value . _toParamString ( {
buildParameterized : buildParameterized ,
nested : true
} ) ;
formattedStr += ret . text ;
ret . values . forEach ( function ( value ) {
return formattedValues . push ( value ) ;
} ) ;
} else {
value = this . _formatValueForParamArray ( value , formattingOptions ) ;
if ( _isArray ( value ) ) {
// Array(6) -> "(??, ??, ??, ??, ??, ??)"
var tmpStr = value . map ( function ( ) {
return paramChar ;
} ) . join ( ', ' ) ;
formattedStr += '(' + tmpStr + ')' ;
value . forEach ( function ( val ) {
return formattedValues . push ( val ) ;
} ) ;
} else {
formattedStr += paramChar ;
formattedValues . push ( value ) ;
}
}
} else {
formattedStr += this . _formatValueForQueryString ( value , formattingOptions ) ;
}
idx += paramChar . length ;
} else {
formattedStr += str . charAt ( idx ) ;
idx ++ ;
}
}
return {
text : this . _applyNestingFormatting ( formattedStr , ! ! nested ) ,
values : formattedValues
} ;
}
/ * *
* Build all given strings and their corresponding parameter values into
* output .
*
* @ param { Array } strings
* @ param { Array } strValues array of value arrays corresponding to each string .
* @ param { Object } [ options ] Additional options .
* @ param { Boolean } [ options . buildParameterized ] Whether to build paramterized string . Default is false .
* @ param { Boolean } [ options . nested ] Whether this expression is nested within another .
* @ return { Object }
* /
} , {
key : '_buildManyStrings' ,
value : function _buildManyStrings ( strings , strValues ) {
var options = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : { } ;
var totalStr = [ ] ,
totalValues = [ ] ;
for ( var idx = 0 ; strings . length > idx ; ++ idx ) {
var inputString = strings [ idx ] ,
inputValues = strValues [ idx ] ;
var _buildString2 = this . _buildString ( inputString , inputValues , {
buildParameterized : options . buildParameterized ,
nested : false
} ) ,
text = _buildString2 . text ,
values = _buildString2 . values ;
totalStr . push ( text ) ;
values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
}
totalStr = totalStr . join ( this . options . separator ) ;
return {
text : totalStr . length ? this . _applyNestingFormatting ( totalStr , ! ! options . nested ) : '' ,
values : totalValues
} ;
}
/ * *
* Get parameterized representation of this instance .
*
* @ param { Object } [ options ] Options .
* @ param { Boolean } [ options . buildParameterized ] Whether to build paramterized string . Default is false .
* @ param { Boolean } [ options . nested ] Whether this expression is nested within another .
* @ return { Object }
* /
} , {
key : '_toParamString' ,
value : function _toParamString ( options ) {
throw new Error ( 'Not yet implemented' ) ;
}
/ * *
* Get the expression string .
* @ return { String }
* /
} , {
key : 'toString' ,
value : function toString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
return this . _toParamString ( options ) . text ;
}
/ * *
* Get the parameterized expression string .
* @ return { Object }
* /
} , {
key : 'toParam' ,
value : function toParam ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
return this . _toParamString ( _extend ( { } , options , {
buildParameterized : true
} ) ) ;
}
} ] ) ;
return _class2 ;
} ( cls . Cloneable ) ;
/ *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# cls . Expressions
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
/ * *
* An SQL expression builder .
*
* SQL expressions are used in WHERE and ON clauses to filter data by various criteria .
*
* Expressions can be nested . Nested expression contains can themselves
* contain nested expressions . When rendered a nested expression will be
* fully contained within brackets .
*
* All the build methods in this object return the object instance for chained method calling purposes .
* /
cls . Expression = function ( _cls$BaseBuilder ) {
_inherits ( _class3 , _cls$BaseBuilder ) ;
// Initialise the expression.
function _class3 ( options ) {
_classCallCheck ( this , _class3 ) ;
var _this4 = _possibleConstructorReturn ( this , ( _class3 . _ _proto _ _ || Object . getPrototypeOf ( _class3 ) ) . call ( this , options ) ) ;
_this4 . _nodes = [ ] ;
return _this4 ;
}
// Combine the current expression with the given expression using the intersection operator (AND).
_createClass ( _class3 , [ {
key : 'and' ,
value : function and ( expr ) {
for ( var _len2 = arguments . length , params = Array ( _len2 > 1 ? _len2 - 1 : 0 ) , _key2 = 1 ; _key2 < _len2 ; _key2 ++ ) {
params [ _key2 - 1 ] = arguments [ _key2 ] ;
}
expr = this . _sanitizeExpression ( expr ) ;
this . _nodes . push ( {
type : 'AND' ,
expr : expr ,
para : params
} ) ;
return this ;
}
// Combine the current expression with the given expression using the union operator (OR).
} , {
key : 'or' ,
value : function or ( expr ) {
for ( var _len3 = arguments . length , params = Array ( _len3 > 1 ? _len3 - 1 : 0 ) , _key3 = 1 ; _key3 < _len3 ; _key3 ++ ) {
params [ _key3 - 1 ] = arguments [ _key3 ] ;
}
expr = this . _sanitizeExpression ( expr ) ;
this . _nodes . push ( {
type : 'OR' ,
expr : expr ,
para : params
} ) ;
return this ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = [ ] ,
totalValues = [ ] ;
var _iteratorNormalCompletion3 = true ;
var _didIteratorError3 = false ;
var _iteratorError3 = undefined ;
try {
for ( var _iterator3 = this . _nodes [ Symbol . iterator ] ( ) , _step3 ; ! ( _iteratorNormalCompletion3 = ( _step3 = _iterator3 . next ( ) ) . done ) ; _iteratorNormalCompletion3 = true ) {
var node = _step3 . value ;
var type = node . type ,
expr = node . expr ,
para = node . para ;
var _ref = cls . isSquelBuilder ( expr ) ? expr . _toParamString ( {
buildParameterized : options . buildParameterized ,
nested : true
} ) : this . _buildString ( expr , para , {
buildParameterized : options . buildParameterized
} ) ,
text = _ref . text ,
values = _ref . values ;
if ( totalStr . length ) {
totalStr . push ( type ) ;
}
totalStr . push ( text ) ;
values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
}
} catch ( err ) {
_didIteratorError3 = true ;
_iteratorError3 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion3 && _iterator3 . RETURN ) {
_iterator3 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError3 ) {
throw _iteratorError3 ;
}
}
}
totalStr = totalStr . join ( ' ' ) ;
return {
text : this . _applyNestingFormatting ( totalStr , ! ! options . nested ) ,
values : totalValues
} ;
}
} ] ) ;
return _class3 ;
} ( cls . BaseBuilder ) ;
/ *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# cls . Case
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
/ * *
* An SQL CASE expression builder .
*
* SQL cases are used to select proper values based on specific criteria .
* /
cls . Case = function ( _cls$BaseBuilder2 ) {
_inherits ( _class4 , _cls$BaseBuilder2 ) ;
function _class4 ( fieldName ) {
var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
_classCallCheck ( this , _class4 ) ;
var _this5 = _possibleConstructorReturn ( this , ( _class4 . _ _proto _ _ || Object . getPrototypeOf ( _class4 ) ) . call ( this , options ) ) ;
if ( _isPlainObject ( fieldName ) ) {
options = fieldName ;
fieldName = null ;
}
if ( fieldName ) {
_this5 . _fieldName = _this5 . _sanitizeField ( fieldName ) ;
}
_this5 . options = _extend ( { } , cls . DefaultQueryBuilderOptions , options ) ;
_this5 . _cases = [ ] ;
_this5 . _elseValue = null ;
return _this5 ;
}
_createClass ( _class4 , [ {
key : 'when' ,
value : function when ( expression ) {
for ( var _len4 = arguments . length , values = Array ( _len4 > 1 ? _len4 - 1 : 0 ) , _key4 = 1 ; _key4 < _len4 ; _key4 ++ ) {
values [ _key4 - 1 ] = arguments [ _key4 ] ;
}
this . _cases . unshift ( {
expression : expression ,
values : values || [ ]
} ) ;
return this ;
}
} , {
key : 'then' ,
value : function then ( result ) {
if ( this . _cases . length == 0 ) {
throw new Error ( "when() needs to be called first" ) ;
}
this . _cases [ 0 ] . result = result ;
return this ;
}
} , {
key : 'else' ,
value : function _else ( elseValue ) {
this . _elseValue = elseValue ;
return this ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = '' ,
totalValues = [ ] ;
var _iteratorNormalCompletion4 = true ;
var _didIteratorError4 = false ;
var _iteratorError4 = undefined ;
try {
for ( var _iterator4 = this . _cases [ Symbol . iterator ] ( ) , _step4 ; ! ( _iteratorNormalCompletion4 = ( _step4 = _iterator4 . next ( ) ) . done ) ; _iteratorNormalCompletion4 = true ) {
var _ref2 = _step4 . value ;
var expression = _ref2 . expression ;
var _values = _ref2 . values ;
var result = _ref2 . result ;
totalStr = _pad ( totalStr , ' ' ) ;
var ret = this . _buildString ( expression , _values , {
buildParameterized : options . buildParameterized ,
nested : true
} ) ;
totalStr += 'WHEN ' + ret . text + ' THEN ' + this . _formatValueForQueryString ( result ) ;
ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
}
} catch ( err ) {
_didIteratorError4 = true ;
_iteratorError4 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion4 && _iterator4 . RETURN ) {
_iterator4 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError4 ) {
throw _iteratorError4 ;
}
}
}
if ( totalStr . length ) {
totalStr += ' ELSE ' + this . _formatValueForQueryString ( this . _elseValue ) + ' END' ;
if ( this . _fieldName ) {
totalStr = this . _fieldName + ' ' + totalStr ;
}
totalStr = 'CASE ' + totalStr ;
} else {
totalStr = this . _formatValueForQueryString ( this . _elseValue ) ;
}
return {
text : totalStr ,
values : totalValues
} ;
}
} ] ) ;
return _class4 ;
} ( cls . BaseBuilder ) ;
/ *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# Building blocks
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
/ *
# A building block represents a single build - step within a query building process .
#
# Query builders consist of one or more building blocks which get run in a particular order . Building blocks can
# optionally specify methods to expose through the query builder interface . They can access all the input data for
# the query builder and manipulate it as necessary , as well as append to the final query string output .
#
# If you wish to customize how queries get built or add proprietary query phrases and content then it is recommended
# that you do so using one or more custom building blocks .
#
# Original idea posted in https : //github.com/hiddentao/export/issues/10#issuecomment-15016427
* /
cls . Block = function ( _cls$BaseBuilder3 ) {
_inherits ( _class5 , _cls$BaseBuilder3 ) ;
function _class5 ( options ) {
_classCallCheck ( this , _class5 ) ;
return _possibleConstructorReturn ( this , ( _class5 . _ _proto _ _ || Object . getPrototypeOf ( _class5 ) ) . call ( this , options ) ) ;
}
/ * *
# Get input methods to expose within the query builder .
#
# By default all methods except the following get returned :
# methods prefixed with _
# constructor and toString ( )
#
# @ return Object key - > function pairs
* /
_createClass ( _class5 , [ {
key : 'exposedMethods' ,
value : function exposedMethods ( ) {
var ret = { } ;
var obj = this ;
while ( obj ) {
Object . getOwnPropertyNames ( obj ) . forEach ( function ( prop ) {
if ( 'constructor' !== prop && typeof obj [ prop ] === "function" && prop . charAt ( 0 ) !== '_' && ! cls . Block . prototype [ prop ] ) {
ret [ prop ] = obj [ prop ] ;
}
} ) ;
obj = Object . getPrototypeOf ( obj ) ;
} ;
return ret ;
}
} ] ) ;
return _class5 ;
} ( cls . BaseBuilder ) ;
// A fixed string which always gets output
cls . StringBlock = function ( _cls$Block ) {
_inherits ( _class6 , _cls$Block ) ;
function _class6 ( options , str ) {
_classCallCheck ( this , _class6 ) ;
var _this7 = _possibleConstructorReturn ( this , ( _class6 . _ _proto _ _ || Object . getPrototypeOf ( _class6 ) ) . call ( this , options ) ) ;
_this7 . _str = str ;
return _this7 ;
}
_createClass ( _class6 , [ {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
return {
text : this . _str ,
values : [ ]
} ;
}
} ] ) ;
return _class6 ;
} ( cls . Block ) ;
// A function string block
cls . FunctionBlock = function ( _cls$Block2 ) {
_inherits ( _class7 , _cls$Block2 ) ;
function _class7 ( options ) {
_classCallCheck ( this , _class7 ) ;
var _this8 = _possibleConstructorReturn ( this , ( _class7 . _ _proto _ _ || Object . getPrototypeOf ( _class7 ) ) . call ( this , options ) ) ;
_this8 . _strings = [ ] ;
_this8 . _values = [ ] ;
return _this8 ;
}
_createClass ( _class7 , [ {
key : 'function' ,
value : function _function ( str ) {
this . _strings . push ( str ) ;
for ( var _len5 = arguments . length , values = Array ( _len5 > 1 ? _len5 - 1 : 0 ) , _key5 = 1 ; _key5 < _len5 ; _key5 ++ ) {
values [ _key5 - 1 ] = arguments [ _key5 ] ;
}
this . _values . push ( values ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
return this . _buildManyStrings ( this . _strings , this . _values , options ) ;
}
} ] ) ;
return _class7 ;
} ( cls . Block ) ;
// value handler for FunctionValueBlock objects
cls . registerValueHandler ( cls . FunctionBlock , function ( value ) {
var asParam = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : false ;
return asParam ? value . toParam ( ) : value . toString ( ) ;
} ) ;
/ *
# Table specifier base class
* /
cls . AbstractTableBlock = function ( _cls$Block3 ) {
_inherits ( _class8 , _cls$Block3 ) ;
/ * *
* @ param { Boolean } [ options . singleTable ] If true then only allow one table spec .
* @ param { String } [ options . prefix ] String prefix for output .
* /
function _class8 ( options , prefix ) {
_classCallCheck ( this , _class8 ) ;
var _this9 = _possibleConstructorReturn ( this , ( _class8 . _ _proto _ _ || Object . getPrototypeOf ( _class8 ) ) . call ( this , options ) ) ;
_this9 . _tables = [ ] ;
return _this9 ;
}
/ * *
# Update given table .
#
# An alias may also be specified for the table .
#
# Concrete subclasses should provide a method which calls this
* /
_createClass ( _class8 , [ {
key : '_table' ,
value : function _table ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
alias = alias ? this . _sanitizeTableAlias ( alias ) : alias ;
table = this . _sanitizeTable ( table ) ;
if ( this . options . singleTable ) {
this . _tables = [ ] ;
}
this . _tables . push ( {
table : table ,
alias : alias
} ) ;
}
// get whether a table has been set
} , {
key : '_hasTable' ,
value : function _hasTable ( ) {
return 0 < this . _tables . length ;
}
/ * *
* @ override
* /
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = '' ,
totalValues = [ ] ;
if ( this . _hasTable ( ) ) {
// retrieve the parameterised queries
var _iteratorNormalCompletion5 = true ;
var _didIteratorError5 = false ;
var _iteratorError5 = undefined ;
try {
for ( var _iterator5 = this . _tables [ Symbol . iterator ] ( ) , _step5 ; ! ( _iteratorNormalCompletion5 = ( _step5 = _iterator5 . next ( ) ) . done ) ; _iteratorNormalCompletion5 = true ) {
var _ref3 = _step5 . value ;
var table = _ref3 . table ;
var alias = _ref3 . alias ;
totalStr = _pad ( totalStr , ', ' ) ;
var tableStr = void 0 ;
if ( cls . isSquelBuilder ( table ) ) {
var _table$ _toParamString = table . _toParamString ( {
buildParameterized : options . buildParameterized ,
nested : true
} ) ,
text = _table$ _toParamString . text ,
values = _table$ _toParamString . values ;
tableStr = text ;
values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
} else {
tableStr = this . _formatTableName ( table ) ;
}
if ( alias ) {
tableStr += ' ' + this . _formatTableAlias ( alias ) ;
}
totalStr += tableStr ;
}
} catch ( err ) {
_didIteratorError5 = true ;
_iteratorError5 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion5 && _iterator5 . RETURN ) {
_iterator5 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError5 ) {
throw _iteratorError5 ;
}
}
}
if ( this . options . prefix ) {
totalStr = this . options . prefix + ' ' + totalStr ;
}
}
return {
text : totalStr ,
values : totalValues
} ;
}
} ] ) ;
return _class8 ;
} ( cls . Block ) ;
// target table for DELETE queries, DELETE <??> FROM
cls . TargetTableBlock = function ( _cls$AbstractTableBlo ) {
_inherits ( _class9 , _cls$AbstractTableBlo ) ;
function _class9 ( ) {
_classCallCheck ( this , _class9 ) ;
return _possibleConstructorReturn ( this , ( _class9 . _ _proto _ _ || Object . getPrototypeOf ( _class9 ) ) . apply ( this , arguments ) ) ;
}
_createClass ( _class9 , [ {
key : 'target' ,
value : function target ( table ) {
this . _table ( table ) ;
}
} ] ) ;
return _class9 ;
} ( cls . AbstractTableBlock ) ;
// Update Table
cls . UpdateTableBlock = function ( _cls$AbstractTableBlo2 ) {
_inherits ( _class10 , _cls$AbstractTableBlo2 ) ;
function _class10 ( ) {
_classCallCheck ( this , _class10 ) ;
return _possibleConstructorReturn ( this , ( _class10 . _ _proto _ _ || Object . getPrototypeOf ( _class10 ) ) . apply ( this , arguments ) ) ;
}
_createClass ( _class10 , [ {
key : 'table' ,
value : function table ( _table2 ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
this . _table ( _table2 , alias ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
if ( ! this . _hasTable ( ) ) {
throw new Error ( "table() needs to be called" ) ;
}
return _get ( _class10 . prototype . _ _proto _ _ || Object . getPrototypeOf ( _class10 . prototype ) , '_toParamString' , this ) . call ( this , options ) ;
}
} ] ) ;
return _class10 ;
} ( cls . AbstractTableBlock ) ;
// FROM table
cls . FromTableBlock = function ( _cls$AbstractTableBlo3 ) {
_inherits ( _class11 , _cls$AbstractTableBlo3 ) ;
function _class11 ( options ) {
_classCallCheck ( this , _class11 ) ;
return _possibleConstructorReturn ( this , ( _class11 . _ _proto _ _ || Object . getPrototypeOf ( _class11 ) ) . call ( this , _extend ( { } , options , {
prefix : 'FROM'
} ) ) ) ;
}
_createClass ( _class11 , [ {
key : 'from' ,
value : function from ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
this . _table ( table , alias ) ;
}
} ] ) ;
return _class11 ;
} ( cls . AbstractTableBlock ) ;
// INTO table
cls . IntoTableBlock = function ( _cls$AbstractTableBlo4 ) {
_inherits ( _class12 , _cls$AbstractTableBlo4 ) ;
function _class12 ( options ) {
_classCallCheck ( this , _class12 ) ;
return _possibleConstructorReturn ( this , ( _class12 . _ _proto _ _ || Object . getPrototypeOf ( _class12 ) ) . call ( this , _extend ( { } , options , {
prefix : 'INTO' ,
singleTable : true
} ) ) ) ;
}
_createClass ( _class12 , [ {
key : 'into' ,
value : function into ( table ) {
this . _table ( table ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
if ( ! this . _hasTable ( ) ) {
throw new Error ( "into() needs to be called" ) ;
}
return _get ( _class12 . prototype . _ _proto _ _ || Object . getPrototypeOf ( _class12 . prototype ) , '_toParamString' , this ) . call ( this , options ) ;
}
} ] ) ;
return _class12 ;
} ( cls . AbstractTableBlock ) ;
// (SELECT) Get field
cls . GetFieldBlock = function ( _cls$Block4 ) {
_inherits ( _class13 , _cls$Block4 ) ;
function _class13 ( options ) {
_classCallCheck ( this , _class13 ) ;
var _this14 = _possibleConstructorReturn ( this , ( _class13 . _ _proto _ _ || Object . getPrototypeOf ( _class13 ) ) . call ( this , options ) ) ;
_this14 . _fields = [ ] ;
return _this14 ;
}
/ * *
# Add the given fields to the final result set .
#
# The parameter is an Object containing field names ( or database functions ) as the keys and aliases for the fields
# as the values . If the value for a key is null then no alias is set for that field .
#
# Internally this method simply calls the field ( ) method of this block to add each individual field .
#
# options . ignorePeriodsForFieldNameQuotes - whether to ignore period ( . ) when automatically quoting the field name
* /
_createClass ( _class13 , [ {
key : 'fields' ,
value : function fields ( _fields ) {
var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
if ( _isArray ( _fields ) ) {
var _iteratorNormalCompletion6 = true ;
var _didIteratorError6 = false ;
var _iteratorError6 = undefined ;
try {
for ( var _iterator6 = _fields [ Symbol . iterator ] ( ) , _step6 ; ! ( _iteratorNormalCompletion6 = ( _step6 = _iterator6 . next ( ) ) . done ) ; _iteratorNormalCompletion6 = true ) {
var field = _step6 . value ;
this . field ( field , null , options ) ;
}
} catch ( err ) {
_didIteratorError6 = true ;
_iteratorError6 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion6 && _iterator6 . RETURN ) {
_iterator6 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError6 ) {
throw _iteratorError6 ;
}
}
}
} else {
for ( var _field2 in _fields ) {
var alias = _fields [ _field2 ] ;
this . field ( _field2 , alias , options ) ;
}
}
}
/ * *
# Add the given field to the final result set .
#
# The 'field' parameter does not necessarily have to be a fieldname . It can use database functions too ,
# e . g . DATE _FORMAT ( a . started , "%H" )
#
# An alias may also be specified for this field .
#
# options . ignorePeriodsForFieldNameQuotes - whether to ignore period ( . ) when automatically quoting the field name
* /
} , {
key : 'field' ,
value : function field ( _field ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var options = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : { } ;
alias = alias ? this . _sanitizeFieldAlias ( alias ) : alias ;
_field = this . _sanitizeField ( _field ) ;
// if field-alias combo already present then don't add
var existingField = this . _fields . filter ( function ( f ) {
return f . name === _field && f . alias === alias ;
} ) ;
if ( existingField . length ) {
return this ;
}
this . _fields . push ( {
name : _field ,
alias : alias ,
options : options
} ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var queryBuilder = options . queryBuilder ,
buildParameterized = options . buildParameterized ;
var totalStr = '' ,
totalValues = [ ] ;
var _iteratorNormalCompletion7 = true ;
var _didIteratorError7 = false ;
var _iteratorError7 = undefined ;
try {
for ( var _iterator7 = this . _fields [ Symbol . iterator ] ( ) , _step7 ; ! ( _iteratorNormalCompletion7 = ( _step7 = _iterator7 . next ( ) ) . done ) ; _iteratorNormalCompletion7 = true ) {
var field = _step7 . value ;
totalStr = _pad ( totalStr , ", " ) ;
var name = field . name ,
alias = field . alias ,
_options = field . options ;
if ( typeof name === 'string' ) {
totalStr += this . _formatFieldName ( name , _options ) ;
} else {
var ret = name . _toParamString ( {
nested : true ,
buildParameterized : buildParameterized
} ) ;
totalStr += ret . text ;
ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
}
if ( alias ) {
totalStr += ' AS ' + this . _formatFieldAlias ( alias ) ;
}
}
} catch ( err ) {
_didIteratorError7 = true ;
_iteratorError7 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion7 && _iterator7 . RETURN ) {
_iterator7 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError7 ) {
throw _iteratorError7 ;
}
}
}
if ( ! totalStr . length ) {
// if select query and a table is set then all fields wanted
var fromTableBlock = queryBuilder && queryBuilder . getBlock ( cls . FromTableBlock ) ;
if ( fromTableBlock && fromTableBlock . _hasTable ( ) ) {
totalStr = "*" ;
}
}
return {
text : totalStr ,
values : totalValues
} ;
}
} ] ) ;
return _class13 ;
} ( cls . Block ) ;
// Base class for setting fields to values (used for INSERT and UPDATE queries)
cls . AbstractSetFieldBlock = function ( _cls$Block5 ) {
_inherits ( _class14 , _cls$Block5 ) ;
function _class14 ( options ) {
_classCallCheck ( this , _class14 ) ;
var _this15 = _possibleConstructorReturn ( this , ( _class14 . _ _proto _ _ || Object . getPrototypeOf ( _class14 ) ) . call ( this , options ) ) ;
_this15 . _reset ( ) ;
return _this15 ;
}
_createClass ( _class14 , [ {
key : '_reset' ,
value : function _reset ( ) {
this . _fields = [ ] ;
this . _values = [ [ ] ] ;
this . _valueOptions = [ [ ] ] ;
}
// Update the given field with the given value.
// This will override any previously set value for the given field.
} , {
key : '_set' ,
value : function _set ( field , value ) {
var valueOptions = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : { } ;
if ( this . _values . length > 1 ) {
throw new Error ( "Cannot set multiple rows of fields this way." ) ;
}
if ( typeof value !== 'undefined' ) {
value = this . _sanitizeValue ( value ) ;
}
field = this . _sanitizeField ( field ) ;
// Explicity overwrite existing fields
var index = this . _fields . indexOf ( field ) ;
// if field not defined before
if ( - 1 === index ) {
this . _fields . push ( field ) ;
index = this . _fields . length - 1 ;
}
this . _values [ 0 ] [ index ] = value ;
this . _valueOptions [ 0 ] [ index ] = valueOptions ;
}
// Insert fields based on the key/value pairs in the given object
} , {
key : '_setFields' ,
value : function _setFields ( fields ) {
var valueOptions = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
if ( ( typeof fields === 'undefined' ? 'undefined' : _typeof ( fields ) ) !== 'object' ) {
throw new Error ( "Expected an object but got " + ( typeof fields === 'undefined' ? 'undefined' : _typeof ( fields ) ) ) ;
}
for ( var field in fields ) {
this . _set ( field , fields [ field ] , valueOptions ) ;
}
}
// Insert multiple rows for the given fields. Accepts an array of objects.
// This will override all previously set values for every field.
} , {
key : '_setFieldsRows' ,
value : function _setFieldsRows ( fieldsRows ) {
var valueOptions = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
if ( ! _isArray ( fieldsRows ) ) {
throw new Error ( "Expected an array of objects but got " + ( typeof fieldsRows === 'undefined' ? 'undefined' : _typeof ( fieldsRows ) ) ) ;
}
// Reset the objects stored fields and values
this . _reset ( ) ;
// for each row
for ( var i = 0 ; fieldsRows . length > i ; ++ i ) {
var fieldRow = fieldsRows [ i ] ;
// for each field
for ( var field in fieldRow ) {
var value = fieldRow [ field ] ;
field = this . _sanitizeField ( field ) ;
value = this . _sanitizeValue ( value ) ;
var index = this . _fields . indexOf ( field ) ;
if ( 0 < i && - 1 === index ) {
throw new Error ( 'All fields in subsequent rows must match the fields in the first row' ) ;
}
// Add field only if it hasn't been added before
if ( - 1 === index ) {
this . _fields . push ( field ) ;
index = this . _fields . length - 1 ;
}
// The first value added needs to add the array
if ( ! _isArray ( this . _values [ i ] ) ) {
this . _values [ i ] = [ ] ;
this . _valueOptions [ i ] = [ ] ;
}
this . _values [ i ] [ index ] = value ;
this . _valueOptions [ i ] [ index ] = valueOptions ;
}
}
}
} ] ) ;
return _class14 ;
} ( cls . Block ) ;
// (UPDATE) SET field=value
cls . SetFieldBlock = function ( _cls$AbstractSetField ) {
_inherits ( _class15 , _cls$AbstractSetField ) ;
function _class15 ( ) {
_classCallCheck ( this , _class15 ) ;
return _possibleConstructorReturn ( this , ( _class15 . _ _proto _ _ || Object . getPrototypeOf ( _class15 ) ) . apply ( this , arguments ) ) ;
}
_createClass ( _class15 , [ {
key : 'set' ,
value : function set ( field , value , options ) {
this . _set ( field , value , options ) ;
}
} , {
key : 'setFields' ,
value : function setFields ( fields , valueOptions ) {
this . _setFields ( fields , valueOptions ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var buildParameterized = options . buildParameterized ;
if ( 0 >= this . _fields . length ) {
throw new Error ( "set() needs to be called" ) ;
}
var totalStr = '' ,
totalValues = [ ] ;
for ( var i = 0 ; i < this . _fields . length ; ++ i ) {
totalStr = _pad ( totalStr , ', ' ) ;
var field = this . _formatFieldName ( this . _fields [ i ] ) ;
var value = this . _values [ 0 ] [ i ] ;
// e.g. field can be an expression such as `count = count + 1`
if ( 0 > field . indexOf ( '=' ) ) {
field = field + ' = ' + this . options . parameterCharacter ;
}
var ret = this . _buildString ( field , [ value ] , {
buildParameterized : buildParameterized ,
formattingOptions : this . _valueOptions [ 0 ] [ i ]
} ) ;
totalStr += ret . text ;
ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
}
return {
text : 'SET ' + totalStr ,
values : totalValues
} ;
}
} ] ) ;
return _class15 ;
} ( cls . AbstractSetFieldBlock ) ;
// (INSERT INTO) ... field ... value
cls . InsertFieldValueBlock = function ( _cls$AbstractSetField2 ) {
_inherits ( _class16 , _cls$AbstractSetField2 ) ;
function _class16 ( ) {
_classCallCheck ( this , _class16 ) ;
return _possibleConstructorReturn ( this , ( _class16 . _ _proto _ _ || Object . getPrototypeOf ( _class16 ) ) . apply ( this , arguments ) ) ;
}
_createClass ( _class16 , [ {
key : 'set' ,
value : function set ( field , value ) {
var options = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : { } ;
this . _set ( field , value , options ) ;
}
} , {
key : 'setFields' ,
value : function setFields ( fields , valueOptions ) {
this . _setFields ( fields , valueOptions ) ;
}
} , {
key : 'setFieldsRows' ,
value : function setFieldsRows ( fieldsRows , valueOptions ) {
this . _setFieldsRows ( fieldsRows , valueOptions ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var _this18 = this ;
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var buildParameterized = options . buildParameterized ;
var fieldString = this . _fields . map ( function ( f ) {
return _this18 . _formatFieldName ( f ) ;
} ) . join ( ', ' ) ;
var valueStrings = [ ] ,
totalValues = [ ] ;
for ( var i = 0 ; i < this . _values . length ; ++ i ) {
valueStrings [ i ] = '' ;
for ( var j = 0 ; j < this . _values [ i ] . length ; ++ j ) {
var ret = this . _buildString ( this . options . parameterCharacter , [ this . _values [ i ] [ j ] ] , {
buildParameterized : buildParameterized ,
formattingOptions : this . _valueOptions [ i ] [ j ]
} ) ;
ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
valueStrings [ i ] = _pad ( valueStrings [ i ] , ', ' ) ;
valueStrings [ i ] += ret . text ;
}
}
return {
text : fieldString . length ? '(' + fieldString + ') VALUES (' + valueStrings . join ( '), (' ) + ')' : '' ,
values : totalValues
} ;
}
} ] ) ;
return _class16 ;
} ( cls . AbstractSetFieldBlock ) ;
// (INSERT INTO) ... field ... (SELECT ... FROM ...)
cls . InsertFieldsFromQueryBlock = function ( _cls$Block6 ) {
_inherits ( _class17 , _cls$Block6 ) ;
function _class17 ( options ) {
_classCallCheck ( this , _class17 ) ;
var _this19 = _possibleConstructorReturn ( this , ( _class17 . _ _proto _ _ || Object . getPrototypeOf ( _class17 ) ) . call ( this , options ) ) ;
_this19 . _fields = [ ] ;
_this19 . _query = null ;
return _this19 ;
}
_createClass ( _class17 , [ {
key : 'fromQuery' ,
value : function fromQuery ( fields , selectQuery ) {
var _this20 = this ;
this . _fields = fields . map ( function ( v ) {
return _this20 . _sanitizeField ( v ) ;
} ) ;
this . _query = this . _sanitizeBaseBuilder ( selectQuery ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = '' ,
totalValues = [ ] ;
if ( this . _fields . length && this . _query ) {
var _query$ _toParamString = this . _query . _toParamString ( {
buildParameterized : options . buildParameterized ,
nested : true
} ) ,
text = _query$ _toParamString . text ,
values = _query$ _toParamString . values ;
totalStr = '(' + this . _fields . join ( ', ' ) + ') ' + this . _applyNestingFormatting ( text ) ;
totalValues = values ;
}
return {
text : totalStr ,
values : totalValues
} ;
}
} ] ) ;
return _class17 ;
} ( cls . Block ) ;
// DISTINCT
cls . DistinctBlock = function ( _cls$Block7 ) {
_inherits ( _class18 , _cls$Block7 ) ;
function _class18 ( ) {
_classCallCheck ( this , _class18 ) ;
return _possibleConstructorReturn ( this , ( _class18 . _ _proto _ _ || Object . getPrototypeOf ( _class18 ) ) . apply ( this , arguments ) ) ;
}
_createClass ( _class18 , [ {
key : 'distinct' ,
// Add the DISTINCT keyword to the query.
value : function distinct ( ) {
this . _useDistinct = true ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
return {
text : this . _useDistinct ? "DISTINCT" : "" ,
values : [ ]
} ;
}
} ] ) ;
return _class18 ;
} ( cls . Block ) ;
// GROUP BY
cls . GroupByBlock = function ( _cls$Block8 ) {
_inherits ( _class19 , _cls$Block8 ) ;
function _class19 ( options ) {
_classCallCheck ( this , _class19 ) ;
var _this22 = _possibleConstructorReturn ( this , ( _class19 . _ _proto _ _ || Object . getPrototypeOf ( _class19 ) ) . call ( this , options ) ) ;
_this22 . _groups = [ ] ;
return _this22 ;
}
// Add a GROUP BY transformation for the given field.
_createClass ( _class19 , [ {
key : 'group' ,
value : function group ( field ) {
this . _groups . push ( this . _sanitizeField ( field ) ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
return {
text : this . _groups . length ? 'GROUP BY ' + this . _groups . join ( ', ' ) : '' ,
values : [ ]
} ;
}
} ] ) ;
return _class19 ;
} ( cls . Block ) ;
cls . AbstractVerbSingleValueBlock = function ( _cls$Block9 ) {
_inherits ( _class20 , _cls$Block9 ) ;
/ * *
* @ param options . verb The prefix verb string .
* /
function _class20 ( options ) {
_classCallCheck ( this , _class20 ) ;
var _this23 = _possibleConstructorReturn ( this , ( _class20 . _ _proto _ _ || Object . getPrototypeOf ( _class20 ) ) . call ( this , options ) ) ;
_this23 . _value = null ;
return _this23 ;
}
_createClass ( _class20 , [ {
key : '_setValue' ,
value : function _setValue ( value ) {
this . _value = null !== value ? this . _sanitizeLimitOffset ( value ) : value ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var expr = null !== this . _value ? this . options . verb + ' ' + this . options . parameterCharacter : '' ;
var values = null !== this . _value ? [ this . _value ] : [ ] ;
return this . _buildString ( expr , values , options ) ;
}
} ] ) ;
return _class20 ;
} ( cls . Block ) ;
// OFFSET x
cls . OffsetBlock = function ( _cls$AbstractVerbSing ) {
_inherits ( _class21 , _cls$AbstractVerbSing ) ;
function _class21 ( options ) {
_classCallCheck ( this , _class21 ) ;
return _possibleConstructorReturn ( this , ( _class21 . _ _proto _ _ || Object . getPrototypeOf ( _class21 ) ) . call ( this , _extend ( { } , options , {
verb : 'OFFSET'
} ) ) ) ;
}
/ * *
# Set the OFFSET transformation .
#
# Call this will override the previously set offset for this query . Also note that Passing 0 for 'max' will remove
# the offset .
* /
_createClass ( _class21 , [ {
key : 'offset' ,
value : function offset ( start ) {
this . _setValue ( start ) ;
}
} ] ) ;
return _class21 ;
} ( cls . AbstractVerbSingleValueBlock ) ;
// LIMIT
cls . LimitBlock = function ( _cls$AbstractVerbSing2 ) {
_inherits ( _class22 , _cls$AbstractVerbSing2 ) ;
function _class22 ( options ) {
_classCallCheck ( this , _class22 ) ;
return _possibleConstructorReturn ( this , ( _class22 . _ _proto _ _ || Object . getPrototypeOf ( _class22 ) ) . call ( this , _extend ( { } , options , {
verb : 'LIMIT'
} ) ) ) ;
}
/ * *
# Set the LIMIT transformation .
#
# Call this will override the previously set limit for this query . Also note that Passing ` null ` will remove
# the limit .
* /
_createClass ( _class22 , [ {
key : 'limit' ,
value : function limit ( _limit ) {
this . _setValue ( _limit ) ;
}
} ] ) ;
return _class22 ;
} ( cls . AbstractVerbSingleValueBlock ) ;
// Abstract condition base class
cls . AbstractConditionBlock = function ( _cls$Block10 ) {
_inherits ( _class23 , _cls$Block10 ) ;
/ * *
* @ param { String } options . verb The condition verb .
* /
function _class23 ( options ) {
_classCallCheck ( this , _class23 ) ;
var _this26 = _possibleConstructorReturn ( this , ( _class23 . _ _proto _ _ || Object . getPrototypeOf ( _class23 ) ) . call ( this , options ) ) ;
_this26 . _conditions = [ ] ;
return _this26 ;
}
/ * *
# Add a condition .
#
# When the final query is constructed all the conditions are combined using the intersection ( AND ) operator .
#
# Concrete subclasses should provide a method which calls this
* /
_createClass ( _class23 , [ {
key : '_condition' ,
value : function _condition ( condition ) {
condition = this . _sanitizeExpression ( condition ) ;
for ( var _len6 = arguments . length , values = Array ( _len6 > 1 ? _len6 - 1 : 0 ) , _key6 = 1 ; _key6 < _len6 ; _key6 ++ ) {
values [ _key6 - 1 ] = arguments [ _key6 ] ;
}
this . _conditions . push ( {
expr : condition ,
values : values || [ ]
} ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = [ ] ,
totalValues = [ ] ;
var _iteratorNormalCompletion8 = true ;
var _didIteratorError8 = false ;
var _iteratorError8 = undefined ;
try {
for ( var _iterator8 = this . _conditions [ Symbol . iterator ] ( ) , _step8 ; ! ( _iteratorNormalCompletion8 = ( _step8 = _iterator8 . next ( ) ) . done ) ; _iteratorNormalCompletion8 = true ) {
var _ref4 = _step8 . value ;
var expr = _ref4 . expr ;
var _values2 = _ref4 . values ;
var ret = cls . isSquelBuilder ( expr ) ? expr . _toParamString ( {
buildParameterized : options . buildParameterized
} ) : this . _buildString ( expr , _values2 , {
buildParameterized : options . buildParameterized
} ) ;
if ( ret . text . length ) {
totalStr . push ( ret . text ) ;
}
ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
}
} catch ( err ) {
_didIteratorError8 = true ;
_iteratorError8 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion8 && _iterator8 . RETURN ) {
_iterator8 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError8 ) {
throw _iteratorError8 ;
}
}
}
if ( totalStr . length ) {
totalStr = totalStr . join ( ') AND (' ) ;
}
return {
text : totalStr . length ? this . options . verb + ' (' + totalStr + ')' : '' ,
values : totalValues
} ;
}
} ] ) ;
return _class23 ;
} ( cls . Block ) ;
// WHERE
cls . WhereBlock = function ( _cls$AbstractConditio ) {
_inherits ( _class24 , _cls$AbstractConditio ) ;
function _class24 ( options ) {
_classCallCheck ( this , _class24 ) ;
return _possibleConstructorReturn ( this , ( _class24 . _ _proto _ _ || Object . getPrototypeOf ( _class24 ) ) . call ( this , _extend ( { } , options , {
verb : 'WHERE'
} ) ) ) ;
}
_createClass ( _class24 , [ {
key : 'where' ,
value : function where ( condition ) {
for ( var _len7 = arguments . length , values = Array ( _len7 > 1 ? _len7 - 1 : 0 ) , _key7 = 1 ; _key7 < _len7 ; _key7 ++ ) {
values [ _key7 - 1 ] = arguments [ _key7 ] ;
}
this . _condition . apply ( this , [ condition ] . concat ( values ) ) ;
}
} ] ) ;
return _class24 ;
} ( cls . AbstractConditionBlock ) ;
// HAVING
cls . HavingBlock = function ( _cls$AbstractConditio2 ) {
_inherits ( _class25 , _cls$AbstractConditio2 ) ;
function _class25 ( options ) {
_classCallCheck ( this , _class25 ) ;
return _possibleConstructorReturn ( this , ( _class25 . _ _proto _ _ || Object . getPrototypeOf ( _class25 ) ) . call ( this , _extend ( { } , options , {
verb : 'HAVING'
} ) ) ) ;
}
_createClass ( _class25 , [ {
key : 'having' ,
value : function having ( condition ) {
for ( var _len8 = arguments . length , values = Array ( _len8 > 1 ? _len8 - 1 : 0 ) , _key8 = 1 ; _key8 < _len8 ; _key8 ++ ) {
values [ _key8 - 1 ] = arguments [ _key8 ] ;
}
this . _condition . apply ( this , [ condition ] . concat ( values ) ) ;
}
} ] ) ;
return _class25 ;
} ( cls . AbstractConditionBlock ) ;
// ORDER BY
cls . OrderByBlock = function ( _cls$Block11 ) {
_inherits ( _class26 , _cls$Block11 ) ;
function _class26 ( options ) {
_classCallCheck ( this , _class26 ) ;
var _this29 = _possibleConstructorReturn ( this , ( _class26 . _ _proto _ _ || Object . getPrototypeOf ( _class26 ) ) . call ( this , options ) ) ;
_this29 . _orders = [ ] ;
return _this29 ;
}
/ * *
# Add an ORDER BY transformation for the given field in the given order .
#
# To specify descending order pass false for the 'dir' parameter .
* /
_createClass ( _class26 , [ {
key : 'order' ,
value : function order ( field , dir ) {
field = this . _sanitizeField ( field ) ;
if ( ! ( typeof dir === 'string' ) ) {
if ( dir === undefined ) {
dir = 'ASC' ; // Default to asc
} else if ( dir !== null ) {
dir = dir ? 'ASC' : 'DESC' ; // Convert truthy to asc
}
}
for ( var _len9 = arguments . length , values = Array ( _len9 > 2 ? _len9 - 2 : 0 ) , _key9 = 2 ; _key9 < _len9 ; _key9 ++ ) {
values [ _key9 - 2 ] = arguments [ _key9 ] ;
}
this . _orders . push ( {
field : field ,
dir : dir ,
values : values || [ ]
} ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = '' ,
totalValues = [ ] ;
var _iteratorNormalCompletion9 = true ;
var _didIteratorError9 = false ;
var _iteratorError9 = undefined ;
try {
for ( var _iterator9 = this . _orders [ Symbol . iterator ] ( ) , _step9 ; ! ( _iteratorNormalCompletion9 = ( _step9 = _iterator9 . next ( ) ) . done ) ; _iteratorNormalCompletion9 = true ) {
var _ref5 = _step9 . value ;
var field = _ref5 . field ;
var dir = _ref5 . dir ;
var _values3 = _ref5 . values ;
totalStr = _pad ( totalStr , ', ' ) ;
var ret = this . _buildString ( field , _values3 , {
buildParameterized : options . buildParameterized
} ) ;
totalStr += ret . text , _isArray ( ret . values ) && ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
if ( dir !== null ) {
totalStr += ' ' + dir ;
}
}
} catch ( err ) {
_didIteratorError9 = true ;
_iteratorError9 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion9 && _iterator9 . RETURN ) {
_iterator9 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError9 ) {
throw _iteratorError9 ;
}
}
}
return {
text : totalStr . length ? 'ORDER BY ' + totalStr : '' ,
values : totalValues
} ;
}
} ] ) ;
return _class26 ;
} ( cls . Block ) ;
// JOIN
cls . JoinBlock = function ( _cls$Block12 ) {
_inherits ( _class27 , _cls$Block12 ) ;
function _class27 ( options ) {
_classCallCheck ( this , _class27 ) ;
var _this30 = _possibleConstructorReturn ( this , ( _class27 . _ _proto _ _ || Object . getPrototypeOf ( _class27 ) ) . call ( this , options ) ) ;
_this30 . _joins = [ ] ;
return _this30 ;
}
/ * *
# Add a JOIN with the given table .
#
# 'table' is the name of the table to join with .
#
# 'alias' is an optional alias for the table name .
#
# 'condition' is an optional condition ( containing an SQL expression ) for the JOIN .
#
# 'type' must be either one of INNER , OUTER , LEFT or RIGHT . Default is 'INNER' .
#
* /
_createClass ( _class27 , [ {
key : 'join' ,
value : function join ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var condition = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
var type = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : 'INNER' ;
table = this . _sanitizeTable ( table , true ) ;
alias = alias ? this . _sanitizeTableAlias ( alias ) : alias ;
condition = condition ? this . _sanitizeExpression ( condition ) : condition ;
this . _joins . push ( {
type : type ,
table : table ,
alias : alias ,
condition : condition
} ) ;
}
} , {
key : 'left_join' ,
value : function left _join ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var condition = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
this . join ( table , alias , condition , 'LEFT' ) ;
}
} , {
key : 'right_join' ,
value : function right _join ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var condition = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
this . join ( table , alias , condition , 'RIGHT' ) ;
}
} , {
key : 'outer_join' ,
value : function outer _join ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var condition = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
this . join ( table , alias , condition , 'OUTER' ) ;
}
} , {
key : 'left_outer_join' ,
value : function left _outer _join ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var condition = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
this . join ( table , alias , condition , 'LEFT OUTER' ) ;
}
} , {
key : 'full_join' ,
value : function full _join ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var condition = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
this . join ( table , alias , condition , 'FULL' ) ;
}
} , {
key : 'cross_join' ,
value : function cross _join ( table ) {
var alias = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
var condition = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
this . join ( table , alias , condition , 'CROSS' ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = "" ,
totalValues = [ ] ;
var _iteratorNormalCompletion10 = true ;
var _didIteratorError10 = false ;
var _iteratorError10 = undefined ;
try {
for ( var _iterator10 = this . _joins [ Symbol . iterator ] ( ) , _step10 ; ! ( _iteratorNormalCompletion10 = ( _step10 = _iterator10 . next ( ) ) . done ) ; _iteratorNormalCompletion10 = true ) {
var _ref6 = _step10 . value ;
var type = _ref6 . type ;
var table = _ref6 . table ;
var alias = _ref6 . alias ;
var condition = _ref6 . condition ;
totalStr = _pad ( totalStr , this . options . separator ) ;
var tableStr = void 0 ;
if ( cls . isSquelBuilder ( table ) ) {
var ret = table . _toParamString ( {
buildParameterized : options . buildParameterized ,
nested : true
} ) ;
ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
tableStr = ret . text ;
} else {
tableStr = this . _formatTableName ( table ) ;
}
totalStr += type + ' JOIN ' + tableStr ;
if ( alias ) {
totalStr += ' ' + this . _formatTableAlias ( alias ) ;
}
if ( condition ) {
totalStr += ' ON ' ;
var _ret2 = void 0 ;
if ( cls . isSquelBuilder ( condition ) ) {
_ret2 = condition . _toParamString ( {
buildParameterized : options . buildParameterized
} ) ;
} else {
_ret2 = this . _buildString ( condition , [ ] , {
buildParameterized : options . buildParameterized
} ) ;
}
totalStr += this . _applyNestingFormatting ( _ret2 . text ) ;
_ret2 . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
}
}
} catch ( err ) {
_didIteratorError10 = true ;
_iteratorError10 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion10 && _iterator10 . RETURN ) {
_iterator10 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError10 ) {
throw _iteratorError10 ;
}
}
}
return {
text : totalStr ,
values : totalValues
} ;
}
} ] ) ;
return _class27 ;
} ( cls . Block ) ;
// UNION
cls . UnionBlock = function ( _cls$Block13 ) {
_inherits ( _class28 , _cls$Block13 ) ;
function _class28 ( options ) {
_classCallCheck ( this , _class28 ) ;
var _this31 = _possibleConstructorReturn ( this , ( _class28 . _ _proto _ _ || Object . getPrototypeOf ( _class28 ) ) . call ( this , options ) ) ;
_this31 . _unions = [ ] ;
return _this31 ;
}
/ * *
# Add a UNION with the given table / query .
#
# 'table' is the name of the table or query to union with .
#
# 'type' must be either one of UNION or UNION ALL ... . Default is 'UNION' .
* /
_createClass ( _class28 , [ {
key : 'union' ,
value : function union ( table ) {
var type = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 'UNION' ;
table = this . _sanitizeTable ( table ) ;
this . _unions . push ( {
type : type ,
table : table
} ) ;
}
// Add a UNION ALL with the given table/query.
} , {
key : 'union_all' ,
value : function union _all ( table ) {
this . union ( table , 'UNION ALL' ) ;
}
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var totalStr = '' ,
totalValues = [ ] ;
var _iteratorNormalCompletion11 = true ;
var _didIteratorError11 = false ;
var _iteratorError11 = undefined ;
try {
for ( var _iterator11 = this . _unions [ Symbol . iterator ] ( ) , _step11 ; ! ( _iteratorNormalCompletion11 = ( _step11 = _iterator11 . next ( ) ) . done ) ; _iteratorNormalCompletion11 = true ) {
var _ref7 = _step11 . value ;
var type = _ref7 . type ;
var table = _ref7 . table ;
totalStr = _pad ( totalStr , this . options . separator ) ;
var tableStr = void 0 ;
if ( table instanceof cls . BaseBuilder ) {
var ret = table . _toParamString ( {
buildParameterized : options . buildParameterized ,
nested : true
} ) ;
tableStr = ret . text ;
ret . values . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
} else {
totalStr = this . _formatTableName ( table ) ;
}
totalStr += type + ' ' + tableStr ;
}
} catch ( err ) {
_didIteratorError11 = true ;
_iteratorError11 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion11 && _iterator11 . RETURN ) {
_iterator11 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError11 ) {
throw _iteratorError11 ;
}
}
}
return {
text : totalStr ,
values : totalValues
} ;
}
} ] ) ;
return _class28 ;
} ( cls . Block ) ;
/ *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# Query builders
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
/ * *
# Query builder base class
#
# Note that the query builder does not check the final query string for correctness .
#
# All the build methods in this object return the object instance for chained method calling purposes .
* /
cls . QueryBuilder = function ( _cls$BaseBuilder4 ) {
_inherits ( _class29 , _cls$BaseBuilder4 ) ;
/ * *
# Constructor
#
# blocks - array of cls . BaseBuilderBlock instances to build the query with .
* /
function _class29 ( options , blocks ) {
_classCallCheck ( this , _class29 ) ;
var _this32 = _possibleConstructorReturn ( this , ( _class29 . _ _proto _ _ || Object . getPrototypeOf ( _class29 ) ) . call ( this , options ) ) ;
_this32 . blocks = blocks || [ ] ;
// Copy exposed methods into myself
var _iteratorNormalCompletion12 = true ;
var _didIteratorError12 = false ;
var _iteratorError12 = undefined ;
try {
for ( var _iterator12 = _this32 . blocks [ Symbol . iterator ] ( ) , _step12 ; ! ( _iteratorNormalCompletion12 = ( _step12 = _iterator12 . next ( ) ) . done ) ; _iteratorNormalCompletion12 = true ) {
var block = _step12 . value ;
var exposedMethods = block . exposedMethods ( ) ;
for ( var methodName in exposedMethods ) {
var methodBody = exposedMethods [ methodName ] ;
if ( undefined !== _this32 [ methodName ] ) {
throw new Error ( 'Builder already has a builder method called: ' + methodName ) ;
}
( function ( block , name , body ) {
_this32 [ name ] = function ( ) {
for ( var _len10 = arguments . length , args = Array ( _len10 ) , _key10 = 0 ; _key10 < _len10 ; _key10 ++ ) {
args [ _key10 ] = arguments [ _key10 ] ;
}
body . call . apply ( body , [ block ] . concat ( args ) ) ;
return _this32 ;
} ;
} ) ( block , methodName , methodBody ) ;
}
}
} catch ( err ) {
_didIteratorError12 = true ;
_iteratorError12 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion12 && _iterator12 . RETURN ) {
_iterator12 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError12 ) {
throw _iteratorError12 ;
}
}
}
return _this32 ;
}
/ * *
# Register a custom value handler for this query builder and all its contained blocks .
#
# Note : This will override any globally registered handler for this value type .
* /
_createClass ( _class29 , [ {
key : 'registerValueHandler' ,
value : function registerValueHandler ( type , handler ) {
var _iteratorNormalCompletion13 = true ;
var _didIteratorError13 = false ;
var _iteratorError13 = undefined ;
try {
for ( var _iterator13 = this . blocks [ Symbol . iterator ] ( ) , _step13 ; ! ( _iteratorNormalCompletion13 = ( _step13 = _iterator13 . next ( ) ) . done ) ; _iteratorNormalCompletion13 = true ) {
var block = _step13 . value ;
block . registerValueHandler ( type , handler ) ;
}
} catch ( err ) {
_didIteratorError13 = true ;
_iteratorError13 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion13 && _iterator13 . RETURN ) {
_iterator13 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError13 ) {
throw _iteratorError13 ;
}
}
}
_get ( _class29 . prototype . _ _proto _ _ || Object . getPrototypeOf ( _class29 . prototype ) , 'registerValueHandler' , this ) . call ( this , type , handler ) ;
return this ;
}
/ * *
# Update query builder options
#
# This will update the options for all blocks too . Use this method with caution as it allows you to change the
# behaviour of your query builder mid - build .
* /
} , {
key : 'updateOptions' ,
value : function updateOptions ( options ) {
this . options = _extend ( { } , this . options , options ) ;
var _iteratorNormalCompletion14 = true ;
var _didIteratorError14 = false ;
var _iteratorError14 = undefined ;
try {
for ( var _iterator14 = this . blocks [ Symbol . iterator ] ( ) , _step14 ; ! ( _iteratorNormalCompletion14 = ( _step14 = _iterator14 . next ( ) ) . done ) ; _iteratorNormalCompletion14 = true ) {
var block = _step14 . value ;
block . options = _extend ( { } , block . options , options ) ;
}
} catch ( err ) {
_didIteratorError14 = true ;
_iteratorError14 = err ;
} finally {
try {
if ( ! _iteratorNormalCompletion14 && _iterator14 . RETURN ) {
_iterator14 . RETURN ( ) ;
}
} finally {
if ( _didIteratorError14 ) {
throw _iteratorError14 ;
}
}
}
}
// Get the final fully constructed query param obj.
} , {
key : '_toParamString' ,
value : function _toParamString ( ) {
var _this33 = this ;
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
options = _extend ( { } , this . options , options ) ;
var blockResults = this . blocks . map ( function ( b ) {
return b . _toParamString ( {
buildParameterized : options . buildParameterized ,
queryBuilder : _this33
} ) ;
} ) ;
var blockTexts = blockResults . map ( function ( b ) {
return b . text ;
} ) ;
var blockValues = blockResults . map ( function ( b ) {
return b . values ;
} ) ;
var totalStr = blockTexts . filter ( function ( v ) {
return 0 < v . length ;
} ) . join ( options . separator ) ;
var totalValues = [ ] ;
blockValues . forEach ( function ( block ) {
return block . forEach ( function ( value ) {
return totalValues . push ( value ) ;
} ) ;
} ) ;
if ( ! options . nested ) {
if ( options . numberedParameters ) {
var i = undefined !== options . numberedParametersStartAt ? options . numberedParametersStartAt : 1 ;
// construct regex for searching
var regex = options . parameterCharacter . replace ( /[-[\]{}()*+?.,\\^$|#\s]/g , "\\$&" ) ;
totalStr = totalStr . replace ( new RegExp ( regex , 'g' ) , function ( ) {
return '' + options . numberedParametersPrefix + i ++ ;
} ) ;
}
}
return {
text : this . _applyNestingFormatting ( totalStr , ! ! options . nested ) ,
values : totalValues
} ;
}
// Deep clone
} , {
key : 'clone' ,
value : function clone ( ) {
var blockClones = this . blocks . map ( function ( v ) {
return v . clone ( ) ;
} ) ;
return new this . constructor ( this . options , blockClones ) ;
}
// Get a specific block
} , {
key : 'getBlock' ,
value : function getBlock ( blockType ) {
var filtered = this . blocks . filter ( function ( b ) {
return b instanceof blockType ;
} ) ;
return filtered [ 0 ] ;
}
} ] ) ;
return _class29 ;
} ( cls . BaseBuilder ) ;
// SELECT query builder.
cls . Select = function ( _cls$QueryBuilder ) {
_inherits ( _class30 , _cls$QueryBuilder ) ;
function _class30 ( options ) {
var blocks = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
_classCallCheck ( this , _class30 ) ;
blocks = blocks || [ new cls . StringBlock ( options , 'SELECT' ) , new cls . FunctionBlock ( options ) , new cls . DistinctBlock ( options ) , new cls . GetFieldBlock ( options ) , new cls . FromTableBlock ( options ) , new cls . JoinBlock ( options ) , new cls . WhereBlock ( options ) , new cls . GroupByBlock ( options ) , new cls . HavingBlock ( options ) , new cls . OrderByBlock ( options ) , new cls . LimitBlock ( options ) , new cls . OffsetBlock ( options ) , new cls . UnionBlock ( options ) ] ;
return _possibleConstructorReturn ( this , ( _class30 . _ _proto _ _ || Object . getPrototypeOf ( _class30 ) ) . call ( this , options , blocks ) ) ;
}
return _class30 ;
} ( cls . QueryBuilder ) ;
// UPDATE query builder.
cls . Update = function ( _cls$QueryBuilder2 ) {
_inherits ( _class31 , _cls$QueryBuilder2 ) ;
function _class31 ( options ) {
var blocks = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
_classCallCheck ( this , _class31 ) ;
blocks = blocks || [ new cls . StringBlock ( options , 'UPDATE' ) , new cls . UpdateTableBlock ( options ) , new cls . SetFieldBlock ( options ) , new cls . WhereBlock ( options ) , new cls . OrderByBlock ( options ) , new cls . LimitBlock ( options ) ] ;
return _possibleConstructorReturn ( this , ( _class31 . _ _proto _ _ || Object . getPrototypeOf ( _class31 ) ) . call ( this , options , blocks ) ) ;
}
return _class31 ;
} ( cls . QueryBuilder ) ;
// DELETE query builder.
cls . Delete = function ( _cls$QueryBuilder3 ) {
_inherits ( _class32 , _cls$QueryBuilder3 ) ;
function _class32 ( options ) {
var blocks = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
_classCallCheck ( this , _class32 ) ;
blocks = blocks || [ new cls . StringBlock ( options , 'DELETE' ) , new cls . TargetTableBlock ( options ) , new cls . FromTableBlock ( _extend ( { } , options , {
singleTable : true
} ) ) , new cls . JoinBlock ( options ) , new cls . WhereBlock ( options ) , new cls . OrderByBlock ( options ) , new cls . LimitBlock ( options ) ] ;
return _possibleConstructorReturn ( this , ( _class32 . _ _proto _ _ || Object . getPrototypeOf ( _class32 ) ) . call ( this , options , blocks ) ) ;
}
return _class32 ;
} ( cls . QueryBuilder ) ;
// An INSERT query builder.
cls . Insert = function ( _cls$QueryBuilder4 ) {
_inherits ( _class33 , _cls$QueryBuilder4 ) ;
function _class33 ( options ) {
var blocks = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : null ;
_classCallCheck ( this , _class33 ) ;
blocks = blocks || [ new cls . StringBlock ( options , 'INSERT' ) , new cls . IntoTableBlock ( options ) , new cls . InsertFieldValueBlock ( options ) , new cls . InsertFieldsFromQueryBlock ( options ) ] ;
return _possibleConstructorReturn ( this , ( _class33 . _ _proto _ _ || Object . getPrototypeOf ( _class33 ) ) . call ( this , options , blocks ) ) ;
}
return _class33 ;
} ( cls . QueryBuilder ) ;
var _squel = {
VERSION : '5.13.1' ,
flavour : flavour ,
expr : function expr ( options ) {
return new cls . Expression ( options ) ;
} ,
_case : function _case ( name , options ) {
return new cls . Case ( name , options ) ;
} ,
select : function select ( options , blocks ) {
return new cls . Select ( options , blocks ) ;
} ,
update : function update ( options , blocks ) {
return new cls . Update ( options , blocks ) ;
} ,
insert : function insert ( options , blocks ) {
return new cls . Insert ( options , blocks ) ;
} ,
_delete : function _delete ( options , blocks ) {
return new cls . Delete ( options , blocks ) ;
} ,
str : function str ( ) {
var inst = new cls . FunctionBlock ( ) ;
2021-04-24 23:26:51 +00:00
inst [ 'function' ] . apply ( inst , arguments ) ;
2021-04-24 20:32:31 +00:00
return inst ;
} ,
rstr : function rstr ( ) {
var inst = new cls . FunctionBlock ( {
rawNesting : true
} ) ;
2021-04-24 23:26:51 +00:00
inst [ 'function' ] . apply ( inst , arguments ) ;
2021-04-24 20:32:31 +00:00
return inst ;
} ,
registerValueHandler : cls . registerValueHandler
} ;
// aliases
_squel . remove = _squel . _delete ;
// classes
_squel . cls = cls ;
return _squel ;
}
/ * *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# Exported instance ( and for use by flavour definitions further down ) .
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
var squel = _buildSquel ( ) ;
/ * *
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# Squel SQL flavours
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
* /
// Available flavours
squel . flavours = { } ;
// Setup Squel for a particular SQL flavour
squel . useFlavour = function ( ) {
var flavour = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : null ;
if ( ! flavour ) {
return squel ;
}
if ( squel . flavours [ flavour ] instanceof Function ) {
var s = _buildSquel ( flavour ) ;
squel . flavours [ flavour ] . call ( null , s ) ;
// add in flavour methods
s . flavours = squel . flavours ;
s . useFlavour = squel . useFlavour ;
return s ;
} else {
throw new Error ( 'Flavour not available: ' + flavour ) ;
}
} ;
return squel ;
} ) ) ;