Skip to content

Commit

Permalink
chore(data-storage-adapter): manual fix of linter reported issues
Browse files Browse the repository at this point in the history
  • Loading branch information
HuiSF committed May 2, 2024
1 parent d65896a commit 6cb3e71
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -107,21 +107,23 @@ class ExpoSQLiteDatabase implements CommonSQLiteDatabase {
public batchQuery<T = any>(
queryParameterizedStatements = new Set<ParameterizedStatement>(),
): Promise<T[]> {
return new Promise((resolveTransaction, rejectTransaction) => {
return new Promise((resolve, reject) => {
const resolveTransaction = resolve;
const rejectTransaction = reject;
this.db.transaction(async transaction => {
try {
const results: any[] = await Promise.all(
[...queryParameterizedStatements].map(
([statement, params]) =>
new Promise((resolve, reject) => {
new Promise((_resolve, _reject) => {
transaction.executeSql(
statement,
params,
(_, result) => {
resolve(result.rows._array[0]);
_resolve(result.rows._array[0]);
},
(_, error) => {
reject(error);
_reject(error);
logger.warn(error);

return true;
Expand All @@ -143,22 +145,24 @@ class ExpoSQLiteDatabase implements CommonSQLiteDatabase {
saveParameterizedStatements = new Set<ParameterizedStatement>(),
deleteParameterizedStatements?: Set<ParameterizedStatement>,
): Promise<void> {
return new Promise((resolveTransaction, rejectTransaction) => {
return new Promise((resolve, reject) => {
const resolveTransaction = resolve;
const rejectTransaction = reject;
this.db.transaction(async transaction => {
try {
// await for all sql statements promises to resolve
await Promise.all(
[...saveParameterizedStatements].map(
([statement, params]) =>
new Promise((resolve, reject) => {
new Promise((_resolve, _reject) => {
transaction.executeSql(
statement,
params,
() => {
resolve(null);
_resolve(null);
},
(_, error) => {
reject(error);
_reject(error);
logger.warn(error);

return true;
Expand All @@ -171,15 +175,15 @@ class ExpoSQLiteDatabase implements CommonSQLiteDatabase {
await Promise.all(
[...deleteParameterizedStatements].map(
([statement, params]) =>
new Promise((resolve, reject) => {
new Promise((_resolve, _reject) => {
transaction.executeSql(
statement,
params,
() => {
resolve(null);
_resolve(null);
},
(_, error) => {
reject(error);
_reject(error);
logger.warn(error);

return true;
Expand All @@ -205,33 +209,35 @@ class ExpoSQLiteDatabase implements CommonSQLiteDatabase {
const [queryStatement, queryParams] = queryParameterizedStatement;
const [deleteStatement, deleteParams] = deleteParameterizedStatement;

return new Promise((resolveTransaction, rejectTransaction) => {
return new Promise((resolve, reject) => {
const resolveTransaction = resolve;
const rejectTransaction = reject;
this.db.transaction(async transaction => {
try {
const result: T[] = await new Promise((resolve, reject) => {
const result: T[] = await new Promise((_resolve, _reject) => {
transaction.executeSql(
queryStatement,
queryParams,
(_, result) => {
resolve(result.rows._array || []);
(_, sqlResult) => {
_resolve(sqlResult.rows._array || []);
},
(_, error) => {
reject(error);
_reject(error);
logger.warn(error);

return true;
},
);
});
await new Promise((resolve, reject) => {
await new Promise((_resolve, _reject) => {
transaction.executeSql(
deleteStatement,
deleteParams,
() => {
resolve(null);
_resolve(null);
},
(_, error) => {
reject(error);
_reject(error);
logger.warn(error);

return true;
Expand All @@ -248,21 +254,23 @@ class ExpoSQLiteDatabase implements CommonSQLiteDatabase {
}

private executeStatements(statements: string[]): Promise<void> {
return new Promise((resolveTransaction, rejectTransaction) => {
return new Promise((resolve, reject) => {
const resolveTransaction = resolve;
const rejectTransaction = reject;
this.db.transaction(async transaction => {
try {
await Promise.all(
statements.map(
statement =>
new Promise((resolve, reject) => {
new Promise((_resolve, _reject) => {
transaction.executeSql(
statement,
[],
() => {
resolve(null);
_resolve(null);
},
(_, error) => {
reject(error);
_reject(error);

return true;
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,14 @@ class SQLiteDatabase implements CommonSQLiteDatabase {
},
logger.warn,
);
tx.executeSql(deleteStatement, deleteParams, () => {}, logger.warn);
tx.executeSql(
deleteStatement,
deleteParams,
() => {
// no-op
},
logger.warn,
);
});

return results;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ export class CommonSQLiteAdapter implements StorageAdapter {
) => PersistentModelConstructor<any>,
) {
if (!this.initPromise) {
this.initPromise = new Promise((res, rej) => {
this.resolve = res;
this.reject = rej;
this.initPromise = new Promise((_resolve, _reject) => {
this.resolve = _resolve;
this.reject = _reject;
});
} else {
await this.initPromise;
Expand All @@ -89,6 +89,7 @@ export class CommonSQLiteAdapter implements StorageAdapter {
this.schema.namespaces.user.models,
).some(model =>
Object.values(model.fields).some(field =>
// eslint-disable-next-line no-prototype-builtins
field.association?.hasOwnProperty('targetNames'),
),
);
Expand Down Expand Up @@ -158,13 +159,19 @@ export class CommonSQLiteAdapter implements StorageAdapter {
const { modelName, item, instance } = resItem;
const { id } = item;

const [queryStatement, params] = queryByIdStatement(id, modelName);
const fromDB = await this.db.get(queryStatement, params);
const [queryStatementForRestItem, paramsForRestItem] = queryByIdStatement(
id,
modelName,
);
const fromDBForRestItem = await this.db.get(
queryStatementForRestItem,
paramsForRestItem,
);

const opType: OpType =
fromDB === undefined ? OpType.INSERT : OpType.UPDATE;
fromDBForRestItem === undefined ? OpType.INSERT : OpType.UPDATE;

const saveStatement = fromDB
const saveStatement = fromDBForRestItem
? modelUpdateStatement(instance, modelName)
: modelInsertStatement(instance, modelName);

Expand Down Expand Up @@ -247,10 +254,10 @@ export class CommonSQLiteAdapter implements StorageAdapter {
page,
);

return await this.db.getAll(queryStatement, params);
return this.db.getAll(queryStatement, params);
})()) as T[];

return await this.load(namespaceName, modelConstructor.name, records);
return this.load(namespaceName, modelConstructor.name, records);
}

private async getById<T extends PersistentModel>(
Expand Down Expand Up @@ -401,7 +408,8 @@ export class CommonSQLiteAdapter implements StorageAdapter {
const { id, _deleted } = item;

const { instance } = connectedModels.find(
({ instance }) => instance.id === id,
({ instance: connectedModelInstance }) =>
connectedModelInstance.id === id,
);

if (_deleted) {
Expand Down
32 changes: 18 additions & 14 deletions packages/datastore-storage-adapter/src/common/SQLiteUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,10 @@ export function getSQLiteType(
return 'TEXT';
case 'Float':
return 'REAL';
default:
default: {
const _: never = scalar as never;
throw new Error(`unknown type ${scalar as string}`);
}
}
}

Expand Down Expand Up @@ -342,10 +343,11 @@ export const whereConditionFromPredicateObject = ({
case 'notContains':
statement = [`instr("${field}", ?) ${logicalOperator}`, [operand]];
break;
default:
default: {
const _: never = logicalOperatorKey;
// Incorrect WHERE clause can result in data loss
throw new Error('Cannot map predicate to a valid WHERE clause');
}
}

return statement;
Expand All @@ -364,12 +366,13 @@ export function whereClauseFromPredicate<T extends PersistentModel>(
return [whereClause, params];

function recurse(
predicate: PredicatesGroup<T> | PredicateObject<T>,
result = [],
params = [],
recursedPredicate: PredicatesGroup<T> | PredicateObject<T>,
recursedResult = [],
recursedParams = [],
): void {
if (isPredicateGroup(predicate)) {
const { type: groupType, predicates: groupPredicates } = predicate;
if (isPredicateGroup(recursedPredicate)) {
const { type: groupType, predicates: groupPredicates } =
recursedPredicate;
let filterType = '';
let isNegation = false;
switch (groupType) {
Expand All @@ -382,25 +385,26 @@ export function whereClauseFromPredicate<T extends PersistentModel>(
case 'or':
filterType = 'OR';
break;
default:
default: {
const _: never = groupType as never;
throw new Error(`Invalid ${groupType}`);
}
}

const groupResult = [];
for (const p of groupPredicates) {
recurse(p, groupResult, params);
recurse(p, groupResult, recursedParams);
}
result.push(
recursedResult.push(
`${isNegation ? 'NOT' : ''}(${groupResult.join(` ${filterType} `)})`,
);
} else if (isPredicateObj(predicate)) {
} else if (isPredicateObj(recursedPredicate)) {
const [condition, conditionParams] =
whereConditionFromPredicateObject(predicate);
whereConditionFromPredicateObject(recursedPredicate);

result.push(condition);
recursedResult.push(condition);

params.push(...conditionParams);
recursedParams.push(...conditionParams);
}
}
}
Expand Down

0 comments on commit 6cb3e71

Please sign in to comment.