@aws-amplify/datastore-storage-adapter 1.2.3 → 1.2.4-custom-pk.86
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/CHANGELOG.md +149 -0
- package/ExpoSQLiteAdapter/index.d.ts +1 -0
- package/ExpoSQLiteAdapter/index.js +7 -0
- package/SQLiteAdapter/index.d.ts +1 -0
- package/SQLiteAdapter/index.js +7 -0
- package/dist/aws-amplify-datastore-sqlite-adapter-expo.js +2509 -0
- package/dist/aws-amplify-datastore-sqlite-adapter-expo.js.map +1 -0
- package/dist/aws-amplify-datastore-sqlite-adapter-expo.min.js +2 -0
- package/dist/aws-amplify-datastore-sqlite-adapter-expo.min.js.map +1 -0
- package/dist/aws-amplify-datastore-storage-adapter.js +1227 -1158
- package/dist/aws-amplify-datastore-storage-adapter.js.map +1 -1
- package/dist/aws-amplify-datastore-storage-adapter.min.js +1 -1
- package/dist/aws-amplify-datastore-storage-adapter.min.js.map +1 -1
- package/lib/ExpoSQLiteAdapter/ExpoSQLiteAdapter.d.ts +3 -0
- package/lib/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js +10 -0
- package/lib/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js.map +1 -0
- package/lib/ExpoSQLiteAdapter/ExpoSQLiteDatabase.d.ts +17 -0
- package/lib/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js +362 -0
- package/lib/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js.map +1 -0
- package/lib/SQLiteAdapter/SQLiteAdapter.d.ts +3 -23
- package/lib/SQLiteAdapter/SQLiteAdapter.js +3 -580
- package/lib/SQLiteAdapter/SQLiteAdapter.js.map +1 -1
- package/lib/SQLiteAdapter/SQLiteDatabase.d.ts +8 -8
- package/lib/SQLiteAdapter/SQLiteDatabase.js +46 -42
- package/lib/SQLiteAdapter/SQLiteDatabase.js.map +1 -1
- package/lib/common/CommonSQLiteAdapter.d.ts +23 -0
- package/lib/common/CommonSQLiteAdapter.js +582 -0
- package/lib/common/CommonSQLiteAdapter.js.map +1 -0
- package/lib/{SQLiteAdapter → common}/SQLiteUtils.d.ts +3 -2
- package/lib/{SQLiteAdapter → common}/SQLiteUtils.js +54 -3
- package/lib/common/SQLiteUtils.js.map +1 -0
- package/lib/common/constants.d.ts +1 -0
- package/lib/common/constants.js +4 -0
- package/lib/common/constants.js.map +1 -0
- package/lib/common/types.d.ts +13 -0
- package/lib/common/types.js +3 -0
- package/lib/common/types.js.map +1 -0
- package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteAdapter.d.ts +3 -0
- package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js +5 -0
- package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js.map +1 -0
- package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteDatabase.d.ts +17 -0
- package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js +360 -0
- package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js.map +1 -0
- package/lib-esm/SQLiteAdapter/SQLiteAdapter.d.ts +3 -23
- package/lib-esm/SQLiteAdapter/SQLiteAdapter.js +3 -580
- package/lib-esm/SQLiteAdapter/SQLiteAdapter.js.map +1 -1
- package/lib-esm/SQLiteAdapter/SQLiteDatabase.d.ts +8 -8
- package/lib-esm/SQLiteAdapter/SQLiteDatabase.js +46 -42
- package/lib-esm/SQLiteAdapter/SQLiteDatabase.js.map +1 -1
- package/lib-esm/common/CommonSQLiteAdapter.d.ts +23 -0
- package/lib-esm/common/CommonSQLiteAdapter.js +580 -0
- package/lib-esm/common/CommonSQLiteAdapter.js.map +1 -0
- package/lib-esm/{SQLiteAdapter → common}/SQLiteUtils.d.ts +3 -2
- package/lib-esm/{SQLiteAdapter → common}/SQLiteUtils.js +52 -2
- package/lib-esm/common/SQLiteUtils.js.map +1 -0
- package/lib-esm/common/constants.d.ts +1 -0
- package/lib-esm/common/constants.js +2 -0
- package/lib-esm/common/constants.js.map +1 -0
- package/lib-esm/common/types.d.ts +13 -0
- package/lib-esm/common/types.js +1 -0
- package/lib-esm/common/types.js.map +1 -0
- package/package.json +13 -7
- package/src/ExpoSQLiteAdapter/ExpoSQLiteAdapter.ts +8 -0
- package/src/ExpoSQLiteAdapter/ExpoSQLiteDatabase.ts +282 -0
- package/src/SQLiteAdapter/SQLiteAdapter.ts +5 -475
- package/src/SQLiteAdapter/SQLiteDatabase.ts +49 -53
- package/src/common/CommonSQLiteAdapter.ts +479 -0
- package/src/{SQLiteAdapter → common}/SQLiteUtils.ts +66 -5
- package/src/common/constants.ts +1 -0
- package/src/common/types.ts +29 -0
- package/webpack.config.dev.js +2 -0
- package/lib/SQLiteAdapter/SQLiteUtils.js.map +0 -1
- package/lib/SQLiteAdapter/types.d.ts +0 -2
- package/lib/SQLiteAdapter/types.js +0 -28
- package/lib/SQLiteAdapter/types.js.map +0 -1
- package/lib-esm/SQLiteAdapter/SQLiteUtils.js.map +0 -1
- package/lib-esm/SQLiteAdapter/types.d.ts +0 -2
- package/lib-esm/SQLiteAdapter/types.js +0 -25
- package/lib-esm/SQLiteAdapter/types.js.map +0 -1
- package/src/SQLiteAdapter/types.ts +0 -31
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
import { ConsoleLogger as Logger } from '@aws-amplify/core';
|
|
2
|
+
import {
|
|
3
|
+
generateSchemaStatements,
|
|
4
|
+
queryByIdStatement,
|
|
5
|
+
modelUpdateStatement,
|
|
6
|
+
modelInsertStatement,
|
|
7
|
+
queryAllStatement,
|
|
8
|
+
queryOneStatement,
|
|
9
|
+
deleteByIdStatement,
|
|
10
|
+
deleteByPredicateStatement,
|
|
11
|
+
} from '../common/SQLiteUtils';
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
StorageAdapter,
|
|
15
|
+
ModelInstanceCreator,
|
|
16
|
+
ModelPredicateCreator,
|
|
17
|
+
ModelSortPredicateCreator,
|
|
18
|
+
InternalSchema,
|
|
19
|
+
isPredicateObj,
|
|
20
|
+
ModelPredicate,
|
|
21
|
+
NamespaceResolver,
|
|
22
|
+
OpType,
|
|
23
|
+
PaginationInput,
|
|
24
|
+
PersistentModel,
|
|
25
|
+
PersistentModelConstructor,
|
|
26
|
+
PredicateObject,
|
|
27
|
+
PredicatesGroup,
|
|
28
|
+
QueryOne,
|
|
29
|
+
utils,
|
|
30
|
+
} from '@aws-amplify/datastore';
|
|
31
|
+
import { CommonSQLiteDatabase, ParameterizedStatement } from './types';
|
|
32
|
+
|
|
33
|
+
const { traverseModel, validatePredicate, isModelConstructor } = utils;
|
|
34
|
+
|
|
35
|
+
const logger = new Logger('DataStore');
|
|
36
|
+
|
|
37
|
+
export class CommonSQLiteAdapter implements StorageAdapter {
|
|
38
|
+
private schema: InternalSchema;
|
|
39
|
+
private namespaceResolver: NamespaceResolver;
|
|
40
|
+
private modelInstanceCreator: ModelInstanceCreator;
|
|
41
|
+
private getModelConstructorByModelName: (
|
|
42
|
+
namsespaceName: string,
|
|
43
|
+
modelName: string
|
|
44
|
+
) => PersistentModelConstructor<any>;
|
|
45
|
+
private db: CommonSQLiteDatabase;
|
|
46
|
+
private initPromise: Promise<void>;
|
|
47
|
+
private resolve: (value?: any) => void;
|
|
48
|
+
private reject: (value?: any) => void;
|
|
49
|
+
|
|
50
|
+
constructor(db: CommonSQLiteDatabase) {
|
|
51
|
+
this.db = db;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public async setUp(
|
|
55
|
+
theSchema: InternalSchema,
|
|
56
|
+
namespaceResolver: NamespaceResolver,
|
|
57
|
+
modelInstanceCreator: ModelInstanceCreator,
|
|
58
|
+
getModelConstructorByModelName: (
|
|
59
|
+
namsespaceName: string,
|
|
60
|
+
modelName: string
|
|
61
|
+
) => PersistentModelConstructor<any>
|
|
62
|
+
) {
|
|
63
|
+
if (!this.initPromise) {
|
|
64
|
+
this.initPromise = new Promise((res, rej) => {
|
|
65
|
+
this.resolve = res;
|
|
66
|
+
this.reject = rej;
|
|
67
|
+
});
|
|
68
|
+
} else {
|
|
69
|
+
await this.initPromise;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.schema = theSchema;
|
|
73
|
+
this.namespaceResolver = namespaceResolver;
|
|
74
|
+
this.modelInstanceCreator = modelInstanceCreator;
|
|
75
|
+
this.getModelConstructorByModelName = getModelConstructorByModelName;
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
await this.db.init();
|
|
79
|
+
const statements = generateSchemaStatements(this.schema);
|
|
80
|
+
await this.db.createSchema(statements);
|
|
81
|
+
|
|
82
|
+
this.resolve();
|
|
83
|
+
} catch (error) {
|
|
84
|
+
this.reject(error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async clear(): Promise<void> {
|
|
89
|
+
await this.db.clear();
|
|
90
|
+
|
|
91
|
+
this.initPromise = undefined;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async save<T extends PersistentModel>(
|
|
95
|
+
model: T,
|
|
96
|
+
condition?: ModelPredicate<T>
|
|
97
|
+
): Promise<[T, OpType.INSERT | OpType.UPDATE][]> {
|
|
98
|
+
const modelConstructor = Object.getPrototypeOf(model)
|
|
99
|
+
.constructor as PersistentModelConstructor<T>;
|
|
100
|
+
const { name: tableName } = modelConstructor;
|
|
101
|
+
const connectedModels = traverseModel(
|
|
102
|
+
modelConstructor.name,
|
|
103
|
+
model,
|
|
104
|
+
this.schema.namespaces[this.namespaceResolver(modelConstructor)],
|
|
105
|
+
this.modelInstanceCreator,
|
|
106
|
+
this.getModelConstructorByModelName
|
|
107
|
+
);
|
|
108
|
+
const connectionStoreNames = Object.values(connectedModels).map(
|
|
109
|
+
({ modelName, item, instance }) => {
|
|
110
|
+
return { modelName, item, instance };
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
const [queryStatement, params] = queryByIdStatement(model.id, tableName);
|
|
115
|
+
|
|
116
|
+
const fromDB = await this.db.get(queryStatement, params);
|
|
117
|
+
|
|
118
|
+
if (condition && fromDB) {
|
|
119
|
+
const predicates = ModelPredicateCreator.getPredicates(condition);
|
|
120
|
+
const { predicates: predicateObjs, type } = predicates;
|
|
121
|
+
|
|
122
|
+
const isValid = validatePredicate(fromDB, type, predicateObjs);
|
|
123
|
+
|
|
124
|
+
if (!isValid) {
|
|
125
|
+
const msg = 'Conditional update failed';
|
|
126
|
+
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
127
|
+
|
|
128
|
+
throw new Error(msg);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const result: [T, OpType.INSERT | OpType.UPDATE][] = [];
|
|
133
|
+
const saveStatements = new Set<ParameterizedStatement>();
|
|
134
|
+
|
|
135
|
+
for await (const resItem of connectionStoreNames) {
|
|
136
|
+
const { modelName, item, instance } = resItem;
|
|
137
|
+
const { id } = item;
|
|
138
|
+
|
|
139
|
+
const [queryStatement, params] = queryByIdStatement(id, modelName);
|
|
140
|
+
const fromDB = await this.db.get(queryStatement, params);
|
|
141
|
+
|
|
142
|
+
const opType: OpType =
|
|
143
|
+
fromDB === undefined ? OpType.INSERT : OpType.UPDATE;
|
|
144
|
+
|
|
145
|
+
const saveStatement = fromDB
|
|
146
|
+
? modelUpdateStatement(instance, modelName)
|
|
147
|
+
: modelInsertStatement(instance, modelName);
|
|
148
|
+
|
|
149
|
+
if (id === model.id || opType === OpType.INSERT) {
|
|
150
|
+
saveStatements.add(saveStatement);
|
|
151
|
+
result.push([instance, opType]);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
await this.db.batchSave(saveStatements);
|
|
156
|
+
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private async load<T>(
|
|
161
|
+
namespaceName: string,
|
|
162
|
+
srcModelName: string,
|
|
163
|
+
records: T[]
|
|
164
|
+
): Promise<T[]> {
|
|
165
|
+
const namespace = this.schema.namespaces[namespaceName];
|
|
166
|
+
const relations = namespace.relationships[srcModelName].relationTypes;
|
|
167
|
+
const connectionTableNames = relations.map(({ modelName }) => modelName);
|
|
168
|
+
|
|
169
|
+
const modelConstructor = this.getModelConstructorByModelName(
|
|
170
|
+
namespaceName,
|
|
171
|
+
srcModelName
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
if (connectionTableNames.length === 0) {
|
|
175
|
+
return records.map(record =>
|
|
176
|
+
this.modelInstanceCreator(modelConstructor, record)
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
for await (const relation of relations) {
|
|
181
|
+
const {
|
|
182
|
+
fieldName,
|
|
183
|
+
modelName: tableName,
|
|
184
|
+
targetName,
|
|
185
|
+
relationType,
|
|
186
|
+
} = relation;
|
|
187
|
+
|
|
188
|
+
const modelConstructor = this.getModelConstructorByModelName(
|
|
189
|
+
namespaceName,
|
|
190
|
+
tableName
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
// TODO: use SQL JOIN instead
|
|
194
|
+
switch (relationType) {
|
|
195
|
+
case 'HAS_ONE':
|
|
196
|
+
for await (const recordItem of records) {
|
|
197
|
+
const getByfield = recordItem[targetName] ? targetName : fieldName;
|
|
198
|
+
if (!recordItem[getByfield]) break;
|
|
199
|
+
|
|
200
|
+
const [queryStatement, params] = queryByIdStatement(
|
|
201
|
+
recordItem[getByfield],
|
|
202
|
+
tableName
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
const connectionRecord = await this.db.get(queryStatement, params);
|
|
206
|
+
|
|
207
|
+
recordItem[fieldName] =
|
|
208
|
+
connectionRecord &&
|
|
209
|
+
this.modelInstanceCreator(modelConstructor, connectionRecord);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
break;
|
|
213
|
+
case 'BELONGS_TO':
|
|
214
|
+
for await (const recordItem of records) {
|
|
215
|
+
if (recordItem[targetName]) {
|
|
216
|
+
const [queryStatement, params] = queryByIdStatement(
|
|
217
|
+
recordItem[targetName],
|
|
218
|
+
tableName
|
|
219
|
+
);
|
|
220
|
+
const connectionRecord = await this.db.get(
|
|
221
|
+
queryStatement,
|
|
222
|
+
params
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
recordItem[fieldName] =
|
|
226
|
+
connectionRecord &&
|
|
227
|
+
this.modelInstanceCreator(modelConstructor, connectionRecord);
|
|
228
|
+
delete recordItem[targetName];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
break;
|
|
233
|
+
case 'HAS_MANY':
|
|
234
|
+
// TODO: Lazy loading
|
|
235
|
+
break;
|
|
236
|
+
default:
|
|
237
|
+
const _: never = relationType as never;
|
|
238
|
+
throw new Error(`invalid relation type ${relationType}`);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return records.map(record =>
|
|
244
|
+
this.modelInstanceCreator(modelConstructor, record)
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
async query<T extends PersistentModel>(
|
|
249
|
+
modelConstructor: PersistentModelConstructor<T>,
|
|
250
|
+
predicate?: ModelPredicate<T>,
|
|
251
|
+
pagination?: PaginationInput<T>
|
|
252
|
+
): Promise<T[]> {
|
|
253
|
+
const { name: tableName } = modelConstructor;
|
|
254
|
+
const namespaceName = this.namespaceResolver(modelConstructor);
|
|
255
|
+
|
|
256
|
+
const predicates =
|
|
257
|
+
predicate && ModelPredicateCreator.getPredicates(predicate);
|
|
258
|
+
const sortPredicates =
|
|
259
|
+
pagination &&
|
|
260
|
+
pagination.sort &&
|
|
261
|
+
ModelSortPredicateCreator.getPredicates(pagination.sort);
|
|
262
|
+
const limit = pagination && pagination.limit;
|
|
263
|
+
const page = limit && pagination.page;
|
|
264
|
+
|
|
265
|
+
const queryById = predicates && this.idFromPredicate(predicates);
|
|
266
|
+
|
|
267
|
+
const records: T[] = <T[]>await (async () => {
|
|
268
|
+
if (queryById) {
|
|
269
|
+
const record = await this.getById(tableName, queryById);
|
|
270
|
+
return record ? [record] : [];
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const [queryStatement, params] = queryAllStatement(
|
|
274
|
+
tableName,
|
|
275
|
+
predicates,
|
|
276
|
+
sortPredicates,
|
|
277
|
+
limit,
|
|
278
|
+
page
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
return await this.db.getAll(queryStatement, params);
|
|
282
|
+
})();
|
|
283
|
+
|
|
284
|
+
return await this.load(namespaceName, modelConstructor.name, records);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
private async getById<T extends PersistentModel>(
|
|
288
|
+
tableName: string,
|
|
289
|
+
id: string
|
|
290
|
+
): Promise<T> {
|
|
291
|
+
const [queryStatement, params] = queryByIdStatement(id, tableName);
|
|
292
|
+
const record = await this.db.get<T>(queryStatement, params);
|
|
293
|
+
|
|
294
|
+
return record;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
private idFromPredicate<T extends PersistentModel>(
|
|
298
|
+
predicates: PredicatesGroup<T>
|
|
299
|
+
) {
|
|
300
|
+
const { predicates: predicateObjs } = predicates;
|
|
301
|
+
const idPredicate =
|
|
302
|
+
predicateObjs.length === 1 &&
|
|
303
|
+
(predicateObjs.find(
|
|
304
|
+
p => isPredicateObj(p) && p.field === 'id' && p.operator === 'eq'
|
|
305
|
+
) as PredicateObject<T>);
|
|
306
|
+
|
|
307
|
+
return idPredicate && idPredicate.operand;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
async queryOne<T extends PersistentModel>(
|
|
311
|
+
modelConstructor: PersistentModelConstructor<T>,
|
|
312
|
+
firstOrLast: QueryOne = QueryOne.FIRST
|
|
313
|
+
): Promise<T | undefined> {
|
|
314
|
+
const { name: tableName } = modelConstructor;
|
|
315
|
+
const [queryStatement, params] = queryOneStatement(firstOrLast, tableName);
|
|
316
|
+
|
|
317
|
+
const result = await this.db.get<T>(queryStatement, params);
|
|
318
|
+
|
|
319
|
+
const modelInstance =
|
|
320
|
+
result && this.modelInstanceCreator(modelConstructor, result);
|
|
321
|
+
|
|
322
|
+
return modelInstance;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Currently does not cascade
|
|
326
|
+
// TODO: use FKs in relations and have `ON DELETE CASCADE` set
|
|
327
|
+
// For Has Many and Has One relations to have SQL handle cascades automatically
|
|
328
|
+
async delete<T extends PersistentModel>(
|
|
329
|
+
modelOrModelConstructor: T | PersistentModelConstructor<T>,
|
|
330
|
+
condition?: ModelPredicate<T>
|
|
331
|
+
): Promise<[T[], T[]]> {
|
|
332
|
+
if (isModelConstructor(modelOrModelConstructor)) {
|
|
333
|
+
const modelConstructor = modelOrModelConstructor;
|
|
334
|
+
const namespaceName = this.namespaceResolver(modelConstructor);
|
|
335
|
+
const { name: tableName } = modelConstructor;
|
|
336
|
+
|
|
337
|
+
const predicates =
|
|
338
|
+
condition && ModelPredicateCreator.getPredicates(condition);
|
|
339
|
+
|
|
340
|
+
const queryStatement = queryAllStatement(tableName, predicates);
|
|
341
|
+
const deleteStatement = deleteByPredicateStatement(tableName, predicates);
|
|
342
|
+
|
|
343
|
+
const models = await this.db.selectAndDelete(
|
|
344
|
+
queryStatement,
|
|
345
|
+
deleteStatement
|
|
346
|
+
);
|
|
347
|
+
|
|
348
|
+
const modelInstances = await this.load(
|
|
349
|
+
namespaceName,
|
|
350
|
+
modelConstructor.name,
|
|
351
|
+
models
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
return [modelInstances, modelInstances];
|
|
355
|
+
} else {
|
|
356
|
+
const model = modelOrModelConstructor as T;
|
|
357
|
+
const modelConstructor = Object.getPrototypeOf(model)
|
|
358
|
+
.constructor as PersistentModelConstructor<T>;
|
|
359
|
+
const { name: tableName } = modelConstructor;
|
|
360
|
+
|
|
361
|
+
if (condition) {
|
|
362
|
+
const [queryStatement, params] = queryByIdStatement(
|
|
363
|
+
model.id,
|
|
364
|
+
tableName
|
|
365
|
+
);
|
|
366
|
+
|
|
367
|
+
const fromDB = await this.db.get(queryStatement, params);
|
|
368
|
+
|
|
369
|
+
if (fromDB === undefined) {
|
|
370
|
+
const msg = 'Model instance not found in storage';
|
|
371
|
+
logger.warn(msg, { model });
|
|
372
|
+
|
|
373
|
+
return [[model], []];
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
const predicates = ModelPredicateCreator.getPredicates(condition);
|
|
377
|
+
const { predicates: predicateObjs, type } = predicates;
|
|
378
|
+
|
|
379
|
+
const isValid = validatePredicate(fromDB, type, predicateObjs);
|
|
380
|
+
|
|
381
|
+
if (!isValid) {
|
|
382
|
+
const msg = 'Conditional update failed';
|
|
383
|
+
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
384
|
+
|
|
385
|
+
throw new Error(msg);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
const [deleteStatement, deleteParams] = deleteByIdStatement(
|
|
389
|
+
model.id,
|
|
390
|
+
tableName
|
|
391
|
+
);
|
|
392
|
+
await this.db.save(deleteStatement, deleteParams);
|
|
393
|
+
|
|
394
|
+
return [[model], [model]];
|
|
395
|
+
} else {
|
|
396
|
+
const [deleteStatement, params] = deleteByIdStatement(
|
|
397
|
+
model.id,
|
|
398
|
+
tableName
|
|
399
|
+
);
|
|
400
|
+
await this.db.save(deleteStatement, params);
|
|
401
|
+
|
|
402
|
+
return [[model], [model]];
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// Temp fix to test build, will either export a separate metadata type here, or implement Custom PK in this adapter
|
|
408
|
+
async batchSave<T extends PersistentModel>(
|
|
409
|
+
modelConstructor: PersistentModelConstructor<any>,
|
|
410
|
+
items: any[]
|
|
411
|
+
): Promise<[T, OpType][]> {
|
|
412
|
+
const { name: tableName } = modelConstructor;
|
|
413
|
+
const result: [T, OpType][] = [];
|
|
414
|
+
|
|
415
|
+
const itemsToSave: T[] = [];
|
|
416
|
+
// To determine whether an item should result in an insert or update operation
|
|
417
|
+
// We first need to query the local DB on the item id
|
|
418
|
+
const queryStatements = new Set<ParameterizedStatement>();
|
|
419
|
+
// Deletes don't need to be queried first, because if the item doesn't exist,
|
|
420
|
+
// the delete operation will be a no-op
|
|
421
|
+
const deleteStatements = new Set<ParameterizedStatement>();
|
|
422
|
+
const saveStatements = new Set<ParameterizedStatement>();
|
|
423
|
+
|
|
424
|
+
for (const item of items) {
|
|
425
|
+
const connectedModels = traverseModel(
|
|
426
|
+
modelConstructor.name,
|
|
427
|
+
this.modelInstanceCreator(modelConstructor, item),
|
|
428
|
+
this.schema.namespaces[this.namespaceResolver(modelConstructor)],
|
|
429
|
+
this.modelInstanceCreator,
|
|
430
|
+
this.getModelConstructorByModelName
|
|
431
|
+
);
|
|
432
|
+
|
|
433
|
+
const { id, _deleted } = item;
|
|
434
|
+
|
|
435
|
+
const { instance } = connectedModels.find(
|
|
436
|
+
({ instance }) => instance.id === id
|
|
437
|
+
);
|
|
438
|
+
|
|
439
|
+
if (_deleted) {
|
|
440
|
+
// create the delete statements right away
|
|
441
|
+
const deleteStatement = deleteByIdStatement(instance.id, tableName);
|
|
442
|
+
deleteStatements.add(deleteStatement);
|
|
443
|
+
result.push([<T>(<unknown>item), OpType.DELETE]);
|
|
444
|
+
} else {
|
|
445
|
+
// query statements for the saves at first
|
|
446
|
+
const queryStatement = queryByIdStatement(id, tableName);
|
|
447
|
+
queryStatements.add(queryStatement);
|
|
448
|
+
// combination of insert and update items
|
|
449
|
+
itemsToSave.push(instance);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// returns the query results for each of the save items
|
|
454
|
+
const queryResponses = await this.db.batchQuery(queryStatements);
|
|
455
|
+
|
|
456
|
+
queryResponses.forEach((response, idx) => {
|
|
457
|
+
if (response === undefined) {
|
|
458
|
+
const insertStatement = modelInsertStatement(
|
|
459
|
+
itemsToSave[idx],
|
|
460
|
+
tableName
|
|
461
|
+
);
|
|
462
|
+
saveStatements.add(insertStatement);
|
|
463
|
+
result.push([<T>(<unknown>itemsToSave[idx]), OpType.INSERT]);
|
|
464
|
+
} else {
|
|
465
|
+
const updateStatement = modelUpdateStatement(
|
|
466
|
+
itemsToSave[idx],
|
|
467
|
+
tableName
|
|
468
|
+
);
|
|
469
|
+
saveStatements.add(updateStatement);
|
|
470
|
+
result.push([<T>(<unknown>itemsToSave[idx]), OpType.UPDATE]);
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
// perform all of the insert/update/delete operations in a single transaction
|
|
475
|
+
await this.db.batchSave(saveStatements, deleteStatements);
|
|
476
|
+
|
|
477
|
+
return result;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
@@ -16,14 +16,13 @@ import {
|
|
|
16
16
|
ModelAttributeAuth,
|
|
17
17
|
ModelAuthRule,
|
|
18
18
|
utils,
|
|
19
|
+
GraphQLScalarType,
|
|
19
20
|
} from '@aws-amplify/datastore';
|
|
20
21
|
|
|
21
|
-
import {
|
|
22
|
+
import { ParameterizedStatement } from './types';
|
|
22
23
|
|
|
23
24
|
const { USER, isNonModelConstructor, isModelConstructor } = utils;
|
|
24
25
|
|
|
25
|
-
export type ParameterizedStatement = [string, any[]];
|
|
26
|
-
|
|
27
26
|
const keysFromModel = model =>
|
|
28
27
|
Object.keys(model)
|
|
29
28
|
.map(k => `"${k}"`)
|
|
@@ -72,6 +71,36 @@ function prepareValueForDML(value: unknown): any {
|
|
|
72
71
|
return `${value}`;
|
|
73
72
|
}
|
|
74
73
|
|
|
74
|
+
export function getSQLiteType(
|
|
75
|
+
scalar: keyof Omit<
|
|
76
|
+
typeof GraphQLScalarType,
|
|
77
|
+
'getJSType' | 'getValidationFunction' | 'getSQLiteType'
|
|
78
|
+
>
|
|
79
|
+
): 'TEXT' | 'INTEGER' | 'REAL' | 'BLOB' {
|
|
80
|
+
switch (scalar) {
|
|
81
|
+
case 'Boolean':
|
|
82
|
+
case 'Int':
|
|
83
|
+
case 'AWSTimestamp':
|
|
84
|
+
return 'INTEGER';
|
|
85
|
+
case 'ID':
|
|
86
|
+
case 'String':
|
|
87
|
+
case 'AWSDate':
|
|
88
|
+
case 'AWSTime':
|
|
89
|
+
case 'AWSDateTime':
|
|
90
|
+
case 'AWSEmail':
|
|
91
|
+
case 'AWSJSON':
|
|
92
|
+
case 'AWSURL':
|
|
93
|
+
case 'AWSPhone':
|
|
94
|
+
case 'AWSIPAddress':
|
|
95
|
+
return 'TEXT';
|
|
96
|
+
case 'Float':
|
|
97
|
+
return 'REAL';
|
|
98
|
+
default:
|
|
99
|
+
const _: never = scalar as never;
|
|
100
|
+
throw new Error(`unknown type ${scalar as string}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
75
104
|
export function generateSchemaStatements(schema: InternalSchema): string[] {
|
|
76
105
|
return Object.keys(schema.namespaces).flatMap(namespaceName => {
|
|
77
106
|
const namespace = schema.namespaces[namespaceName];
|
|
@@ -138,7 +167,7 @@ export function modelCreateTableStatement(
|
|
|
138
167
|
if (isTargetNameAssociation(field.association)) {
|
|
139
168
|
// check if this field has been explicitly defined in the model
|
|
140
169
|
const fkDefinedInModel = Object.values(model.fields).find(
|
|
141
|
-
(f: ModelField) => f.name === field
|
|
170
|
+
(f: ModelField) => f.name === field?.association?.targetName
|
|
142
171
|
);
|
|
143
172
|
|
|
144
173
|
// if the FK is not explicitly defined in the model, we have to add it here
|
|
@@ -230,6 +259,30 @@ const logicalOperatorMap = {
|
|
|
230
259
|
between: 'BETWEEN',
|
|
231
260
|
};
|
|
232
261
|
|
|
262
|
+
/**
|
|
263
|
+
* If the given (operator, operand) indicate the need for a special `NULL` comparison,
|
|
264
|
+
* that `WHERE` clause condition will be returned. If not special `NULL` handling is
|
|
265
|
+
* needed, `null` will be returned, and the caller should construct the `WHERE`
|
|
266
|
+
* clause component using the normal operator map(s) and parameterization.
|
|
267
|
+
*
|
|
268
|
+
* @param operator "beginsWith" | "contains" | "notContains" | "between"
|
|
269
|
+
* | "eq" | "ne" | "le" | "lt" | "ge" | "gt"
|
|
270
|
+
* @param operand any
|
|
271
|
+
* @returns (string | null) The `WHERE` clause component or `null` if N/A.
|
|
272
|
+
*/
|
|
273
|
+
function buildSpecialNullComparison(field, operator, operand) {
|
|
274
|
+
if (operand === null || operand === undefined) {
|
|
275
|
+
if (operator === 'eq') {
|
|
276
|
+
return `"${field}" IS NULL`;
|
|
277
|
+
} else if (operator === 'ne') {
|
|
278
|
+
return `"${field}" IS NOT NULL`;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// no special null handling required
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
|
|
233
286
|
const whereConditionFromPredicateObject = ({
|
|
234
287
|
field,
|
|
235
288
|
operator,
|
|
@@ -241,8 +294,16 @@ const whereConditionFromPredicateObject = ({
|
|
|
241
294
|
| keyof typeof comparisonOperatorMap;
|
|
242
295
|
operand: any;
|
|
243
296
|
}): ParameterizedStatement => {
|
|
244
|
-
const
|
|
297
|
+
const specialNullClause = buildSpecialNullComparison(
|
|
298
|
+
field,
|
|
299
|
+
operator,
|
|
300
|
+
operand
|
|
301
|
+
);
|
|
302
|
+
if (specialNullClause) {
|
|
303
|
+
return [specialNullClause, []];
|
|
304
|
+
}
|
|
245
305
|
|
|
306
|
+
const comparisonOperator = comparisonOperatorMap[operator];
|
|
246
307
|
if (comparisonOperator) {
|
|
247
308
|
return [`"${field}" ${comparisonOperator} ?`, [operand]];
|
|
248
309
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const DB_NAME = 'AmplifyDatastore';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PersistentModel } from '@aws-amplify/datastore';
|
|
2
|
+
|
|
3
|
+
export interface CommonSQLiteDatabase {
|
|
4
|
+
init(): Promise<void>;
|
|
5
|
+
createSchema(statements: string[]): Promise<void>;
|
|
6
|
+
clear(): Promise<void>;
|
|
7
|
+
get<T extends PersistentModel>(
|
|
8
|
+
statement: string,
|
|
9
|
+
params: (string | number)[]
|
|
10
|
+
): Promise<T>;
|
|
11
|
+
getAll<T extends PersistentModel>(
|
|
12
|
+
statement: string,
|
|
13
|
+
params: (string | number)[]
|
|
14
|
+
): Promise<T[]>;
|
|
15
|
+
save(statement: string, params: (string | number)[]): Promise<void>;
|
|
16
|
+
batchQuery<T = any>(
|
|
17
|
+
queryParameterizedStatement: Set<ParameterizedStatement>
|
|
18
|
+
): Promise<T[]>;
|
|
19
|
+
batchSave(
|
|
20
|
+
saveParameterizedStatements: Set<ParameterizedStatement>,
|
|
21
|
+
deleteParameterizedStatements?: Set<ParameterizedStatement>
|
|
22
|
+
): Promise<void>;
|
|
23
|
+
selectAndDelete<T = any>(
|
|
24
|
+
queryParameterizedStatement: ParameterizedStatement,
|
|
25
|
+
deleteParameterizedStatement: ParameterizedStatement
|
|
26
|
+
): Promise<T[]>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type ParameterizedStatement = [string, any[]];
|
package/webpack.config.dev.js
CHANGED
|
@@ -2,5 +2,7 @@ var config = require('./webpack.config.js');
|
|
|
2
2
|
|
|
3
3
|
var entry = {
|
|
4
4
|
'aws-amplify-datastore-storage-adapter': './lib-esm/index.js',
|
|
5
|
+
'aws-amplify-datastore-sqlite-adapter-expo':
|
|
6
|
+
'./lib-esm/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js',
|
|
5
7
|
};
|
|
6
8
|
module.exports = Object.assign(config, { entry, mode: 'development' });
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SQLiteUtils.js","sourceRoot":"","sources":["../../src/SQLiteAdapter/SQLiteUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function getSQLiteType(scalar) {
|
|
4
|
-
switch (scalar) {
|
|
5
|
-
case 'Boolean':
|
|
6
|
-
case 'Int':
|
|
7
|
-
case 'AWSTimestamp':
|
|
8
|
-
return 'INTEGER';
|
|
9
|
-
case 'ID':
|
|
10
|
-
case 'String':
|
|
11
|
-
case 'AWSDate':
|
|
12
|
-
case 'AWSTime':
|
|
13
|
-
case 'AWSDateTime':
|
|
14
|
-
case 'AWSEmail':
|
|
15
|
-
case 'AWSJSON':
|
|
16
|
-
case 'AWSURL':
|
|
17
|
-
case 'AWSPhone':
|
|
18
|
-
case 'AWSIPAddress':
|
|
19
|
-
return 'TEXT';
|
|
20
|
-
case 'Float':
|
|
21
|
-
return 'REAL';
|
|
22
|
-
default:
|
|
23
|
-
var _ = scalar;
|
|
24
|
-
throw new Error("unknown type " + scalar);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.getSQLiteType = getSQLiteType;
|
|
28
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/SQLiteAdapter/types.ts"],"names":[],"mappings":";;AAEA,SAAgB,aAAa,CAC5B,MAGC;IAED,QAAQ,MAAM,EAAE;QACf,KAAK,SAAS,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,cAAc;YAClB,OAAO,SAAS,CAAC;QAClB,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YAClB,OAAO,MAAM,CAAC;QACf,KAAK,OAAO;YACX,OAAO,MAAM,CAAC;QACf;YACC,IAAM,CAAC,GAAU,MAAe,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,kBAAgB,MAAkB,CAAC,CAAC;KACrD;AACF,CAAC;AA5BD,sCA4BC"}
|