diff --git a/static/index.html b/static/index.html index 13fca7fbb..88b8ac637 100644 --- a/static/index.html +++ b/static/index.html @@ -333,6 +333,8 @@

SSH Connection

diff --git a/static/js/app.js b/static/js/app.js index 1c5c5d71b..b416ef712 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -1203,6 +1203,12 @@ function bindTableHeaderMenu() { var menuItem = $(e.target); switch(menuItem.data("action")) { + case "copy_as_insert": + copyAsInsert(context); + break; + case "copy_as_update": + copyAsUpdate(context); + break; case "display_value": var value = $(context).text(); $("#content_modal .content").text(value); @@ -1225,6 +1231,72 @@ function bindTableHeaderMenu() { }); } +function copyAsInsert(context){ + var values = getValuesFromContext(context); + var columns = getColumnsFromResults(); + var tableName = $("#results").data("table"); + if(tableName === undefined){ + alert('table must be selected.'); + return; + } + var str = "INSERT INTO "+tableName+"("+columns.join(',')+") VALUES("+values.map(function(o){return o.value}).join(",")+")"; + copyToClipboard(str); +} + +function copyAsUpdate(context){ + var values = getValuesFromContext(context); + var columns = getColumnsFromResults(); + var tableName = $("#results").data("table"); + if(tableName === undefined){ + alert('table must be selected.'); + return; + } + var where = []; + var set = []; + columns.forEach(function(row, index){ + var val = values[index]; + set.push(row+"="+val.value); + if(val.isNull){ + where.push(row+" IS "+val.value); + return; + } + where.push(row+"="+val.value); + }) + var str = "UPDATE "+tableName+" SET "+set.join(',')+' WHERE '+ where.join(' AND '); + copyToClipboard(str); +} + +function getColumnsFromResults(){ + let columns = []; + $("#results_header th").each(function(){ + columns.push(this.innerText); + }) + return columns; +} + +function getValuesFromContext(context){ + let values = []; + $(context).parent().children().each(function(){ + const isNumber = !isNaN(this.innerText); + const isNull = $(this).find("span[class*='null']").length; + let obj = {isNull:false, value:''}; + if (isNull){ + obj.isNull = true; + obj.value = 'NULL'; + values.push(obj); + return; + } + if(isNumber){ + obj.value = this.innerText; + values.push(obj); + return; + } + obj.value = "'"+this.innerText+"'"; + values.push(obj); + }) + return values; +} + function bindCurrentDatabaseMenu() { $("#current_database").contextmenu({ target: "#current_database_context_menu",