diff --git a/lib/functions.js b/lib/functions.js index 8186161a..e906ac38 100644 --- a/lib/functions.js +++ b/lib/functions.js @@ -14,7 +14,7 @@ var getFunctionCallCreator = function(name, sql) { }; // creates a hash of functions for a sql instance -var getFunctions = function(functionNames, sql) { +var _getFunctions = function(functionNames, sql) { var functions = _.reduce(functionNames, function(reducer, name) { reducer[name] = getFunctionCallCreator(name, sql); return reducer; @@ -52,9 +52,18 @@ var hstoreFunction = 'HSTORE'; var standardFunctionNames = aggregateFunctions.concat(scalarFunctions).concat(hstoreFunction); -// creates a hash of standard functions for a sql instance var getStandardFunctions = function(sql) { - return getFunctions(standardFunctionNames, sql); + return _getFunctions(standardFunctionNames, sql); +} + +var getFunctions = function(sql, functionNames) { + var functions = _getFunctions(standardFunctionNames, sql); + if (functionNames !== undefined) { + var customFunctions = _getFunctions(functionNames, sql); + return _.merge(functions, customFunctions); + } + return functions; }; +module.exports.getFunctions = getFunctions; module.exports.getStandardFunctions = getStandardFunctions; diff --git a/lib/index.js b/lib/index.js index 75d1c2e7..adf90011 100644 --- a/lib/index.js +++ b/lib/index.js @@ -60,6 +60,15 @@ Sql.prototype.setDialect = function(dialect) { return this; }; +Sql.prototype.registerFunctions = function(_functions) { + if ( ! _functions instanceof Array) { + _functions = [_functions]; + } + // attach the standard SQL functions to this instance + this.functions = functions.getFunctions(this, _functions); + return this +} + // back compat shim for the Sql class constructor var create = function(dialect) { return new Sql(dialect);