From 2b96a0f41b5fdfee6c4101b1b7f2a4da644014bc Mon Sep 17 00:00:00 2001 From: Niko Halink Date: Sun, 11 Oct 2020 23:14:09 +0200 Subject: [PATCH 1/2] Added SQL UPDATE feature --- README.md | 1 + index.html | 1 + magic.js | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 114 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c51db67..26819c0 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Allows you to seamlessly switch between CSV, TSV, HTML, SQL, markdown and a litt | Preserves alignment | Between all views | | Markdown formatting | Adds spaces, makes things more legible | | Form view | Create tables with buttons! | +| INSERT | Generate an INSERT query to add data to a table | I've made this as a little learning exercise to play with Primer, Atom, GitHub Desktop and GitHub itself. diff --git a/index.html b/index.html index 59def16..343d29e 100644 --- a/index.html +++ b/index.html @@ -24,6 +24,7 @@ CSV/TSV Markdown SQL + INSERT HTML Form Preview diff --git a/magic.js b/magic.js index 9ff3fb3..73c14f3 100644 --- a/magic.js +++ b/magic.js @@ -143,6 +143,7 @@ function changeTab(newTab) { if (tab==="csv") { array = csv2array(input); } if (tab==="html") { array = html2array(input); } if (tab==="sql") { array = sql2array(input); } + if (tab==="insert") { array = insert2array(input); } if (tab==="form") { array = form2array(); } if (tab==="preview") { array = array_storge; } @@ -169,6 +170,11 @@ function changeTab(newTab) { new_layout=true; } + if (newTab==="insert") { + output = array2insert(array); + new_layout=true; + } + if (newTab==="form") { output = array2form(array); new_layout=false; @@ -194,13 +200,13 @@ function changeTab(newTab) { $('.tabnav-tab').removeClass('selected'); $('#tab-'+newTab).addClass('selected'); - if ((tab==='md')||tab==='sql') { + if ((tab==='md')||tab==='sql'||tab==='insert') { $('textarea').removeClass('md'); if (tab==='md') $('#md-options').hide(); if (tab==='sql') $('#sql-info').hide(); } - if ((newTab==='md')||newTab==='sql') { + if ((newTab==='md')||newTab==='sql'||newTab==='insert') { $('textarea').addClass('md'); if (newTab==='md') $('#md-options').show(); if (newTab==='sql') $('#sql-info').show(); @@ -755,6 +761,110 @@ function array2sqlDashes(cell_sizes, rowlength) { } +function insert2array(insert) { + + var array = [];array[0] = []; + + // Strip all newlines & double spaces + insert = insert.replace(/\n/g, ''); + insert = insert.replace(/ /g, ' '); + + // Split into header & body + var parts = insert.split(') VALUES '); + var n = parts[0].indexOf('(')+1; + var header = parts[0].substring(n, parts[0].length); + + // Split header into columns + var columns = header.split(', '); + + for (var c = 0; c < columns.length; c++) { + + var column = columns[c]; + + // Remove escaping slashes for single and double quotes + column = column.replace(/\"/g, '"'); + column = column.replace(/\'/g, "'"); + + array[0][c] = column; + + } + + // Strip opening & closing brackets + ending semi-colon + var body = parts[1].substring(1, parts[1].length-2); + + // Split body into rows + var rows = body.split('), ('); + + for (var r = 0; r < rows.length; r++) { + + var cells = rows[r].split(', '); + + array[r+1] = []; + + for (var c = 0; c < cells.length; c++) { + + var cell = cells[c]; + + // Strip opening and closing single qoutes + cell = cell.substring(1, cell.length-1); + + // Remove escaping slashes for single and double quotes + cell = cell.replace("\\'", "'"); + cell = cell.replace('\\"', '"'); + + array[r+1][c] = cell; + + } + + } + + return array; +} + +function array2insert(array) { + + var insert = ''; + + for (var r = 0; r < array.length; r++) { + + var row = array[r]; + + insert += ' ('; + + for (var c = 0; c < row.length; c++) { + + var item = row[c]; + + // Escape quotes + item = item.replace(/"/g, '\\"'); + item = item.replace(/'/g, "\\'"); + + if (c>0) { insert += ', '; } + insert += "'"+ item +"'"; + + } + + // Last row should end with a semi-colon instead of a comma + insert += (r===(array.length-1)) ? ');\n' : '),\n'; + + // First row are the columns + if (r===0) { + insert = insert.replace(' (', '('); + insert = insert.replace('(\'', '('); + insert = insert.replace('\')', ')'); + insert = insert.replace(/', '/g, ', '); + insert = insert.replace('),\n', ')'); + + var columns = insert; + insert = ''; + } + + } + + return 'INSERT INTO [TABLENAME] '+ columns +' VALUES\n'+ insert; + +} + function form2array() { var array = []; From e0fb7d275184a65098ad30dcd48080a9de08f1f6 Mon Sep 17 00:00:00 2001 From: Niko Halink Date: Mon, 12 Oct 2020 09:02:48 +0200 Subject: [PATCH 2/2] Bugfix for strings with comma --- magic.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/magic.js b/magic.js index 73c14f3..626a6a1 100644 --- a/magic.js +++ b/magic.js @@ -797,7 +797,7 @@ function insert2array(insert) { for (var r = 0; r < rows.length; r++) { - var cells = rows[r].split(', '); + var cells = rows[r].replace(/', /g, "'#$#").split('#$#'); array[r+1] = [];