Skip to content

Commit

Permalink
version 0.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
lunu-bounir committed Nov 8, 2018
1 parent 6ba628d commit 87eb510
Show file tree
Hide file tree
Showing 11 changed files with 122 additions and 14,490 deletions.
2 changes: 2 additions & 0 deletions data/manager/api/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import box from './box.js';
import compute from './compute.js';
import tools from './tools.js';
import history from './history.js';
import format from './format.js';
import './file.js';
import Table from './table.js';

Expand Down Expand Up @@ -44,6 +45,7 @@ api.box = box;
api.compute = compute;
api.tools = tools;
api.history = history;
api.format = format;
api.Table = Table;

api.require('./index.js');
2 changes: 2 additions & 0 deletions data/manager/api/box.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ viewer.addEventListener('click', ({target}) => {
if (div && window.getSelection().toString() === '') {
div.querySelector('textarea').focus();
viewer.scrollTo(x, y);
// when editor disappears by clicking outside of the editor area;
window.setTimeout(() => viewer.scrollTo(x, y));
}
}
});
Expand Down
73 changes: 73 additions & 0 deletions data/manager/api/format.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
const format = {};
/* CSV and SQLite toArray and toString tools */
format.csv = {};
format.csv.toArray = content => {
const rows = content.split('\r\n');
return rows.map(row => row
// remove '"'
.replace(/""([^"])/g, String.fromCharCode(0) + '$1').replace(/"""$/, String.fromCharCode(0) + '"')
// remove ','
.replace(/,"([^"]+)"/, (a, b) => ',"' + b.replace(/,/g, String.fromCharCode(1)) + '"')
.replace(/^"([^"]+)"/, (a, b) => '"' + b.replace(/,/g, String.fromCharCode(1)) + '"')
// split
.split(',')
// remove closing '"'
.map(s => s
.replace(/"/g, '')
// join '"'
.split(String.fromCharCode(0)).join('"')
// join ','
.split(String.fromCharCode(1)).join(',')
).map(s => {
if (s === '') {
return '';
}
else if (isNaN(s)) {
return s;
}
else if (s.indexOf('.') !== -1) {
return parseFloat(s);
}
return parseInt(s);
})
);
};
format.csv.toString = d2arr => {
return d2arr.map(arr => arr.map(str => {
if (isNaN(str)) {
const quote = str.indexOf('"') !== -1 || str.indexOf(',') !== -1;
str = str.replace(/"/g, '""');
if (quote) {
return `"${str}"`;
}
else {
return str;
}
}
return str;
}).join(',')).join('\r\n');
};
format.sql = {};
format.sql.toColumns = arr => {
return arr.map(str => {
if (str.indexOf(' ') !== -1 || str.indexOf('.') !== -1) {
return `"${str.replace(/"/g, '""')}"`;
}
return str;
}).join(', ');
};
format.sql.toValues = arr => {
return arr.map(str => {
if (str === '' || str === null) {
return 'null';
}
else if (isNaN(str)) {
return `"${str.replace(/"/g, '""')}"`;
}
else {
return str;
}
}).join(', ');
};

export default format;
22 changes: 11 additions & 11 deletions data/manager/api/table.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ editor.addEventListener('click', e => {
api.sql.exec(id, query).then(() => {
try {
const ast = api.sql.parse.exec(query);
const table = api.tools.sql.toColumns([ast.statement[0].into.name]);
const name = api.tools.sql.toColumns([ast.statement[0].set[0].target.name]);
const key = api.tools.sql.toColumns([ast.statement[0].where[0].left.name]);
const value = api.tools.sql.toValues([ast.statement[0].where[0].right.name]);
const table = api.format.sql.toColumns([ast.statement[0].into.name]);
const name = api.format.sql.toColumns([ast.statement[0].set[0].target.name]);
const key = api.format.sql.toColumns([ast.statement[0].where[0].left.name]);
const value = api.format.sql.toValues([ast.statement[0].where[0].right.name]);

api.sql.exec(id, `SELECT ${name} FROM ${table} WHERE ${key} = ${value} limit 1`).then(r => {
try {
Expand Down Expand Up @@ -83,21 +83,21 @@ const Table = function(root, columns, values) {
const obj = this.parse(this.root.index, tr.index, td.index);

let statement = 'UPDATE ';
statement += api.tools.sql.toColumns([obj.table]);
statement += api.format.sql.toColumns([obj.table]);
statement += ' SET ';
statement += api.tools.sql.toColumns([obj.selected.name]);
statement += api.format.sql.toColumns([obj.selected.name]);
statement += ' = ';
let start = statement.length;
statement += api.tools.sql.toValues([obj.selected.value]);
statement += api.format.sql.toValues([obj.selected.value]);
let end = statement.length;
if (statement.endsWith('"')) {
start += 1;
end -= 1;
}
statement += ' WHERE ';
statement += api.tools.sql.toColumns([obj.id.name]);
statement += api.format.sql.toColumns([obj.id.name]);
statement += ' = ';
statement += api.tools.sql.toValues([obj.id.value]);
statement += api.format.sql.toValues([obj.id.value]);

window.setTimeout(() => {
editor.input.value = statement;
Expand All @@ -111,7 +111,7 @@ const Table = function(root, columns, values) {
});
}
catch (e) {
window.alert('Cannot edit this value\n\n' + e.message);
api.notify('Cannot edit this value: ' + e.message);
}
}
});
Expand All @@ -121,7 +121,7 @@ Table.prototype.add = function() {
input.type = 'button';
input.value = 'Export';
input.onclick = () => {
const content = api.tools.csv.toString([this.columns, ...this.values]);
const content = api.format.csv.toString([this.columns, ...this.values]);
const blob = new Blob([content], {type: 'text/csv'});
const objectURL = URL.createObjectURL(blob);
const link = document.createElement('a');
Expand Down
70 changes: 0 additions & 70 deletions data/manager/api/tools.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,74 +60,4 @@ document.querySelector('#tools [data-id=commands]').addEventListener('mousedown'
}
});

/* CSV and SQLite toArray and toString tools */
tools.csv = {};
tools.csv.toArray = content => {
const rows = content.split('\r\n');
return rows.map(row => row
// remove '"'
.replace(/""([^"])/g, String.fromCharCode(0) + '$1').replace(/"""$/, String.fromCharCode(0) + '"')
// remove ','
.replace(/,"([^"]+)"/, (a, b) => ',"' + b.replace(/,/g, String.fromCharCode(1)) + '"')
// split
.split(',')
// remove closing '"'
.map(s => s
.replace(/"/g, '')
// join '"'
.split(String.fromCharCode(0)).join('"')
// join ','
.split(String.fromCharCode(1)).join(',')
).map(s => {
if (s === '') {
return '';
}
else if (isNaN(s)) {
return s;
}
else if (s.indexOf('.') !== -1) {
return parseFloat(s);
}
return parseInt(s);
})
);
};
tools.csv.toString = d2arr => {
return d2arr.map(arr => arr.map(str => {
if (isNaN(str)) {
const quote = str.indexOf('"') !== -1 || str.indexOf(',') !== -1;
str.replace(/"/g, '""');
if (quote) {
return `"${str}"`;
}
else {
return str;
}
}
return str;
}).join(',')).join('\r\n');
};
tools.sql = {};
tools.sql.toColumns = arr => {
return arr.map(str => {
if (str.indexOf(' ') !== -1 || str.indexOf('.') !== -1) {
return `"${str}"`;
}
return str;
}).join(', ');
};
tools.sql.toValues = arr => {
return arr.map(str => {
if (str === '' || str === null) {
return 'null';
}
else if (isNaN(str)) {
return `"${str.replace(/"/g, '""')}"`;
}
else {
return str;
}
}).join(', ');
};

export default tools;
13 changes: 6 additions & 7 deletions data/manager/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ api.on('db.file', async(file, name = 'unknown db') => {
api.on('csv.file', file => {
const reader = new FileReader();
reader.onload = async() => {
const [columns, ...values] = api.tools.csv.toArray(reader.result);
console.log(columns, values);
const [columns, ...values] = api.format.csv.toArray(reader.result);
// find the table name
let table = 'my_table';
try {
Expand All @@ -27,8 +26,8 @@ api.on('csv.file', file => {
}
catch (e) {}
let statement = 'INSERT OR REPLACE INTO ' + table + ' ';
statement += `(${api.tools.sql.toColumns(columns)}) VALUES \n `;
statement += values.map(vs => `(${api.tools.sql.toValues(vs)})`).join(',\n ') + ';';
statement += `(${api.format.sql.toColumns(columns)}) VALUES \n `;
statement += values.map(vs => `(${api.format.sql.toValues(vs)})`).join(',\n ') + ';';
const input = api.box.last();
input.value = statement;
input.dispatchEvent(new Event('input'));
Expand Down Expand Up @@ -65,9 +64,9 @@ api.on('execute.sql', async({query, result}) => {
result.dataset.mode = 'busy';
await api.sql.parse.init();
try {
const ast = api.sql.parse.exec(query);
const ast = query.length < 1000 ? api.sql.parse.exec(query) : {};
result.ast = ast;
const r = await api.sql.exec(id, query);
const r = await api.sql.exec(id, query) || [];
r.forEach(async(o, i) => {
if (pipes[i]) {
await api.compute.init();
Expand Down Expand Up @@ -112,7 +111,7 @@ api.on('execute.math', async({query, result}) => {
}
}
catch (e) {
console.log(e);
console.error(e);
print(e.message, result, 'error');
}
});
Loading

0 comments on commit 87eb510

Please sign in to comment.