1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci 16fb726d48Sopenharmony_ciimportScripts('sql-wasm.js'); 17fb726d48Sopenharmony_ci// @ts-ignore 18fb726d48Sopenharmony_ciimport { temp_init_sql_list } from './TempSql'; 19fb726d48Sopenharmony_ciimport { execProtoForWorker } from './data-trafic/utils/ExecProtoForWorker'; 20fb726d48Sopenharmony_ciimport { TraficEnum } from './data-trafic/utils/QueryEnum'; 21fb726d48Sopenharmony_ci 22fb726d48Sopenharmony_cilet conn: unknown = null; 23fb726d48Sopenharmony_ci 24fb726d48Sopenharmony_ciself.onerror = function (error): void { }; 25fb726d48Sopenharmony_ci 26fb726d48Sopenharmony_ciself.onmessage = async (e: unknown): Promise<void> => { 27fb726d48Sopenharmony_ci //@ts-ignore 28fb726d48Sopenharmony_ci const action = e.data.action; 29fb726d48Sopenharmony_ci //@ts-ignore 30fb726d48Sopenharmony_ci const id = e.data.id; 31fb726d48Sopenharmony_ci if (action === 'open') { 32fb726d48Sopenharmony_ci //@ts-ignore 33fb726d48Sopenharmony_ci let array = new Uint8Array(e.data.buffer); 34fb726d48Sopenharmony_ci // @ts-ignore 35fb726d48Sopenharmony_ci initSqlJs({ locateFile: (filename) => `${filename}` }).then((SQL: unknown) => { 36fb726d48Sopenharmony_ci // @ts-ignore 37fb726d48Sopenharmony_ci conn = new SQL.Database(array); 38fb726d48Sopenharmony_ci self.postMessage({ id: id, ready: true, index: 0 }); 39fb726d48Sopenharmony_ci // @ts-ignore 40fb726d48Sopenharmony_ci if (temp_init_sql_list && temp_init_sql_list.length > 0) { 41fb726d48Sopenharmony_ci // @ts-ignore 42fb726d48Sopenharmony_ci temp_init_sql_list.forEach((item, index) => { 43fb726d48Sopenharmony_ci // @ts-ignore 44fb726d48Sopenharmony_ci let r = conn.exec(item); 45fb726d48Sopenharmony_ci self.postMessage({ 46fb726d48Sopenharmony_ci id: id, 47fb726d48Sopenharmony_ci ready: true, 48fb726d48Sopenharmony_ci index: index + 1, 49fb726d48Sopenharmony_ci }); 50fb726d48Sopenharmony_ci }); 51fb726d48Sopenharmony_ci } 52fb726d48Sopenharmony_ci self.postMessage({ id: id, init: true }); 53fb726d48Sopenharmony_ci }); 54fb726d48Sopenharmony_ci } else if (action === 'close') { 55fb726d48Sopenharmony_ci } else if (action === 'exec' || action === 'exec-buf' || action === 'exec-metric') { 56fb726d48Sopenharmony_ci try { 57fb726d48Sopenharmony_ci //@ts-ignore 58fb726d48Sopenharmony_ci let sql = e.data.sql; 59fb726d48Sopenharmony_ci //@ts-ignore 60fb726d48Sopenharmony_ci let params = e.data.params; 61fb726d48Sopenharmony_ci // @ts-ignore 62fb726d48Sopenharmony_ci const stmt = conn.prepare(sql); 63fb726d48Sopenharmony_ci stmt.bind(params); 64fb726d48Sopenharmony_ci let res = []; 65fb726d48Sopenharmony_ci while (stmt.step()) { 66fb726d48Sopenharmony_ci //@ts-ignore 67fb726d48Sopenharmony_ci res.push(stmt.getAsObject()); 68fb726d48Sopenharmony_ci } 69fb726d48Sopenharmony_ci stmt.free(); 70fb726d48Sopenharmony_ci // @ts-ignore 71fb726d48Sopenharmony_ci self.postMessage({ id: id, results: res }); 72fb726d48Sopenharmony_ci } catch (err) { 73fb726d48Sopenharmony_ci self.postMessage({ 74fb726d48Sopenharmony_ci id: id, 75fb726d48Sopenharmony_ci results: [], 76fb726d48Sopenharmony_ci //@ts-ignore 77fb726d48Sopenharmony_ci error: err.message, 78fb726d48Sopenharmony_ci }); 79fb726d48Sopenharmony_ci } 80fb726d48Sopenharmony_ci } else if (action === 'exec-proto') { 81fb726d48Sopenharmony_ci //@ts-ignore 82fb726d48Sopenharmony_ci e.data.params.trafic = TraficEnum.Memory; 83fb726d48Sopenharmony_ci //@ts-ignore 84fb726d48Sopenharmony_ci execProtoForWorker(e.data, (sql: string) => { 85fb726d48Sopenharmony_ci try { 86fb726d48Sopenharmony_ci // @ts-ignore 87fb726d48Sopenharmony_ci const stmt = conn.prepare(sql); 88fb726d48Sopenharmony_ci let res = []; 89fb726d48Sopenharmony_ci while (stmt.step()) { 90fb726d48Sopenharmony_ci //@ts-ignore 91fb726d48Sopenharmony_ci res.push(stmt.getAsObject()); 92fb726d48Sopenharmony_ci } 93fb726d48Sopenharmony_ci stmt.free(); 94fb726d48Sopenharmony_ci return res; 95fb726d48Sopenharmony_ci } catch (err: unknown) { 96fb726d48Sopenharmony_ci console.log(err); 97fb726d48Sopenharmony_ci return []; 98fb726d48Sopenharmony_ci } 99fb726d48Sopenharmony_ci }); 100fb726d48Sopenharmony_ci } 101fb726d48Sopenharmony_ci}; 102