@graffy/pg 0.15.6-alpha.1 → 0.15.8-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,76 +11,54 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
11
11
  exports.__esModule = true;
12
12
  exports.default = getArgSql;
13
13
 
14
- var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutPropertiesLoose"));
15
-
16
14
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/taggedTemplateLiteralLoose"));
17
15
 
18
- var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
16
+ var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
19
17
 
20
18
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
21
19
 
22
- var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
20
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
23
21
 
24
- var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
22
+ var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
25
23
 
26
- var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
24
+ var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
27
25
 
28
26
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
29
27
 
28
+ var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
29
+
30
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutPropertiesLoose"));
31
+
30
32
  var _sqlTemplateTag = _interopRequireWildcard(require("sql-template-tag"));
31
33
 
32
34
  var _common = require("@graffy/common");
33
35
 
34
36
  var _index = require("../filter/index.js");
35
37
 
36
- var _excluded = ["$first", "$last", "$after", "$before", "$since", "$until", "$cursor"],
37
- _excluded2 = ["$order"];
38
-
39
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17;
38
+ var _getMeta = require("./getMeta");
40
39
 
41
- function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
42
-
43
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
40
+ var _clauses = require("./clauses.js");
44
41
 
45
- function getBoundCond(orderCols, bound, kind) {
46
- if (!(0, _isArray.default)(bound)) {
47
- throw Error('bad_query bound:' + (0, _stringify.default)(bound));
48
- }
42
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15;
49
43
 
50
- var lhs = orderCols[0];
51
- var rhs = bound[0];
52
-
53
- if (orderCols.length > 1 && bound.length > 1) {
54
- var subCond = getBoundCond((0, _slice.default)(orderCols).call(orderCols, 1), (0, _slice.default)(bound).call(bound, 1), kind);
55
-
56
- switch (kind) {
57
- case '$after':
58
- case '$since':
59
- return (0, _sqlTemplateTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["", " > ", " OR ", " = ", " AND (", ")"])), lhs, rhs, lhs, rhs, subCond);
44
+ var _excluded = ["$first", "$last", "$after", "$before", "$since", "$until", "$all", "$cursor"],
45
+ _excluded2 = ["$order"];
60
46
 
61
- case '$before':
62
- case '$until':
63
- return (0, _sqlTemplateTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["", " < ", " OR ", " = ", " AND (", ")"])), lhs, rhs, lhs, rhs, subCond);
64
- }
65
- } else {
66
- switch (kind) {
67
- case '$after':
68
- return (0, _sqlTemplateTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["", " > ", ""])), lhs, rhs);
47
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
69
48
 
70
- case '$since':
71
- return (0, _sqlTemplateTag.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["", " >= ", ""])), lhs, rhs);
49
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
72
50
 
73
- case '$before':
74
- return (0, _sqlTemplateTag.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["", " < ", ""])), lhs, rhs);
51
+ /**
52
+ Uses the args object (typically passed in the $key attribute)
75
53
 
76
- case '$until':
77
- return (0, _sqlTemplateTag.default)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteralLoose2.default)(["", " <= ", ""])), lhs, rhs);
78
- }
79
- }
80
- }
54
+ @param {object} args
55
+ @param {object} options
81
56
 
57
+ @typedef { import('sql-template-tag').Sql } Sql
58
+ @return {{ meta: Sql, where: Sql[], order?: Sql, limit: number }}
59
+ */
82
60
  function getArgSql(_ref, options) {
83
- var _context2, _context3;
61
+ var _context, _context2, _context3;
84
62
 
85
63
  var $first = _ref.$first,
86
64
  $last = _ref.$last,
@@ -88,73 +66,109 @@ function getArgSql(_ref, options) {
88
66
  $before = _ref.$before,
89
67
  $since = _ref.$since,
90
68
  $until = _ref.$until,
69
+ $all = _ref.$all,
91
70
  _ = _ref.$cursor,
92
71
  rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
93
72
  var $order = rest.$order,
94
73
  filter = (0, _objectWithoutPropertiesLoose2.default)(rest, _excluded2);
95
- var args = options.args,
96
- prefix = options.prefix;
97
-
98
- var lookupExpr = function lookupExpr(prefix, suffix) {
99
- var _context;
100
-
101
- if (suffix === void 0) {
102
- suffix = [];
103
- }
104
-
105
- var _args$prefix = args[prefix],
106
- role = _args$prefix.role,
107
- name = _args$prefix.name;
108
- return role === 'gin' ? (0, _sqlTemplateTag.default)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\" #>> '{\"", "\"}'"])), (0, _sqlTemplateTag.raw)(name), (0, _concat.default)(_context = [prefix]).call(_context, suffix).join('","')) : suffix.length ? (0, _sqlTemplateTag.default)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\" #>> '{\"", "\"}'"])), (0, _sqlTemplateTag.raw)(name), suffix.join('","')) : (0, _sqlTemplateTag.default)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\""])), (0, _sqlTemplateTag.raw)(name));
109
- };
74
+ var prefix = options.prefix,
75
+ idCol = options.idCol;
110
76
 
111
77
  var lookup = function lookup(prop) {
112
- // Fast path for the direct arg lookup case.
113
- if (args[prop]) return lookupExpr(prop);
114
- var propArray = (0, _common.encodePath)(prop);
115
- var suffix = [];
116
-
117
- while (propArray.length) {
118
- suffix.unshift(propArray.pop());
119
- var propPrefix = propArray.join('.');
120
- if (args[propPrefix]) return lookupExpr(propPrefix, suffix);
121
- }
78
+ var _encodePath = (0, _common.encodePath)(prop),
79
+ prefix = _encodePath[0],
80
+ suffix = (0, _slice.default)(_encodePath).call(_encodePath, 1);
122
81
 
123
- throw Error('pg.unknown_arg:' + prop);
82
+ return suffix.length ? (0, _sqlTemplateTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\" #>> '{\"", "\"}'"])), (0, _sqlTemplateTag.raw)(prefix), suffix.join('","')) : (0, _sqlTemplateTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\""])), (0, _sqlTemplateTag.raw)(prefix));
124
83
  };
125
84
 
126
- var attrs = function attrs(key) {
127
- return (0, _sqlTemplateTag.default)(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteralLoose2.default)(["jsonb_build_object(\n '$key', ", ",\n '$ref', array[", ", \"", "\"],\n '$ver', now()\n )"])), key, (0, _sqlTemplateTag.join)(prefix), (0, _sqlTemplateTag.raw)(options.idCol));
85
+ var meta = function meta(key) {
86
+ return (0, _getMeta.getArgMeta)(key, prefix, idCol);
128
87
  };
129
88
 
130
- var hasRangeArg = $before || $after || $since || $until || $first || $last || $order;
89
+ var hasRangeArg = $before || $after || $since || $until || $first || $last || $all || $order;
131
90
  var key;
132
91
  var where = [];
133
92
 
134
93
  if (!(0, _common.isEmpty)(filter)) {
135
94
  where.push((0, _index.getFilterSql)(filter, lookup));
136
- key = (0, _sqlTemplateTag.default)(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteralLoose2.default)(["", "::jsonb"])), (0, _stringify.default)(filter));
95
+ key = (0, _sqlTemplateTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["", "::jsonb"])), (0, _stringify.default)(filter));
137
96
  }
138
97
 
139
98
  if (!hasRangeArg) return {
140
- attrs: attrs(key),
99
+ meta: meta(key),
141
100
  where: where,
142
101
  limit: 1
143
102
  };
144
- var orderCols = (0, _map.default)(_context2 = $order || [options.idCol]).call(_context2, lookup);
145
- if ($after) where.push(getBoundCond(orderCols, $after, '$after'));
146
- if ($before) where.push(getBoundCond(orderCols, $before, '$before'));
147
- if ($since) where.push(getBoundCond(orderCols, $since, '$since'));
148
- if ($until) where.push(getBoundCond(orderCols, $until, '$until'));
149
- key = (0, _sqlTemplateTag.default)(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteralLoose2.default)(["(", ")"])), (0, _sqlTemplateTag.join)((0, _filter.default)(_context3 = [key, $order && (0, _sqlTemplateTag.default)(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteralLoose2.default)(["jsonb_build_object('$order', jsonb_build_array(", "))"])), (0, _sqlTemplateTag.join)($order)), (0, _sqlTemplateTag.default)(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteralLoose2.default)(["jsonb_build_object('$cursor', jsonb_build_array(", "))"])), (0, _sqlTemplateTag.join)(orderCols))]).call(_context3, Boolean), " || "));
103
+
104
+ if ((0, _common.isEmpty)(rest)) {
105
+ // TODO: Allow these.
106
+ throw Error('pg_arg.pagination_only_unsupported in ' + prefix);
107
+ }
108
+
109
+ var orderCols = (0, _map.default)(_context = $order || [idCol]).call(_context, lookup);
110
+ (0, _forEach.default)(_context2 = (0, _entries.default)({
111
+ $after: $after,
112
+ $before: $before,
113
+ $since: $since,
114
+ $until: $until
115
+ })).call(_context2, function (_ref2) {
116
+ var name = _ref2[0],
117
+ value = _ref2[1];
118
+ if (value) where.push(getBoundCond(orderCols, value, name));
119
+ });
120
+ var orderQuery = $order && (0, _clauses.getJsonBuildObject)({
121
+ $order: (0, _sqlTemplateTag.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["", "::jsonb"])), (0, _stringify.default)($order))
122
+ });
123
+ var cursorQuery = (0, _clauses.getJsonBuildObject)({
124
+ $cursor: (0, _sqlTemplateTag.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["jsonb_build_array(", ")"])), (0, _sqlTemplateTag.join)(orderCols))
125
+ });
126
+ key = (0, _sqlTemplateTag.default)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteralLoose2.default)(["(", ")"])), (0, _sqlTemplateTag.join)((0, _filter.default)(_context3 = [key, orderQuery, cursorQuery]).call(_context3, Boolean), " || "));
150
127
  return {
151
- attrs: attrs(key),
128
+ meta: meta(key),
152
129
  where: where,
153
130
  order: (0, _sqlTemplateTag.join)((0, _map.default)(orderCols).call(orderCols, function (col) {
154
- return (0, _sqlTemplateTag.default)(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteralLoose2.default)(["", " ", ""])), col, $last ? (0, _sqlTemplateTag.default)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteralLoose2.default)(["DESC"]))) : (0, _sqlTemplateTag.default)(_templateObject17 || (_templateObject17 = (0, _taggedTemplateLiteralLoose2.default)(["ASC"]))));
131
+ return (0, _sqlTemplateTag.default)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteralLoose2.default)(["", " ", ""])), col, $last ? (0, _sqlTemplateTag.default)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteralLoose2.default)(["DESC"]))) : (0, _sqlTemplateTag.default)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteralLoose2.default)(["ASC"]))));
155
132
  }), ", "),
156
133
  limit: $first || $last
157
134
  };
158
135
  }
159
136
 
137
+ function getBoundCond(orderCols, bound, kind) {
138
+ if (!(0, _isArray.default)(bound)) {
139
+ throw Error('pg_arg.bad_query bound : ' + (0, _stringify.default)(bound));
140
+ }
141
+
142
+ var lhs = orderCols[0];
143
+ var rhs = bound[0];
144
+
145
+ if (orderCols.length > 1 && bound.length > 1) {
146
+ var subCond = getBoundCond((0, _slice.default)(orderCols).call(orderCols, 1), (0, _slice.default)(bound).call(bound, 1), kind);
147
+
148
+ switch (kind) {
149
+ case '$after':
150
+ case '$since':
151
+ return (0, _sqlTemplateTag.default)(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteralLoose2.default)(["", " > ", " OR ", " = ", " AND (", ")"])), lhs, rhs, lhs, rhs, subCond);
152
+
153
+ case '$before':
154
+ case '$until':
155
+ return (0, _sqlTemplateTag.default)(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteralLoose2.default)(["", " < ", " OR ", " = ", " AND (", ")"])), lhs, rhs, lhs, rhs, subCond);
156
+ }
157
+ } else {
158
+ switch (kind) {
159
+ case '$after':
160
+ return (0, _sqlTemplateTag.default)(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteralLoose2.default)(["", " > ", ""])), lhs, rhs);
161
+
162
+ case '$since':
163
+ return (0, _sqlTemplateTag.default)(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteralLoose2.default)(["", " >= ", ""])), lhs, rhs);
164
+
165
+ case '$before':
166
+ return (0, _sqlTemplateTag.default)(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteralLoose2.default)(["", " < ", ""])), lhs, rhs);
167
+
168
+ case '$until':
169
+ return (0, _sqlTemplateTag.default)(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteralLoose2.default)(["", " <= ", ""])), lhs, rhs);
170
+ }
171
+ }
172
+ }
173
+
160
174
  module.exports = exports.default;
@@ -9,22 +9,40 @@ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-s
9
9
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
10
10
 
11
11
  exports.__esModule = true;
12
- exports.default = void 0;
12
+ exports.getArgMeta = exports.getIdMeta = void 0;
13
+
14
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
13
15
 
14
16
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/taggedTemplateLiteralLoose"));
15
17
 
16
18
  var _sqlTemplateTag = _interopRequireWildcard(require("sql-template-tag"));
17
19
 
18
- var _templateObject;
20
+ var _clauses = require("./clauses");
21
+
22
+ var _templateObject, _templateObject2, _templateObject3;
19
23
 
20
24
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
25
 
22
26
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
27
 
24
- var _default = function _default(_ref) {
28
+ var getIdMeta = function getIdMeta(_ref) {
25
29
  var idCol = _ref.idCol;
26
- return (0, _sqlTemplateTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["jsonb_build_object('$key', \"", "\", '$ver', now())"])), (0, _sqlTemplateTag.raw)(idCol));
30
+ return (0, _clauses.getJsonBuildObject)({
31
+ $key: (0, _sqlTemplateTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\""])), (0, _sqlTemplateTag.raw)(idCol)),
32
+ $ver: _clauses.nowTimestamp
33
+ });
34
+ };
35
+
36
+ exports.getIdMeta = getIdMeta;
37
+
38
+ var getArgMeta = function getArgMeta(key, prefix, idCol) {
39
+ return (0, _clauses.getJsonBuildObject)({
40
+ $key: key,
41
+ $ref: (0, _sqlTemplateTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["jsonb_build_array(", ", \"", "\")"])), (0, _sqlTemplateTag.join)((0, _map.default)(prefix).call(prefix, function (k) {
42
+ return (0, _sqlTemplateTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["", "::text"])), k);
43
+ })), (0, _sqlTemplateTag.raw)(idCol)),
44
+ $ver: _clauses.nowTimestamp
45
+ });
27
46
  };
28
47
 
29
- exports.default = _default;
30
- module.exports = exports.default;
48
+ exports.getArgMeta = getArgMeta;
package/cjs/sql/select.js CHANGED
@@ -11,7 +11,6 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
11
11
  exports.__esModule = true;
12
12
  exports.selectByArgs = selectByArgs;
13
13
  exports.selectByIds = selectByIds;
14
- exports.selectUpdatedSince = selectUpdatedSince;
15
14
 
16
15
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/taggedTemplateLiteralLoose"));
17
16
 
@@ -19,47 +18,33 @@ var _sqlTemplateTag = _interopRequireWildcard(require("sql-template-tag"));
19
18
 
20
19
  var _getArgSql2 = _interopRequireDefault(require("./getArgSql.js"));
21
20
 
22
- var _getIdMeta = _interopRequireDefault(require("./getIdMeta.js"));
21
+ var _getMeta = require("./getMeta.js");
23
22
 
24
- var _getSelectCols = _interopRequireDefault(require("./getSelectCols.js"));
23
+ var _clauses = require("./clauses.js");
25
24
 
26
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
25
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
27
26
 
28
27
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
28
 
30
29
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
30
 
32
- // import debug from 'debug';
33
- // const log = debug('graffy:pg:select');
34
31
  var MAX_LIMIT = 4096;
35
32
 
36
- function selectByArgs(args, options, _temp) {
37
- var _ref = _temp === void 0 ? {} : _temp,
38
- forUpdate = _ref.forUpdate;
39
-
33
+ function selectByArgs(args, options) {
40
34
  var table = options.table;
41
35
 
42
36
  var _getArgSql = (0, _getArgSql2.default)(args, options),
43
37
  where = _getArgSql.where,
44
38
  order = _getArgSql.order,
45
39
  limit = _getArgSql.limit,
46
- attrs = _getArgSql.attrs;
40
+ meta = _getArgSql.meta;
47
41
 
48
- var clampedLimit = forUpdate ? 1 : Math.min(MAX_LIMIT, Math.max(0, limit || 0));
49
- return (0, _sqlTemplateTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n SELECT\n ", " || ", "\n FROM \"", "\"\n ", "\n ", "\n LIMIT ", "\n ", "\n "])), (0, _getSelectCols.default)(options), attrs, (0, _sqlTemplateTag.raw)(table), where.length ? (0, _sqlTemplateTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["WHERE ", ""])), (0, _sqlTemplateTag.join)(where, " AND ")) : _sqlTemplateTag.empty, order ? (0, _sqlTemplateTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["ORDER BY ", ""])), order) : _sqlTemplateTag.empty, clampedLimit, forUpdate ? (0, _sqlTemplateTag.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["FOR UPDATE"]))) : _sqlTemplateTag.empty);
42
+ var clampedLimit = Math.min(MAX_LIMIT, limit || MAX_LIMIT);
43
+ return (0, _sqlTemplateTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n SELECT\n ", " || ", "\n FROM \"", "\"\n ", "\n ", "\n LIMIT ", "\n "])), (0, _clauses.getSelectCols)(table), meta, (0, _sqlTemplateTag.raw)(table), where.length ? (0, _sqlTemplateTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["WHERE ", ""])), (0, _sqlTemplateTag.join)(where, " AND ")) : _sqlTemplateTag.empty, order ? (0, _sqlTemplateTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["ORDER BY ", ""])), order) : _sqlTemplateTag.empty, clampedLimit);
50
44
  }
51
45
 
52
- function selectByIds(ids, options, _temp2) {
53
- var _ref2 = _temp2 === void 0 ? {} : _temp2,
54
- forUpdate = _ref2.forUpdate;
55
-
46
+ function selectByIds(ids, options) {
56
47
  var table = options.table,
57
48
  idCol = options.idCol;
58
- return (0, _sqlTemplateTag.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n SELECT\n ", " || ", "\n FROM \"", "\"\n WHERE \"", "\" IN (", ")\n ", "\n "])), (0, _getSelectCols.default)(options), (0, _getIdMeta.default)(options), (0, _sqlTemplateTag.raw)(table), (0, _sqlTemplateTag.raw)(idCol), (0, _sqlTemplateTag.join)(ids), forUpdate ? (0, _sqlTemplateTag.default)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteralLoose2.default)(["FOR UPDATE"]))) : _sqlTemplateTag.empty);
59
- }
60
-
61
- function selectUpdatedSince(version, options) {
62
- var table = options.table,
63
- verCol = options.verCol;
64
- return (0, _sqlTemplateTag.default)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteralLoose2.default)(["\n SELECT ", " || ", "\n FROM \"", "\"\n WHERE \"", "\" > ", "\n LIMIT ", "\n "])), (0, _getSelectCols.default)(options), (0, _getIdMeta.default)(options), (0, _sqlTemplateTag.raw)(table), (0, _sqlTemplateTag.raw)(verCol), version, MAX_LIMIT);
49
+ return (0, _sqlTemplateTag.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["\n SELECT\n ", " || ", "\n FROM \"", "\"\n WHERE \"", "\" IN (", ")\n "])), (0, _clauses.getSelectCols)(table), (0, _getMeta.getIdMeta)(options), (0, _sqlTemplateTag.raw)(table), (0, _sqlTemplateTag.raw)(idCol), (0, _sqlTemplateTag.join)(ids));
65
50
  }
package/cjs/sql/upsert.js CHANGED
@@ -1,17 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
4
-
5
- var _Array$from = require("@babel/runtime-corejs3/core-js-stable/array/from");
6
-
7
- var _Symbol = require("@babel/runtime-corejs3/core-js-stable/symbol");
8
-
9
- var _getIteratorMethod = require("@babel/runtime-corejs3/core-js/get-iterator-method");
10
-
11
- var _bindInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/bind");
12
-
13
- var _Array$isArray = require("@babel/runtime-corejs3/core-js-stable/array/is-array");
14
-
15
3
  var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
16
4
 
17
5
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
@@ -28,16 +16,6 @@ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable
28
16
 
29
17
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
30
18
 
31
- var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
32
-
33
- var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/values"));
34
-
35
- var _now = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/date/now"));
36
-
37
- var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
38
-
39
- var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
40
-
41
19
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/taggedTemplateLiteralLoose"));
42
20
 
43
21
  var _sqlTemplateTag = _interopRequireWildcard(require("sql-template-tag"));
@@ -46,172 +24,57 @@ var _common = require("@graffy/common");
46
24
 
47
25
  var _getArgSql2 = _interopRequireDefault(require("./getArgSql.js"));
48
26
 
49
- var _getIdMeta = _interopRequireDefault(require("./getIdMeta.js"));
27
+ var _getMeta = require("./getMeta.js");
50
28
 
51
- var _getSelectCols = _interopRequireDefault(require("./getSelectCols.js"));
29
+ var _clauses = require("./clauses.js");
52
30
 
53
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
31
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
54
32
 
55
33
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
56
34
 
57
35
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
58
36
 
59
- function _createForOfIteratorHelperLoose(o, allowArrayLike) { var _context9; var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (it) return _bindInstanceProperty(_context9 = (it = it.call(o)).next).call(_context9, it); if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
60
-
61
- function _unsupportedIterableToArray(o, minLen) { var _context8; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty(_context8 = Object.prototype.toString.call(o)).call(_context8, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
62
-
63
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
64
-
65
37
  function patch(object, arg, options) {
66
38
  var table = options.table,
67
39
  idCol = options.idCol;
68
40
 
69
41
  var _ref = (0, _common.isPlainObject)(arg) ? (0, _getArgSql2.default)(arg, options) : {
70
42
  where: [(0, _sqlTemplateTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\" = ", ""])), (0, _sqlTemplateTag.raw)(idCol), arg)],
71
- attrs: (0, _getIdMeta.default)(options)
43
+ meta: (0, _getMeta.getIdMeta)(options)
72
44
  },
73
45
  where = _ref.where,
74
- attrs = _ref.attrs;
46
+ meta = _ref.meta;
75
47
 
76
48
  if (!where || !where.length) throw Error('pg_write.no_condition');
77
- var row = objectToRow(object, options);
78
- return (0, _sqlTemplateTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n UPDATE \"", "\" SET ", "\n WHERE ", "\n RETURNING (", " || ", ")"])), (0, _sqlTemplateTag.raw)(table), getUpdates(row, options), (0, _sqlTemplateTag.join)(where, " AND "), (0, _getSelectCols.default)(options), attrs);
49
+ var row = object; // objectToRow(object, options);
50
+
51
+ return (0, _sqlTemplateTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n UPDATE \"", "\" SET ", "\n WHERE ", "\n LIMIT 1\n RETURNING (", " || ", ")"])), (0, _sqlTemplateTag.raw)(table), (0, _clauses.getUpdates)(row, options), (0, _sqlTemplateTag.join)(where, " AND "), (0, _clauses.getSelectCols)(table), meta);
79
52
  }
80
53
 
81
54
  function put(object, arg, options) {
82
55
  var idCol = options.idCol,
83
- table = options.table,
84
- props = options.props;
85
- var row = objectToRow(object, options);
56
+ table = options.table;
57
+ var row = object; // objectToRow(object, options);
58
+
86
59
  var meta, conflictTarget;
87
60
 
88
61
  if ((0, _common.isPlainObject)(arg)) {
89
62
  var _context;
90
63
 
91
- var _getArgSql = (0, _getArgSql2.default)(arg),
92
- attrs = _getArgSql.attrs;
93
-
94
- meta = attrs;
95
- conflictTarget = (0, _sqlTemplateTag.join)((0, _map.default)(_context = (0, _keys.default)(arg)).call(_context, function (prop) {
96
- var _props$prop;
64
+ var _getArgSql = (0, _getArgSql2.default)(arg, options);
97
65
 
98
- var col = (_props$prop = props[prop]) == null ? void 0 : _props$prop.data;
99
- if (!col) throw Error('pg_write.bad_put_prop:' + prop);
66
+ meta = _getArgSql.meta;
67
+ conflictTarget = (0, _sqlTemplateTag.join)((0, _map.default)(_context = (0, _keys.default)(arg)).call(_context, function (col) {
100
68
  return (0, _sqlTemplateTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\""])), (0, _sqlTemplateTag.raw)(col));
101
69
  }));
102
70
  } else {
103
- meta = (0, _getIdMeta.default)(options);
71
+ meta = (0, _getMeta.getIdMeta)(options);
104
72
  conflictTarget = (0, _sqlTemplateTag.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\""])), (0, _sqlTemplateTag.raw)(idCol));
105
73
  }
106
74
 
107
- return (0, _sqlTemplateTag.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n INSERT INTO \"", "\" (", ")\n VALUES (", ")\n ON CONFLICT (", ") DO UPDATE SET\n (", ") = (", ")\n RETURNING (", " || ", ")"])), (0, _sqlTemplateTag.raw)(table), getCols(row, options), getVals(row, options), conflictTarget, getCols(row, options), getVals(row, options), (0, _getSelectCols.default)(options), meta);
108
- }
109
-
110
- function objectToRow(object, _ref2) {
111
- var props = _ref2.props,
112
- defCol = _ref2.defCol;
113
- var row = {};
114
- var defVal = defCol ? clean(object, false) : {};
115
-
116
- for (var prop in props) {
117
- var _props$prop2 = props[prop],
118
- data = _props$prop2.data,
119
- gin = _props$prop2.gin,
120
- tsv = _props$prop2.tsv,
121
- trgm = _props$prop2.trgm;
122
- var path = (0, _common.encodePath)(prop);
123
- var value = (0, _common.unwrapObject)(object, path);
124
- if (typeof value === 'undefined') continue;
125
-
126
- if (data) {
127
- row[data] = clean(value, false); // Delete this path from the default object
128
-
129
- if (defCol) (0, _common.mergeObject)(defVal, (0, _common.wrapObject)(null, path));
130
- }
131
-
132
- if (gin) {
133
- for (var _iterator = _createForOfIteratorHelperLoose(gin), _step; !(_step = _iterator()).done;) {
134
- var col = _step.value;
135
- row[col] = row[col] || {};
136
- row[col][prop] = clean(value, true);
137
- }
138
- }
139
-
140
- if (tsv) {
141
- for (var _iterator2 = _createForOfIteratorHelperLoose(tsv), _step2; !(_step2 = _iterator2()).done;) {
142
- var _col = _step2.value;
143
- row[_col] = row[_col] || [];
144
-
145
- row[_col].push(value);
146
- }
147
- }
148
-
149
- if (trgm) {
150
- for (var _iterator3 = _createForOfIteratorHelperLoose(trgm), _step3; !(_step3 = _iterator3()).done;) {
151
- var _col2 = _step3.value;
152
- row[_col2] = row[_col2] || [];
153
-
154
- row[_col2].push(value);
155
- }
156
- }
157
- }
158
-
159
- if (defCol) row[defCol] = defVal;
160
- return row;
161
- }
162
-
163
- function clean(object, forLookup) {
164
- if (typeof object !== 'object' || !object) {
165
- return object;
166
- }
167
-
168
- var clone = {};
169
-
170
- for (var prop in object) {
171
- switch (prop) {
172
- case '$key':
173
- case '$put':
174
- case '$ref':
175
- continue;
176
-
177
- case '$val':
178
- if (forLookup) return object[prop];
179
- clone[prop] = object[prop];
180
- continue;
181
- }
182
-
183
- var value = clean(object[prop]);
184
- if (value === null) continue;
185
- clone[prop] = value;
186
- }
187
-
188
- return (0, _common.isEmpty)(clone) ? null : clone;
189
- }
190
-
191
- function getCols(row, options) {
192
- var _context2, _context3;
193
-
194
- return (0, _sqlTemplateTag.join)((0, _concat.default)(_context2 = (0, _map.default)(_context3 = (0, _keys.default)(row)).call(_context3, function (col) {
195
- return (0, _sqlTemplateTag.raw)("\"" + col + "\"");
196
- })).call(_context2, (0, _sqlTemplateTag.raw)("\"" + options.verCol + "\"")), ', ');
197
- }
198
-
199
- function getVals(row, _options) {
200
- var _context4;
201
-
202
- return (0, _sqlTemplateTag.join)((0, _concat.default)(_context4 = (0, _values.default)(row)).call(_context4, (0, _now.default)()), ', ');
203
- }
75
+ var _getInsert = (0, _clauses.getInsert)(row, options),
76
+ cols = _getInsert.cols,
77
+ vals = _getInsert.vals;
204
78
 
205
- function getUpdates(row, options) {
206
- var _context5, _context6, _context7;
207
-
208
- return (0, _sqlTemplateTag.join)((0, _concat.default)(_context5 = (0, _map.default)(_context6 = (0, _filter.default)(_context7 = (0, _entries.default)(row)).call(_context7, function (_ref3) {
209
- var name = _ref3[0];
210
- return name !== options.idCol;
211
- })).call(_context6, function (_ref4) {
212
- var name = _ref4[0],
213
- value = _ref4[1];
214
- var updater = options.updaters[name];
215
- return (0, _sqlTemplateTag.default)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\" = ", ""])), (0, _sqlTemplateTag.raw)(name), updater === '||' ? (0, _sqlTemplateTag.default)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\" || ", ""])), (0, _sqlTemplateTag.raw)(name), value) : updater ? (0, _sqlTemplateTag.default)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteralLoose2.default)(["", "(\"", "\", ", ")"])), (0, _sqlTemplateTag.raw)(updater), (0, _sqlTemplateTag.raw)(name), value) : value);
216
- })).call(_context5, (0, _sqlTemplateTag.default)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteralLoose2.default)(["\"", "\" = now()"])), (0, _sqlTemplateTag.raw)(options.verCol))), ', ');
79
+ return (0, _sqlTemplateTag.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n INSERT INTO \"", "\" (", ") VALUES (", ")\n ON CONFLICT (", ") DO UPDATE SET (", ") = (", ")\n RETURNING (", " || ", ")"])), (0, _sqlTemplateTag.raw)(table), cols, vals, conflictTarget, cols, vals, (0, _clauses.getSelectCols)(table), meta);
217
80
  }
@@ -9,6 +9,7 @@ var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stabl
9
9
 
10
10
  var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
11
11
 
12
+ /** @var {function} expect */
12
13
  function expectSql(actual, expected) {
13
14
  var normalSql = function normalSql(str) {
14
15
  var _context;