· 8 years ago · Jun 11, 2018, 07:16 AM
1import SQLite from 'react-native-sqlcipher-storage';
2import { firstSync } from './Database/index';
3
4const DEFAULT_PRIMARY_KEY = 'ID INTEGER AUTOINCREMENT PRIMARY KEY '
5class DataClient {
6 database = null;
7 constructor() {
8 this.insert = this.insert.bind(this);
9 this.initializeDB().then(
10 database => {
11 if (database) {
12 this.database = database;
13 this.createTable({
14 name: "Tables",
15 columns: [{ name: "Name", type: "TEXT" }, { name: "SQL", type: "TEXT" }, { name: "API", type: "TEXT" }]
16 })
17 }
18 else {
19 console.log('Database wasn\'t created / couldn\'t be opened');
20 }
21 }
22 );
23 }
24
25 initializeDB = async (dbName, key) => {
26 try {
27 console.log('SQLite', SQLite);
28 let database = await SQLite.openDatabase({ name: 'test.db', key: 'Password' })
29 return database;
30 } catch (error) {
31 console.log(error);
32 return null;
33 }
34 }
35
36 createTable = (schema) => {
37 return new Promise((resolve, reject) => {
38 try {
39 resolve(this.createTables(schema));
40 } catch (err) {
41 reject(err);
42 }
43 });
44 }
45
46
47
48 createTables = async (tables) => {
49 let statements = []
50 try {
51 console.log('Table:', tables);
52 tables.map(
53 (table) => {
54 statements.push(this.createTableStatement(table));
55 }
56 );
57 await this.database.transaction(
58 async (tx) => {
59 statements.map(
60 async (statement) => {
61 await tx.executeSql(statement)
62 await tx.executeSql("INSERT INTO `Tables` values (???)", [table.name, statement, table.api])
63 }
64 )
65 }
66 );
67 return statements;
68 } catch (e) {
69 throw e;
70 }
71 }
72
73 pull = () => {
74
75 }
76
77 push = () => {
78
79 }
80
81 select = (tableName, columns, whereClause) => {
82
83 }
84
85 where = () => {
86
87 }
88
89 insert = (tableName, data) => {
90 let insertString = this.createInsertStatement(tableName, data);
91 return new Promise((resolve, reject) => {
92 resolve(this.database.transaction(
93 async (tx) => {
94 console.log(tx);
95 await tx.executeSql(insertString)
96 },
97 (error) => {
98 console.log('error', error);
99 },
100 () => {
101 console.log('Success');
102 }
103 ))
104 });
105 }
106
107
108 update = () => {
109 let updateStatement = this.createUpdateStatement(tableName, data);
110 return new Promise((resolve, reject) => {
111 resolve(this.database.transaction(
112 async (tx) => {
113 console.log(tx);
114 await tx.executeSql(insertString, Object.values(data))
115 },
116 (error) => {
117 console.log('error', error);
118 },
119 () => {
120 console.log('Success');
121 }
122 ))
123 });
124 }
125
126 delete = () => {
127
128 }
129
130 createTableStatement = (schema) => {
131 let statement = "CREATE TABLE IF NOT EXISTS`" + schema.name + "` ( ";
132 let primaryKeyToken = schema.primaryKey ? (schema.primaryKey.name + ' ' + schema.primaryKey.type + ' PRIMARY KEY ') : DEFAULT_PRIMARY_KEY;
133 statement = statement + primaryKeyToken;
134 schema.columns.map((column) => {
135 statement = statement.concat(', ' + column.name + ' ' + column.type);
136 })
137 statement = statement + ');';
138 return statement;
139 }
140
141 createInsertStatement = (tableName, data) => {
142 let columnsString = ' (';
143 let valuesString = '(';
144 Object.keys(data).map((key, index) => {
145 columnsString += index ? ', ' : '';
146 valuesString += index ? ', ' : '';
147 columnsString += key;
148 valuesString += '"' + data[key] + '"';
149 });
150 columnsString += ')';
151 valuesString += ')';
152 return "insert into " + tableName + columnsString + " values " + valuesString;
153 }
154
155 createUpdateStatement = (tableName, data) => {
156 let statement = "UPDATE " + tableName + " SET "
157 Object.keys(data).map((key, index) => {
158 statement += index ? ", " : ""
159 statement += key + " '?'"
160 })
161 return statement
162 }
163
164 createDeleteStatement = (tableName, data) => {
165 return "DELETE from " + tableName + " WHERE " + Object.keys(data)[0] + " = " + Object.values(data)[0]
166 }
167}
168
169
170
171export let dataClient = new DataClient()