@subsquid/openreader 2.1.0 → 3.1.0
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.
- package/lib/ir/args.d.ts +1 -1
- package/lib/ir/args.d.ts.map +1 -1
- package/lib/ir/connection.d.ts +3 -4
- package/lib/ir/connection.d.ts.map +1 -1
- package/lib/ir/connection.js.map +1 -1
- package/lib/ir/fields.d.ts +6 -2
- package/lib/ir/fields.d.ts.map +1 -1
- package/lib/ir/fields.js +15 -0
- package/lib/ir/fields.js.map +1 -1
- package/lib/limit.size.d.ts +4 -4
- package/lib/limit.size.d.ts.map +1 -1
- package/lib/limit.size.js +51 -20
- package/lib/limit.size.js.map +1 -1
- package/lib/main.js +0 -9
- package/lib/main.js.map +1 -1
- package/lib/model.d.ts +3 -2
- package/lib/model.d.ts.map +1 -1
- package/lib/model.schema.d.ts +2 -2
- package/lib/model.schema.d.ts.map +1 -1
- package/lib/model.schema.js +8 -3
- package/lib/model.schema.js.map +1 -1
- package/lib/model.tools.d.ts +6 -1
- package/lib/model.tools.d.ts.map +1 -1
- package/lib/model.tools.js +111 -8
- package/lib/model.tools.js.map +1 -1
- package/lib/opencrud/orderBy.d.ts +2 -2
- package/lib/opencrud/orderBy.d.ts.map +1 -1
- package/lib/opencrud/orderBy.js +13 -17
- package/lib/opencrud/orderBy.js.map +1 -1
- package/lib/opencrud/schema.d.ts +4 -4
- package/lib/opencrud/schema.d.ts.map +1 -1
- package/lib/opencrud/schema.js +56 -62
- package/lib/opencrud/schema.js.map +1 -1
- package/lib/opencrud/tree.d.ts +9 -7
- package/lib/opencrud/tree.d.ts.map +1 -1
- package/lib/opencrud/tree.js +32 -14
- package/lib/opencrud/tree.js.map +1 -1
- package/lib/scalars/BigDecimal.d.ts +3 -0
- package/lib/scalars/BigDecimal.d.ts.map +1 -0
- package/lib/scalars/BigDecimal.js +38 -0
- package/lib/scalars/BigDecimal.js.map +1 -0
- package/lib/scalars/index.d.ts +1 -0
- package/lib/scalars/index.d.ts.map +1 -1
- package/lib/scalars/index.js +2 -0
- package/lib/scalars/index.js.map +1 -1
- package/lib/server.d.ts +4 -2
- package/lib/server.d.ts.map +1 -1
- package/lib/server.js +4 -2
- package/lib/server.js.map +1 -1
- package/lib/sql/cursor.d.ts.map +1 -1
- package/lib/sql/cursor.js +4 -2
- package/lib/sql/cursor.js.map +1 -1
- package/lib/sql/mapping.d.ts +3 -1
- package/lib/sql/mapping.d.ts.map +1 -1
- package/lib/sql/mapping.js +16 -1
- package/lib/sql/mapping.js.map +1 -1
- package/lib/sql/printer.d.ts +29 -11
- package/lib/sql/printer.d.ts.map +1 -1
- package/lib/sql/printer.js +112 -11
- package/lib/sql/printer.js.map +1 -1
- package/lib/sql/query.d.ts +11 -11
- package/lib/sql/query.d.ts.map +1 -1
- package/lib/sql/query.js +41 -19
- package/lib/sql/query.js.map +1 -1
- package/lib/test/queryable.test.d.ts +2 -0
- package/lib/test/queryable.test.d.ts.map +1 -0
- package/lib/test/queryable.test.js +255 -0
- package/lib/test/queryable.test.js.map +1 -0
- package/lib/test/scalars.test.js +75 -1
- package/lib/test/scalars.test.js.map +1 -1
- package/lib/util/big-decimal.d.ts +5 -0
- package/lib/util/big-decimal.d.ts.map +1 -0
- package/lib/util/big-decimal.js +15 -0
- package/lib/util/big-decimal.js.map +1 -0
- package/package.json +10 -2
- package/src/ir/args.ts +1 -1
- package/src/ir/connection.ts +3 -4
- package/src/ir/fields.ts +22 -2
- package/src/limit.size.ts +55 -30
- package/src/main.ts +0 -11
- package/src/model.schema.ts +16 -9
- package/src/model.tools.ts +121 -8
- package/src/model.ts +3 -2
- package/src/opencrud/orderBy.ts +13 -17
- package/src/opencrud/schema.ts +81 -84
- package/src/opencrud/tree.ts +55 -26
- package/src/scalars/BigDecimal.ts +37 -0
- package/src/scalars/index.ts +2 -0
- package/src/server.ts +10 -7
- package/src/sql/cursor.ts +4 -2
- package/src/sql/mapping.ts +18 -1
- package/src/sql/printer.ts +142 -22
- package/src/sql/query.ts +50 -30
- package/src/test/queryable.test.ts +258 -0
- package/src/test/scalars.test.ts +78 -1
- package/src/util/big-decimal.ts +15 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const setup_1 = require("./setup");
|
|
4
|
+
describe('queryable interfaces', function () {
|
|
5
|
+
(0, setup_1.useDatabase)([
|
|
6
|
+
`create table foo (id text primary key, name text, foo int)`,
|
|
7
|
+
`create table bar (id text primary key, name text, bar int)`,
|
|
8
|
+
`create table ref (id text primary key, name text, foo_id text not null unique references foo, bar_id text not null unique references bar)`,
|
|
9
|
+
`create table baz (id text primary key, name text, ref_id text references ref, baz int)`,
|
|
10
|
+
`insert into foo (id, name, foo) values ('foo-1', 'hello-foo-1', 1)`,
|
|
11
|
+
`insert into foo (id, name, foo) values ('foo-2', 'hello-foo-2', 2)`,
|
|
12
|
+
`insert into bar (id, name, bar) values ('bar-1', 'hello-bar-1', 10)`,
|
|
13
|
+
`insert into bar (id, name, bar) values ('bar-2', 'hello-bar-2', 20)`,
|
|
14
|
+
`insert into ref (id, name, foo_id, bar_id) values ('1', 'ref-1', 'foo-1', 'bar-2')`,
|
|
15
|
+
`insert into ref (id, name, foo_id, bar_id) values ('2', 'ref-2', 'foo-2', 'bar-1')`,
|
|
16
|
+
`insert into baz (id, name, baz, ref_id) values ('baz-1', 'hello-baz-1', 100, '1')`,
|
|
17
|
+
`create table one (id text primary key)`,
|
|
18
|
+
`create table two (id text primary key)`,
|
|
19
|
+
`create table relation (id text primary key, one_id text references one, two_id text references two)`,
|
|
20
|
+
`insert into one (id) values ('1-1')`,
|
|
21
|
+
`insert into one (id) values ('1-2')`,
|
|
22
|
+
`insert into two (id) values ('2-1')`,
|
|
23
|
+
`insert into two (id) values ('2-2')`,
|
|
24
|
+
`insert into relation (id, one_id, two_id) values ('r-1', '1-1', '2-1')`,
|
|
25
|
+
`insert into relation (id, one_id, two_id) values ('r-2', '1-2', '2-1')`,
|
|
26
|
+
]);
|
|
27
|
+
const client = (0, setup_1.useServer)(`
|
|
28
|
+
interface Entity @query {
|
|
29
|
+
id: ID!
|
|
30
|
+
name: String
|
|
31
|
+
ref: Ref
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
type Ref @entity {
|
|
35
|
+
id: ID!
|
|
36
|
+
name: String
|
|
37
|
+
foo: Foo! @unique
|
|
38
|
+
bar: Bar! @unique
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type Foo implements Entity @entity {
|
|
42
|
+
id: ID!
|
|
43
|
+
name: String
|
|
44
|
+
ref: Ref @derivedFrom(field: "foo")
|
|
45
|
+
foo: Int
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type Bar implements Entity @entity {
|
|
49
|
+
id: ID!
|
|
50
|
+
name: String
|
|
51
|
+
ref: Ref @derivedFrom(field: "bar")
|
|
52
|
+
bar: Int
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
type Baz implements Entity @entity {
|
|
56
|
+
id: ID!
|
|
57
|
+
name: String
|
|
58
|
+
ref: Ref
|
|
59
|
+
baz: Int
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
interface Number @query {
|
|
63
|
+
id: ID!
|
|
64
|
+
relations: [Relation!]!
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
type One implements Number @entity {
|
|
68
|
+
id: ID!
|
|
69
|
+
relations: [Relation!]! @derivedFrom(field: "one")
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
type Two implements Number @entity {
|
|
73
|
+
id: ID!
|
|
74
|
+
relations: [Relation!]! @derivedFrom(field: "two")
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
type Relation @entity {
|
|
78
|
+
id: ID!
|
|
79
|
+
one: One
|
|
80
|
+
two: Two
|
|
81
|
+
}
|
|
82
|
+
`);
|
|
83
|
+
it('fetching', function () {
|
|
84
|
+
return client.test(`
|
|
85
|
+
query {
|
|
86
|
+
entities(orderBy: id_ASC) {
|
|
87
|
+
id
|
|
88
|
+
name
|
|
89
|
+
ref {
|
|
90
|
+
id
|
|
91
|
+
name
|
|
92
|
+
}
|
|
93
|
+
... on Foo { foo }
|
|
94
|
+
... on Bar { bar }
|
|
95
|
+
... on Baz { baz }
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
`, {
|
|
99
|
+
entities: [
|
|
100
|
+
{
|
|
101
|
+
id: 'bar-1',
|
|
102
|
+
name: 'hello-bar-1',
|
|
103
|
+
ref: {
|
|
104
|
+
id: '2',
|
|
105
|
+
name: 'ref-2'
|
|
106
|
+
},
|
|
107
|
+
bar: 10
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: 'bar-2',
|
|
111
|
+
name: 'hello-bar-2',
|
|
112
|
+
ref: {
|
|
113
|
+
id: '1',
|
|
114
|
+
name: 'ref-1'
|
|
115
|
+
},
|
|
116
|
+
bar: 20
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: 'baz-1',
|
|
120
|
+
name: 'hello-baz-1',
|
|
121
|
+
ref: {
|
|
122
|
+
id: '1',
|
|
123
|
+
name: 'ref-1'
|
|
124
|
+
},
|
|
125
|
+
baz: 100
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: 'foo-1',
|
|
129
|
+
name: 'hello-foo-1',
|
|
130
|
+
ref: {
|
|
131
|
+
id: '1',
|
|
132
|
+
name: 'ref-1'
|
|
133
|
+
},
|
|
134
|
+
foo: 1
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'foo-2',
|
|
138
|
+
name: 'hello-foo-2',
|
|
139
|
+
ref: {
|
|
140
|
+
id: '2',
|
|
141
|
+
name: 'ref-2'
|
|
142
|
+
},
|
|
143
|
+
foo: 2
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
it('sorting by entity type', function () {
|
|
149
|
+
return client.test(`
|
|
150
|
+
query {
|
|
151
|
+
entities(orderBy: [_type_DESC, id_ASC]) {
|
|
152
|
+
id
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
`, {
|
|
156
|
+
entities: [
|
|
157
|
+
{ id: 'foo-1' },
|
|
158
|
+
{ id: 'foo-2' },
|
|
159
|
+
{ id: 'baz-1' },
|
|
160
|
+
{ id: 'bar-1' },
|
|
161
|
+
{ id: 'bar-2' }
|
|
162
|
+
]
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
it('pagination', function () {
|
|
166
|
+
return client.test(`
|
|
167
|
+
query {
|
|
168
|
+
page1: entitiesConnection(orderBy: id_ASC, first: 2) {
|
|
169
|
+
...fields
|
|
170
|
+
}
|
|
171
|
+
page2: entitiesConnection(orderBy: id_ASC, first: 2, after: "2") {
|
|
172
|
+
...fields
|
|
173
|
+
}
|
|
174
|
+
page3: entitiesConnection(orderBy: id_ASC, first: 2, after: "4") {
|
|
175
|
+
...fields
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
fragment fields on EntitiesConnection {
|
|
180
|
+
edges {
|
|
181
|
+
cursor
|
|
182
|
+
node {
|
|
183
|
+
... on Foo { foo }
|
|
184
|
+
... on Bar { bar }
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
pageInfo {
|
|
188
|
+
hasNextPage
|
|
189
|
+
hasPreviousPage
|
|
190
|
+
startCursor
|
|
191
|
+
endCursor
|
|
192
|
+
}
|
|
193
|
+
totalCount
|
|
194
|
+
}
|
|
195
|
+
`, {
|
|
196
|
+
page1: {
|
|
197
|
+
edges: [
|
|
198
|
+
{ cursor: '1', node: { bar: 10 } },
|
|
199
|
+
{ cursor: '2', node: { bar: 20 } },
|
|
200
|
+
],
|
|
201
|
+
pageInfo: {
|
|
202
|
+
hasNextPage: true,
|
|
203
|
+
hasPreviousPage: false,
|
|
204
|
+
startCursor: '1',
|
|
205
|
+
endCursor: '2'
|
|
206
|
+
},
|
|
207
|
+
totalCount: 5
|
|
208
|
+
},
|
|
209
|
+
page2: {
|
|
210
|
+
edges: [
|
|
211
|
+
{ cursor: '3', node: {} },
|
|
212
|
+
{ cursor: '4', node: { foo: 1 } },
|
|
213
|
+
],
|
|
214
|
+
pageInfo: {
|
|
215
|
+
hasNextPage: true,
|
|
216
|
+
hasPreviousPage: true,
|
|
217
|
+
startCursor: '3',
|
|
218
|
+
endCursor: '4'
|
|
219
|
+
},
|
|
220
|
+
totalCount: 5
|
|
221
|
+
},
|
|
222
|
+
page3: {
|
|
223
|
+
edges: [
|
|
224
|
+
{ cursor: '5', node: { foo: 2 } },
|
|
225
|
+
],
|
|
226
|
+
pageInfo: {
|
|
227
|
+
hasNextPage: false,
|
|
228
|
+
hasPreviousPage: true,
|
|
229
|
+
startCursor: '5',
|
|
230
|
+
endCursor: '5'
|
|
231
|
+
},
|
|
232
|
+
totalCount: 5
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
it('list lookup fields in interfaces', function () {
|
|
237
|
+
return client.test(`
|
|
238
|
+
query {
|
|
239
|
+
numbers(orderBy: id_ASC) {
|
|
240
|
+
id
|
|
241
|
+
relations { id }
|
|
242
|
+
__typename
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
`, {
|
|
246
|
+
numbers: [
|
|
247
|
+
{ __typename: 'One', id: '1-1', relations: [{ id: 'r-1' }] },
|
|
248
|
+
{ __typename: 'One', id: '1-2', relations: [{ id: 'r-2' }] },
|
|
249
|
+
{ __typename: 'Two', id: '2-1', relations: [{ id: 'r-1' }, { id: 'r-2' }] },
|
|
250
|
+
{ __typename: 'Two', id: '2-2', relations: [] }
|
|
251
|
+
]
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
//# sourceMappingURL=queryable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryable.test.js","sourceRoot":"","sources":["../../src/test/queryable.test.ts"],"names":[],"mappings":"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"}
|
package/lib/test/scalars.test.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const setup_1 = require("./setup");
|
|
4
4
|
describe('scalars', function () {
|
|
5
5
|
(0, setup_1.useDatabase)([
|
|
6
|
-
`create table scalar (id text primary key, "boolean" bool, "bigint" numeric, "string" text, enum text, date_time timestamptz, "bytes" bytea, "json" jsonb, deep jsonb)`,
|
|
6
|
+
`create table scalar (id text primary key, "boolean" bool, "bigint" numeric, "bigdecimal" numeric, "string" text, enum text, date_time timestamptz, "bytes" bytea, "json" jsonb, deep jsonb)`,
|
|
7
7
|
`insert into scalar (id, "boolean") values ('1', true)`,
|
|
8
8
|
`insert into scalar (id, "boolean", deep) values ('2', false, '{"boolean": true}'::jsonb)`,
|
|
9
9
|
`insert into scalar (id, "bigint", deep) values ('3', 1000000000000000000000000000000000000, '{"bigint": "1000000000000000000000000000000000000"}'::jsonb)`,
|
|
@@ -24,6 +24,9 @@ describe('scalars', function () {
|
|
|
24
24
|
`insert into scalar (id, "enum") values ('17', 'C')`,
|
|
25
25
|
`insert into scalar (id, "json") values ('18', '{"key1": "value1"}'::jsonb)`,
|
|
26
26
|
`insert into scalar (id, "json") values ('19', '{"key2": "value2"}'::jsonb)`,
|
|
27
|
+
`insert into scalar (id, "bigdecimal", deep) values ('20', 0.00000000000000000000000000000000002, '{"bigdecimal": "100.00000000000000000000000000000000002"}'::jsonb)`,
|
|
28
|
+
`insert into scalar (id, "bigdecimal", deep) values ('21', 0.00000000000000000000000000000000001, '{"bigdecimal": "12.00000000000000000000000000000000001"}'::jsonb)`,
|
|
29
|
+
`insert into scalar (id, "bigdecimal", deep) values ('22', 5, '{"bigdecimal": "5"}'::jsonb)`,
|
|
27
30
|
]);
|
|
28
31
|
const client = (0, setup_1.useServer)(`
|
|
29
32
|
type Scalar @entity {
|
|
@@ -32,6 +35,7 @@ describe('scalars', function () {
|
|
|
32
35
|
string: String
|
|
33
36
|
enum: Enum
|
|
34
37
|
bigint: BigInt
|
|
38
|
+
bigdecimal: BigDecimal
|
|
35
39
|
dateTime: DateTime
|
|
36
40
|
bytes: Bytes
|
|
37
41
|
json: JSON,
|
|
@@ -40,6 +44,7 @@ describe('scalars', function () {
|
|
|
40
44
|
|
|
41
45
|
type DeepScalar {
|
|
42
46
|
bigint: BigInt
|
|
47
|
+
bigdecimal: BigDecimal
|
|
43
48
|
dateTime: DateTime
|
|
44
49
|
bytes: Bytes
|
|
45
50
|
boolean: Boolean
|
|
@@ -223,6 +228,75 @@ describe('scalars', function () {
|
|
|
223
228
|
});
|
|
224
229
|
});
|
|
225
230
|
});
|
|
231
|
+
describe('BigDecimal', function () {
|
|
232
|
+
it('outputs correctly', function () {
|
|
233
|
+
return client.test(`
|
|
234
|
+
query {
|
|
235
|
+
scalars(where: {id_in: ["20", "21", "22"]} orderBy: id_ASC) {
|
|
236
|
+
id
|
|
237
|
+
bigdecimal
|
|
238
|
+
deep { bigdecimal }
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
`, {
|
|
242
|
+
scalars: [
|
|
243
|
+
{
|
|
244
|
+
id: '20',
|
|
245
|
+
bigdecimal: '2e-35',
|
|
246
|
+
deep: { bigdecimal: '100.00000000000000000000000000000000002' }
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
id: '21',
|
|
250
|
+
bigdecimal: '1e-35',
|
|
251
|
+
deep: { bigdecimal: '12.00000000000000000000000000000000001' }
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
id: '22',
|
|
255
|
+
bigdecimal: '5',
|
|
256
|
+
deep: { bigdecimal: '5' }
|
|
257
|
+
}
|
|
258
|
+
]
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
it('supports where conditions', function () {
|
|
262
|
+
return client.test(`
|
|
263
|
+
query {
|
|
264
|
+
eq: scalars(where: {bigdecimal_eq: 0.00000000000000000000000000000000002} orderBy: id_ASC) { id }
|
|
265
|
+
not_eq: scalars(where: {bigdecimal_not_eq: 0.00000000000000000000000000000000002} orderBy: id_ASC) { id }
|
|
266
|
+
gt: scalars(where: {bigdecimal_gt: 0.00000000000000000000000000000000001} orderBy: id_ASC) { id }
|
|
267
|
+
gte: scalars(where: {bigdecimal_gte: 0.00000000000000000000000000000000002} orderBy: id_ASC) { id }
|
|
268
|
+
lt: scalars(where: {bigdecimal_lt: 0.00000000000000000000000000000000002} orderBy: id_ASC) { id }
|
|
269
|
+
lte: scalars(where: {bigdecimal_lte: 0.00000000000000000000000000000000002} orderBy: id_ASC) { id }
|
|
270
|
+
in: scalars(where: {bigdecimal_in: [0.00000000000000000000000000000000001, 5.0]} orderBy: id_ASC) { id }
|
|
271
|
+
not_in: scalars(where: {bigdecimal_not_in: [0.00000000000000000000000000000000001, 5.0]} orderBy: id_ASC) { id }
|
|
272
|
+
}
|
|
273
|
+
`, {
|
|
274
|
+
eq: [{ id: '20' }],
|
|
275
|
+
not_eq: [{ id: '21' }, { id: '22' }],
|
|
276
|
+
gt: [{ id: '20' }, { id: '22' }],
|
|
277
|
+
gte: [{ id: '20' }, { id: '22' }],
|
|
278
|
+
lt: [{ id: '21' }],
|
|
279
|
+
lte: [{ id: '20' }, { id: '21' }],
|
|
280
|
+
in: [{ id: '21' }, { id: '22' }],
|
|
281
|
+
not_in: [{ id: '20' }]
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
it('json sort', function () {
|
|
285
|
+
return client.test(`
|
|
286
|
+
query {
|
|
287
|
+
scalars(orderBy: deep_bigdecimal_ASC where: {id_in: ["20", "21", "22"]}) {
|
|
288
|
+
id
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
`, {
|
|
292
|
+
scalars: [
|
|
293
|
+
{ id: '22' },
|
|
294
|
+
{ id: '21' },
|
|
295
|
+
{ id: '20' }
|
|
296
|
+
]
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
});
|
|
226
300
|
describe('DateTime', function () {
|
|
227
301
|
it('outputs correctly', function () {
|
|
228
302
|
return client.test(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scalars.test.js","sourceRoot":"","sources":["../../src/test/scalars.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAE9C,QAAQ,CAAC,SAAS,EAAE;IAChB,IAAA,mBAAW,EAAC;QACR,
|
|
1
|
+
{"version":3,"file":"scalars.test.js","sourceRoot":"","sources":["../../src/test/scalars.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"big-decimal.d.ts","sourceRoot":"","sources":["../../src/util/big-decimal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,uBAAuB,CAAA;AAGhE,eAAO,MAAM,UAAU;;CAItB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bigDecimal = void 0;
|
|
4
|
+
exports.bigDecimal = {
|
|
5
|
+
get BigDecimal() {
|
|
6
|
+
throw new Error('Package `@subsquid/big-decimal` is not installed');
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
try {
|
|
10
|
+
Object.defineProperty(exports.bigDecimal, "BigDecimal", {
|
|
11
|
+
value: require('@subsquid/big-decimal').BigDecimal
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
catch (e) { }
|
|
15
|
+
//# sourceMappingURL=big-decimal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"big-decimal.js","sourceRoot":"","sources":["../../src/util/big-decimal.ts"],"names":[],"mappings":";;;AAGa,QAAA,UAAU,GAAG;IACtB,IAAI,UAAU;QACV,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACvE,CAAC;CACJ,CAAA;AAGD,IAAI;IACA,MAAM,CAAC,cAAc,CAAC,kBAAU,EAAE,YAAY,EAAE;QAC5C,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,UAAU;KACrD,CAAC,CAAA;CACL;AAAC,OAAO,CAAM,EAAE,GAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subsquid/openreader",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "GraphQL server for postgres-compatible databases",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphql",
|
|
@@ -40,6 +40,14 @@
|
|
|
40
40
|
"pg": "^8.7.3",
|
|
41
41
|
"ws": "^8.8.1"
|
|
42
42
|
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@subsquid/big-decimal": "^0.0.0"
|
|
45
|
+
},
|
|
46
|
+
"peerDependenciesMeta": {
|
|
47
|
+
"@subsquid/big-decimal": {
|
|
48
|
+
"optional": true
|
|
49
|
+
}
|
|
50
|
+
},
|
|
43
51
|
"devDependencies": {
|
|
44
52
|
"@types/deep-equal": "^1.0.1",
|
|
45
53
|
"@types/express": "^4.17.13",
|
|
@@ -54,7 +62,7 @@
|
|
|
54
62
|
"typescript": "~4.7.4"
|
|
55
63
|
},
|
|
56
64
|
"scripts": {
|
|
57
|
-
"build": "rm -rf
|
|
65
|
+
"build": "rm -rf lib && tsc",
|
|
58
66
|
"test": "make up && sleep 2 && make test test-cockroach && make down || (make down && exit 1)"
|
|
59
67
|
},
|
|
60
68
|
"readme": "# OpenReader\n\nGraphQL server for squid framework. Given [data schema](https://docs.subsquid.io/reference/openreader-schema) \nand compatible Postgres database it serves \"read part\" of [OpenCRUD spec](https://www.opencrud.org).\n\n## Usage\n\n```bash\nopenreader schema.graphql\n```\n\nDatabase connection and server port are configured via environment variables:\n\n```\nDB_NAME\nDB_USER\nDB_PASS\nDB_HOST\nDB_PORT\nGRAPHQL_SERVER_PORT\n```\n"
|
package/src/ir/args.ts
CHANGED
package/src/ir/connection.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {OrderBy, Where} from
|
|
2
|
-
import {FieldRequest} from "./fields"
|
|
1
|
+
import {OrderBy, Where} from './args'
|
|
3
2
|
|
|
4
3
|
|
|
5
|
-
export interface RelayConnectionRequest {
|
|
4
|
+
export interface RelayConnectionRequest<R> {
|
|
6
5
|
orderBy: OrderBy
|
|
7
6
|
where?: Where
|
|
8
7
|
first?: number
|
|
9
8
|
after?: string
|
|
10
|
-
edgeNode?:
|
|
9
|
+
edgeNode?: R
|
|
11
10
|
edgeCursor?: boolean
|
|
12
11
|
pageInfo?: boolean
|
|
13
12
|
totalCount?: boolean
|
package/src/ir/fields.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import assert from 'assert'
|
|
1
2
|
import {
|
|
2
3
|
EnumPropType,
|
|
3
4
|
FkPropType,
|
|
@@ -9,7 +10,7 @@ import {
|
|
|
9
10
|
ScalarPropType,
|
|
10
11
|
UnionPropType
|
|
11
12
|
} from "../model"
|
|
12
|
-
import {
|
|
13
|
+
import {SqlArguments} from "./args"
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
export type FieldRequest = EntityListRequest | ObjectRequest | OpaqueRequest
|
|
@@ -28,7 +29,7 @@ type Base<T> = T extends PropType ? {
|
|
|
28
29
|
|
|
29
30
|
export type EntityListRequest = Base<ListLookupPropType> & {
|
|
30
31
|
children: FieldRequest[]
|
|
31
|
-
args?:
|
|
32
|
+
args?: SqlArguments
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
|
|
@@ -38,3 +39,22 @@ export type ObjectRequest = Base<FkPropType | LookupPropType | ObjectPropType |
|
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
export type OpaqueRequest = Base<ScalarPropType | EnumPropType | ListPropType>
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
export type FieldsByEntity = Record<string, FieldRequest[]>
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
export type AnyFields = FieldRequest[] | FieldsByEntity
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
export function asEntityFields(fields: AnyFields): FieldRequest[] {
|
|
52
|
+
assert(Array.isArray(fields))
|
|
53
|
+
return fields
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
export function asQueryableFields(fields: AnyFields): FieldsByEntity {
|
|
58
|
+
assert(!Array.isArray(fields))
|
|
59
|
+
return fields
|
|
60
|
+
}
|
package/src/limit.size.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {unexpectedCase} from '@subsquid/util-internal'
|
|
2
|
+
import assert from 'assert'
|
|
2
3
|
import {Where} from './ir/args'
|
|
3
4
|
import {RelayConnectionRequest} from './ir/connection'
|
|
4
|
-
import {FieldRequest} from './ir/fields'
|
|
5
|
+
import {AnyFields, FieldRequest} from './ir/fields'
|
|
5
6
|
import {Model} from './model'
|
|
6
|
-
import {getEntity} from './model.tools'
|
|
7
|
+
import {getEntity, getQueryableEntities} from './model.tools'
|
|
7
8
|
|
|
8
9
|
|
|
9
|
-
export function
|
|
10
|
+
export function getObjectSize(model: Model, fields: FieldRequest[]): number {
|
|
10
11
|
let total = 0
|
|
11
12
|
for (let req of fields) {
|
|
12
13
|
let size = getFieldSize(model, req)
|
|
@@ -31,9 +32,9 @@ function getFieldSize(model: Model, req: FieldRequest): number {
|
|
|
31
32
|
case "fk":
|
|
32
33
|
case "lookup":
|
|
33
34
|
case "union":
|
|
34
|
-
return
|
|
35
|
+
return getObjectSize(model, req.children) + 1
|
|
35
36
|
case "list-lookup":
|
|
36
|
-
return
|
|
37
|
+
return getListSize(
|
|
37
38
|
model,
|
|
38
39
|
req.type.entity,
|
|
39
40
|
req.children,
|
|
@@ -46,22 +47,55 @@ function getFieldSize(model: Model, req: FieldRequest): number {
|
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
|
|
49
|
-
export function
|
|
50
|
+
export function getListSize(
|
|
50
51
|
model: Model,
|
|
51
|
-
|
|
52
|
-
fields:
|
|
52
|
+
typeName: string,
|
|
53
|
+
fields: AnyFields,
|
|
53
54
|
limit?: number,
|
|
54
55
|
where?: Where
|
|
55
56
|
): number {
|
|
56
|
-
let cardinality =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
let cardinality = getCardinality(model, typeName, limit, where)
|
|
58
|
+
if (!Number.isFinite(cardinality)) return Infinity
|
|
59
|
+
let type = model[typeName]
|
|
60
|
+
switch(type.kind) {
|
|
61
|
+
case 'entity': {
|
|
62
|
+
assert(Array.isArray(fields))
|
|
63
|
+
return cardinality * Math.max(getObjectSize(model, fields), 1)
|
|
64
|
+
}
|
|
65
|
+
case 'interface': {
|
|
66
|
+
assert(!Array.isArray(fields))
|
|
67
|
+
let weight = 1
|
|
68
|
+
for (let entity of getQueryableEntities(model, typeName)) {
|
|
69
|
+
weight = Math.max(weight, getObjectSize(model, fields[entity] || []))
|
|
70
|
+
}
|
|
71
|
+
return cardinality * weight
|
|
72
|
+
}
|
|
73
|
+
default:
|
|
74
|
+
throw unexpectedCase(type.kind)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
function getCardinality(
|
|
80
|
+
model: Model,
|
|
81
|
+
typeName: string,
|
|
82
|
+
limit?: number,
|
|
83
|
+
where?: Where
|
|
84
|
+
): number {
|
|
85
|
+
let type = model[typeName]
|
|
86
|
+
switch(type.kind) {
|
|
87
|
+
case 'entity':
|
|
88
|
+
return Math.min(type.cardinality ?? Infinity, limit ?? Infinity, getWhereCardinality(where))
|
|
89
|
+
case 'interface': {
|
|
90
|
+
let whereCardinality = getWhereCardinality(where)
|
|
91
|
+
let cardinality = 0
|
|
92
|
+
for (let entity of getQueryableEntities(model, typeName)) {
|
|
93
|
+
cardinality += Math.min(getEntity(model, entity).cardinality ?? Infinity, whereCardinality)
|
|
94
|
+
}
|
|
95
|
+
return Math.min(cardinality, limit ?? Infinity)
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
throw unexpectedCase(type.kind)
|
|
65
99
|
}
|
|
66
100
|
}
|
|
67
101
|
|
|
@@ -102,18 +136,14 @@ function getWhereCardinality(where?: Where): number {
|
|
|
102
136
|
}
|
|
103
137
|
|
|
104
138
|
|
|
105
|
-
export function
|
|
139
|
+
export function getConnectionSize(model: Model, typeName: string, req: RelayConnectionRequest<AnyFields>): number {
|
|
140
|
+
let first = req.first ?? 100
|
|
106
141
|
let total = 0
|
|
107
|
-
let limit = Math.min(
|
|
108
|
-
getEntityCardinality(model, entityName),
|
|
109
|
-
req.first ?? 100,
|
|
110
|
-
getWhereCardinality(req.where)
|
|
111
|
-
)
|
|
112
142
|
if (req.edgeNode) {
|
|
113
|
-
total +=
|
|
143
|
+
total += getListSize(model, typeName, req.edgeNode, first, req.where)
|
|
114
144
|
}
|
|
115
145
|
if (req.edgeCursor) {
|
|
116
|
-
total +=
|
|
146
|
+
total += getCardinality(model, typeName, first, req.where)
|
|
117
147
|
}
|
|
118
148
|
if (req.pageInfo) {
|
|
119
149
|
total += 4
|
|
@@ -123,8 +153,3 @@ export function getRelaySize(model: Model, entityName: string, req: RelayConnect
|
|
|
123
153
|
}
|
|
124
154
|
return total
|
|
125
155
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
function getEntityCardinality(model: Model, entityName: string): number {
|
|
129
|
-
return getEntity(model, entityName).cardinality ?? Infinity
|
|
130
|
-
}
|