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(); });
							 |