compiler.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _isUndefined2 = require('lodash/isUndefined');
  4. var _isUndefined3 = _interopRequireDefault(_isUndefined2);
  5. var _assign2 = require('lodash/assign');
  6. var _assign3 = _interopRequireDefault(_assign2);
  7. var _helpers = require('./helpers');
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. // The "SchemaCompiler" takes all of the query statements which have been
  10. // gathered in the "SchemaBuilder" and turns them into an array of
  11. // properly formatted / bound query strings.
  12. function SchemaCompiler(client, builder) {
  13. this.builder = builder;
  14. this.client = client;
  15. this.schema = builder._schema;
  16. this.formatter = client.formatter(builder);
  17. this.sequence = [];
  18. }
  19. (0, _assign3.default)(SchemaCompiler.prototype, {
  20. pushQuery: _helpers.pushQuery,
  21. pushAdditional: _helpers.pushAdditional,
  22. createTable: buildTable('create'),
  23. createTableIfNotExists: buildTable('createIfNot'),
  24. alterTable: buildTable('alter'),
  25. dropTablePrefix: 'drop table ',
  26. dropTable: function dropTable(tableName) {
  27. this.pushQuery(this.dropTablePrefix + this.formatter.wrap(prefixedTableName(this.schema, tableName)));
  28. },
  29. dropTableIfExists: function dropTableIfExists(tableName) {
  30. this.pushQuery(this.dropTablePrefix + 'if exists ' + this.formatter.wrap(prefixedTableName(this.schema, tableName)));
  31. },
  32. raw: function raw(sql, bindings) {
  33. this.sequence.push(this.client.raw(sql, bindings).toSQL());
  34. },
  35. toSQL: function toSQL() {
  36. var sequence = this.builder._sequence;
  37. for (var i = 0, l = sequence.length; i < l; i++) {
  38. var query = sequence[i];
  39. this[query.method].apply(this, query.args);
  40. }
  41. return this.sequence;
  42. }
  43. });
  44. function buildTable(type) {
  45. return function (tableName, fn) {
  46. var builder = this.client.tableBuilder(type, tableName, fn);
  47. // pass queryContext down to tableBuilder but do not overwrite it if already set
  48. var queryContext = this.builder.queryContext();
  49. if (!(0, _isUndefined3.default)(queryContext) && (0, _isUndefined3.default)(builder.queryContext())) {
  50. builder.queryContext(queryContext);
  51. }
  52. builder.setSchema(this.schema);
  53. var sql = builder.toSQL();
  54. for (var i = 0, l = sql.length; i < l; i++) {
  55. this.sequence.push(sql[i]);
  56. }
  57. };
  58. }
  59. function prefixedTableName(prefix, table) {
  60. return prefix ? prefix + '.' + table : table;
  61. }
  62. exports.default = SchemaCompiler;
  63. module.exports = exports['default'];