forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||
|  | /* eslint-env node */ | ||
|  | /* global Promise */ | ||
|  | const XLSX = require('xlsx'); | ||
|  | const assert = require('assert'); | ||
|  | const SheetJSKnex = require("./SheetJSKnex"); | ||
|  | const Knex = require('knex'); | ||
|  | 
 | ||
|  | /* Connection to both databases are passed around */ | ||
|  | let P = Promise.resolve([ | ||
|  | 	Knex({ client: 'sqlite3', connection: { filename: './knex1.db' } }), | ||
|  | 	Knex({ client: 'sqlite3', connection: { filename: './knex2.db' } }) | ||
|  | ]); | ||
|  | 
 | ||
|  | /* Sample data table */ | ||
|  | P = P.then(async (_) => { | ||
|  | 	const [knex] = _; | ||
|  | 	await knex.schema.dropTableIfExists('pres'); | ||
|  | 	await knex.schema.createTable('pres', (table) => { | ||
|  | 		table.string('name'); | ||
|  | 		table.integer('idx'); | ||
|  | 	}); | ||
|  | 	await knex.insert([ | ||
|  | 		{ name: "Barack Obama", idx: 44 }, | ||
|  | 		{ name: "Donald Trump", idx: 45 } | ||
|  | 	]).into('pres'); | ||
|  | 
 | ||
|  | 	await knex.schema.dropTableIfExists('fmts'); | ||
|  | 	await knex.schema.createTable('fmts', (table) => { | ||
|  | 		table.string('ext'); | ||
|  | 		table.string('ctr'); | ||
|  | 		table.integer('multi'); | ||
|  | 	}); | ||
|  | 	await knex.insert([ | ||
|  | 		{ ext: 'XLSB', ctr: 'ZIP', multi: 1 }, | ||
|  | 		{ ext: 'XLS',  ctr: 'CFB', multi: 1 }, | ||
|  | 		{ ext: 'XLML', ctr: '',    multi: 1 }, | ||
|  | 		{ ext: 'CSV',  ctr: 'ZIP', multi: 0 }, | ||
|  | 	]).into('fmts'); | ||
|  | 
 | ||
|  | 	return _; | ||
|  | }); | ||
|  | 
 | ||
|  | /* Export database to XLSX */ | ||
|  | P = P.then(async (_) => { | ||
|  | 	const [knex] = _; | ||
|  | 	const wb = XLSX.utils.book_new(); | ||
|  | 	await SheetJSKnex.book_append_knex(wb, knex, "pres"); | ||
|  | 	await SheetJSKnex.book_append_knex(wb, knex, "fmts"); | ||
|  | 	XLSX.writeFile(wb, "knex.xlsx"); | ||
|  | 	return _; | ||
|  | }); | ||
|  | 
 | ||
|  | /* Import XLSX to database */ | ||
|  | P = P.then(async (_) => { | ||
|  | 	const [, knex] = _; | ||
|  | 	const wb = XLSX.readFile("knex.xlsx"); | ||
|  | 	await SheetJSKnex.wb_to_knex(wb, knex); | ||
|  | 	return _; | ||
|  | }); | ||
|  | 
 | ||
|  | /* Compare databases */ | ||
|  | P = P.then(async (_) => { | ||
|  | 	const [k1, k2] = _; | ||
|  | 	const P1 = await k1.select("*").from('pres'); | ||
|  | 	const P2 = await k2.select("*").from('pres'); | ||
|  | 	const F1 = await k1.select("*").from('fmts'); | ||
|  | 	const F2 = await k2.select("*").from('fmts'); | ||
|  | 	assert.deepEqual(P1, P2); | ||
|  | 	assert.deepEqual(F1, F2); | ||
|  | }); | ||
|  | 
 | ||
|  | P.then(async () => { process.exit(); }); |