UNPKG

yinxing

Version:
96 lines (73 loc) 2.42 kB
const sqlite3 = require('sqlite3').verbose(); //https://github.com/mapbox/node-sqlite3/tree/master/test const {serialize}=require('../fp/q') const {drop_keys}=require('../fp') const FILE_NAME="test.db" // 只管字符串 const to_sql=(d={})=>" "+serialize(' = \"')('\" , ')(d)+"\" " const conn=(file_name=FILE_NAME)=>new sqlite3.Database(file_name) const exec=(file_name,q)=>{ const db = conn(file_name); return new Promise((f1,f2)=> db.all(q,(e,d)=>e?f2(e):f1(d))) } const get_tables=(file_name)=>{ let q="SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;" return exec(file_name,q) } //[{ name: 'xxx' }] const query=(file_name,table)=>{ let q="SELECT * FROM "+ table return exec(file_name,q) } const update=(file_name,table,d={},k="name")=>{ let s=to_sql(drop_keys([k])(d)) let c=` ${k} = "${d[k]}"` let q=`UPDATE ${table} SET ${s} WHERE ${c};` // return q return exec(file_name,q) } const read=async (file_name,tables=[])=>Promise.all(tables.map(t=>query(file_name,t))) const write=(file_name,d={})=>{ const fs=require("mz/fs") let d1=JSON.stringify(d,null,'\t') return fs.writeFile(file_name,d1) } const sqlite2json=async ( db_file_name="1.db",)=>{ let t=await get_tables(db_file_name) let d=await read(t.map(x=>x.name)) Promise.all(d.map((x,i)=>write(t[i]+".json",x))) } const inserts=(d=[],table="user",file_name=FILE_NAME)=>{ const db = conn(file_name); db.serialize(function() { db.run(`CREATE TABLE IF NOT EXISTS ${table} (info TEXT)`); var stmt = db.prepare(`INSERT INTO ${table} VALUES (?)`); d.forEach(x=>stmt.run(x)) stmt.finalize(); }); db.close(); } const init=(file_name,t=[],cb=console.log)=>{ let db=conn() db = new sqlite3.Database(file_name, t.map(x=>db.run(`CREATE TABLE IF NOT EXISTS ${x} (info TEXT)`, cb))); } const clean=(t=TABLES)=>{ const db = conn(); return Promise.all(t.map(table=>new Promise((f1,f2)=> db.all(`delete FROM ${table}`,(e,d)=>e?f2(e):f1(d))))) } const test=async (t="xx.db",tt=["user"])=>{ let tables=await get_tables(t) let d=await read(t,tt) Promise.all(d.map((x,i)=>write(tt[i]+".json",x))) console.log(tables) console.log(d) } module.exports={ conn, exec, query, get_tables, read, write, sqlite2json, }