Skip to content

Commit 2b40cbb

Browse files
committed
push
1 parent 36f469e commit 2b40cbb

File tree

11 files changed

+146
-60
lines changed

11 files changed

+146
-60
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,4 @@
6464
"react-app"
6565
]
6666
}
67-
}
67+
}

src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ function App() {
7373
status: false
7474
},
7575
{
76-
userId: '6',
76+
userId: '7',
7777
name: '7',
7878
email: '7',
7979
status: false

src/services/SqliteMobile/SqliteMobile.ts

Lines changed: 127 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {Attribute, Attributes, Manager, Statement, StringMap} from './metadata';
2-
import {buildToSave, buildToSaveBatch} from './build';
1+
import { Attribute, Attributes, Manager, Statement, StringMap } from './metadata';
2+
import { buildToSave, buildToSaveBatch } from './build';
33

44
export class DatabaseManager implements Manager {
55
constructor(public database: any) {
@@ -13,8 +13,8 @@ export class DatabaseManager implements Manager {
1313
exec(sql: string, args?: any[]): Promise<number> {
1414
return exec(this.database, sql, args);
1515
}
16-
execBatch(statements: Statement[]): Promise<number> {
17-
return execBatch(this.database, statements);
16+
execBatch(statements: Statement[], firstSuccess?: boolean): Promise<number> {
17+
return execBatch(this.database, statements, firstSuccess);
1818
}
1919
query<T>(sql: string, args?: any[], m?: StringMap, fields?: Attribute[]): Promise<T[]> {
2020
return query(this.database, sql, args, m, fields);
@@ -31,71 +31,158 @@ export class DatabaseManager implements Manager {
3131
}
3232

3333
export function execute(db: any, sql: string): Promise<void> {
34-
return new Promise<void>((resolve, reject) => {
35-
return db.transaction(txn => {
36-
txn.executeSql(sql, [], () => {
34+
if (db.executeSql) {
35+
return new Promise<void>((resolve, reject) => {
36+
db.executeSql(sql, [], () => {
3737
return resolve();
3838
}, (err: any) => {
3939
return reject(err);
4040
});
4141
});
42-
});
42+
} else {
43+
return new Promise<void>((resolve, reject) => {
44+
return db.transaction(txn => {
45+
txn.executeSql(sql, [], () => {
46+
return resolve();
47+
});
48+
}, (err: any) => {
49+
return reject(err);
50+
});
51+
});
52+
}
53+
}
54+
export function execBatch(db: any, statements: Statement[], firstSuccess?: boolean): Promise<number> {
55+
if (!statements || statements.length === 0) {
56+
return Promise.resolve(0);
57+
} else if (statements.length === 1) {
58+
return exec(db, statements[0].query, statements[0].params);
59+
}
60+
if (firstSuccess) {
61+
return new Promise<number>((resolve, reject) => {
62+
return db.transaction(txn => {
63+
return txn.executeSql(statements[0].query, statements[0].params, (tx, result) => {
64+
if (result && result.rowsAffected > 0) {
65+
let listStatements = statements.slice(1);
66+
listStatements.forEach(item => {
67+
txn.executeSql(item.query, toArray(item.params));
68+
});
69+
}
70+
}, (err: any) => {
71+
return reject(err);
72+
});
73+
}, (e: any) => {
74+
reject(e);
75+
}, () => {
76+
resolve(1);
77+
});
78+
});
79+
} else {
80+
return new Promise<number>((resolve, reject) => {
81+
return db.transaction(txn => {
82+
statements.forEach(item => {
83+
txn.executeSql(item.query, toArray(item.params));
84+
})
85+
}, (e: any) => {
86+
console.log(e);
87+
reject(e);
88+
}, () => {
89+
resolve(1);
90+
});
91+
});
92+
}
4393
}
44-
export function execBatch(db: any, statements: Statement[]): Promise<number> {
94+
export function getTransaction(db: any): Promise<any> {
4595
return new Promise<number>((resolve, reject) => {
4696
return db.transaction(txn => {
47-
statements.forEach(item => {
48-
txn.executeSql(item.query, toArray(item.params));
49-
})
50-
}, (e: any) => {
51-
console.log(e);
52-
reject(e);
53-
}, () => {
54-
resolve(1);
97+
return resolve(txn);
5598
});
5699
});
57100
}
101+
/**
102+
*
103+
* @param db can be db or transaction
104+
* @param sql
105+
* @param args
106+
*/
58107
export function exec(db: any, sql: string, args?: any[]): Promise<number> {
59-
const p = args ? toArray(args) : [];
60-
console.log({p});
61-
return new Promise<number>((resolve, reject) => {
62-
return db.transaction(txn => {
63-
txn.executeSql(sql, p, () => {
64-
return resolve(1);
65-
}, (err: any) => {
66-
console.log({ err });
67-
return reject(0);
108+
const p = toArray(args);
109+
if (db.executeSql) {
110+
return new Promise<number>((resolve, reject) => {
111+
db.executeSql(sql, p, (tx, result) => {
112+
if (result && result.rowsAffected > 0) {
113+
return resolve(1);
114+
} else if (!result) {
115+
return reject(0);
116+
}
68117
});
69118
});
70-
});
119+
} else {
120+
console.log('db does not have executeSql fuction');
121+
return new Promise<number>((resolve, reject) => {
122+
return db.transaction(txn => {
123+
txn.executeSql(sql, p, (tx, result) => {
124+
if (result && result.rowsAffected > 0) {
125+
return resolve(1);
126+
}
127+
});
128+
}, (e: any) => {
129+
console.log(e);
130+
reject(e);
131+
}, () => {
132+
resolve(1);
133+
});
134+
});
135+
}
71136
}
72137
export function query<T>(db: any, sql: string, args?: any[], m?: StringMap, bools?: Attribute[]): Promise<T[]> {
73138
const p = args ? args : [];
74-
return new Promise<T[]>((resolve, reject) => {
75-
return db.transaction(txn => {
76-
txn.executeSql(sql, p, (tx, results: any) => {
139+
console.log(db);
140+
if (db.executeSql) {
141+
return new Promise<T[]>((resolve, reject) => {
142+
db.executeSql(sql, p, (tx, results: any) => {
77143
return resolve(handleResults<T>(results.rows._array, m, bools));
78144
});
79-
}, (err: any) => {
80-
reject(err);
81145
});
82-
});
146+
} else {
147+
return new Promise<T[]>((resolve, reject) => {
148+
return db.transaction(txn => {
149+
txn.executeSql(sql, p, (tx, results: any) => {
150+
return resolve(handleResults<T>(results.rows._array, m, bools));
151+
});
152+
}, (err: any) => {
153+
reject(err);
154+
});
155+
});
156+
}
83157
}
84158
export function queryOne<T>(db: any, sql: string, args?: any[], m?: StringMap, bools?: Attribute[]): Promise<T> {
85159
const p = args ? args : [];
86-
return new Promise<T>((resolve, reject) => {
87-
return db.transaction(txn => {
88-
txn.executeSql(sql, p, (tx, result: any) => {
160+
if (db.executeSql) {
161+
return new Promise<T>((resolve, reject) => {
162+
db.executeSql(sql, p, (tx, result: any) => {
89163
if (result.rows && result.rows._array && result.rows.length > 0) {
90-
return resolve(handleResult<T>(result.rows._array, m, bools));
164+
return resolve(handleResult<T>(result.rows._array, m, bools));
91165
} else {
92166
return resolve(null);
93167
}
94168
});
95-
}, (err: any) => {
96-
reject(err);
97169
});
98-
});
170+
} else {
171+
return new Promise<T>((resolve, reject) => {
172+
return db.transaction(txn => {
173+
txn.executeSql(sql, p, (tx, result: any) => {
174+
console.log({ tx }, { result });
175+
if (result.rows && result.rows._array && result.rows.length > 0) {
176+
return resolve(handleResult<T>(result.rows._array, m, bools));
177+
} else {
178+
return resolve(null);
179+
}
180+
});
181+
}, (err: any) => {
182+
reject(err);
183+
});
184+
});
185+
}
99186
}
100187
export function execScalar<T>(db: any, sql: string, args?: any[]): Promise<T> {
101188
return queryOne<T>(db, sql, args).then(r => {

src/services/SqliteMobile/metadata.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export interface Statement {
88

99
export interface Manager {
1010
exec(sql: string, args?: any[]): Promise<number>;
11-
execBatch(statements: Statement[]): Promise<number>;
11+
execBatch(statements: Statement[], firstSuccess?: boolean): Promise<number>;
1212
query<T>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[]): Promise<T[]>;
1313
queryOne<T>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[]): Promise<T>;
1414
execScalar<T>(sql: string, args?: any[]): Promise<T>;

src/sqlite-hook.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import { DatabaseManager } from "./services/SqliteMobile/SqliteMobile";
55

66
export const useSqlite = () => {
77
// @ts-ignore: Unreachable code error
8-
const database = window.sqlitePlugin.openDatabase('database.db','1.0', 'user database', 1000000);
8+
const database = window.sqlitePlugin.openDatabase('database.db', '1.0', 'user database', 1000000);
99
const [users, setUser] = useState<User[]>([]);
1010
const sqliteUser = new DatabaseManager(database);
1111

1212
useEffect(() => {
13-
(() => {
14-
// deleteTable();
15-
initTable();
16-
})();
13+
(() => {
14+
// deleteTable();
15+
initTable();
16+
})();
1717
}, []);
1818

1919
const initTable = () => {
@@ -46,7 +46,7 @@ export const useSqlite = () => {
4646

4747
const insert = (user: User) => {
4848
const string = 'INSERT INTO users (userId, name, email, status) VALUES (?,?,?,?)';
49-
const args =[user.userId, user.name, user.email, user.status];
49+
const args = [user.userId, user.name, user.email, user.status];
5050
sqliteUser.exec(string, args).then(() => {
5151
alert('Insert Success!');
5252
}).catch(() => alert('Insert Failed!'));
@@ -72,13 +72,12 @@ export const useSqlite = () => {
7272

7373
const insertMany = (users: User[]) => {
7474
const statements: Statement[] = users.map((item) => {
75-
return { query: 'INSERT INTO users (userId, name, email, status) VALUES (?,?,?,?)', params: [item.userId, item.name, item.email, item.status]};
75+
return { query: 'INSERT INTO users (userId, name, email, status) VALUES (?,?,?,?)', params: [item.userId, item.name, item.email, item.status] };
7676
});
77-
return sqliteUser.execBatch(statements).then(() => {
78-
console.log({statements});
77+
return sqliteUser.execBatch(statements, true).then(() => {
7978
alert('Success!');
8079
}).catch(() => alert('Rollback!'));
8180
}
8281

83-
return {database, all, insert, users, deleteUser, load, update, insertMany};
82+
return { database, all, insert, users, deleteUser, load, update, insertMany };
8483
};

www/asset-manifest.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"files": {
33
"main.css": "./static/css/main.48c09e40.chunk.css",
4-
"main.js": "./static/js/main.be3b3e98.chunk.js",
5-
"main.js.map": "./static/js/main.be3b3e98.chunk.js.map",
4+
"main.js": "./static/js/main.44f580df.chunk.js",
5+
"main.js.map": "./static/js/main.44f580df.chunk.js.map",
66
"runtime-main.js": "./static/js/runtime-main.8b1a174c.js",
77
"runtime-main.js.map": "./static/js/runtime-main.8b1a174c.js.map",
88
"static/js/2.d470b951.chunk.js": "./static/js/2.d470b951.chunk.js",
@@ -18,6 +18,6 @@
1818
"static/js/runtime-main.8b1a174c.js",
1919
"static/js/2.d470b951.chunk.js",
2020
"static/css/main.48c09e40.chunk.css",
21-
"static/js/main.be3b3e98.chunk.js"
21+
"static/js/main.44f580df.chunk.js"
2222
]
2323
}

www/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><meta name="format-detection" content="telephone=no"><meta name="msapplication-tap-highlight" content="no"><meta name="viewport" content="initial-scale=1,width=device-width,viewport-fit=cover,maximum-scale=1"><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>React App</title><link href="./static/css/main.48c09e40.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="cordova.js" type="text/javascript"></script><script>!function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],s=0,p=[];s<i.length;s++)a=i[s],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&p.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{3:"4acb901f"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="./",a.oe=function(e){throw console.error(e),e};var i=this["webpackJsonpio.cordova.hellocordova"]=this["webpackJsonpio.cordova.hellocordova"]||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var f=c;t()}([])</script><script src="./static/js/2.d470b951.chunk.js"></script><script src="./static/js/main.be3b3e98.chunk.js"></script></body></html>
1+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><meta name="format-detection" content="telephone=no"><meta name="msapplication-tap-highlight" content="no"><meta name="viewport" content="initial-scale=1,width=device-width,viewport-fit=cover,maximum-scale=1"><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>React App</title><link href="./static/css/main.48c09e40.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="cordova.js" type="text/javascript"></script><script>!function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],s=0,p=[];s<i.length;s++)a=i[s],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&p.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{3:"4acb901f"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="./",a.oe=function(e){throw console.error(e),e};var i=this["webpackJsonpio.cordova.hellocordova"]=this["webpackJsonpio.cordova.hellocordova"]||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var f=c;t()}([])</script><script src="./static/js/2.d470b951.chunk.js"></script><script src="./static/js/main.44f580df.chunk.js"></script></body></html>

0 commit comments

Comments
 (0)