{"id":41,"date":"2015-10-20T22:36:39","date_gmt":"2015-10-20T20:36:39","guid":{"rendered":"http:\/\/sql.coach\/en\/?page_id=41"},"modified":"2018-05-22T17:32:08","modified_gmt":"2018-05-22T15:32:08","slug":"practice-sql","status":"publish","type":"page","link":"https:\/\/sql.coach\/en\/practice-sql\/","title":{"rendered":"Practice SQL"},"content":{"rendered":"\t<div class=\"sql-wrapper\">\n\t\t<form id=\"sql-form\" action=\"#\" onsubmit=\"execute(null); return false;\" method=\"post\">\n\t\t\t<div class=\"sql-input\">\n\t\t\t\t<h3>SQL Query<\/h3>\n\t\t\t\t<div id=\"resizable\">\n\t\t\t\t\t<div name=\"sql-input\" id=\"sql-input\">SELECT name FROM sqlite_master WHERE type='table';<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<div class=\"sql-control\">\n\t\t\t\t<div class=\"btn\" id=\"sql-execute\">Run<\/div>&nbsp;<span name=\"sql-error\" id=\"sql-error\"><\/span>\n\t\t\t<\/div>\n\t\t\t<div class=\"sql-output\">\n\t\t\t\t<h3>Results<\/h3>\n\t\t\t\t<div id=\"sql-output\"><\/div>\n\t\t\t<\/div>\n\t\t\t<div class=\"sql-control\">\n\t\t\t\t<div class=\"btn\" id=\"sql-export\">Download DB<\/div>\n\t\t\t\t<div class=\"btn\" id=\"sql-import\">Reset<\/div>\n\t\t\t\t<div class=\"btn upload\" id=\"sql-open\"><span>Upload DB<\/span><input type=\"file\" id=\"dbfile\"><\/div>\n\t\t\t<\/div>\n\t\t<\/form>\n\t<\/div>\n\t<script type=\"text\/javascript\">\nvar editor;\nvar sql;\nvar db;\n\n(function ($) {\n\t$(window).load(function(){\n\t\t\/\/ enable ACE code Editor\n\t\tace.config.set(\"basePath\", \"\/wp-content\/plugins\/smart-sql\/js\");\n\t\teditor = ace.edit(\"sql-input\");\n\t\teditor.setTheme(\"ace\/theme\/chrome\");\n\t\teditor.getSession().setMode(\"ace\/mode\/sql\");\n\t\teditor.getSession().setUseWrapMode(true);\n\t\t$(\"#resizable\").resizable({\n\t\t  resize: function( event, ui ) {\n\t\t\teditor.resize();\n\t\t  }\n\t\t});\n\n\t\t\/\/ Create a database\n\t\tsql = window.SQL;\n\t\tdb = new sql.Database();\n\n\t\timport_db();\n\t\t$('#sql-error').html('<div class=\"msg-info\">Ready<\/div>');\n\n\t\t$( \"#sql-execute\" ).click(function() {\n\t\t\ttry {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-wait\">Processing...<\/div>');\n\t\t\t\tvar startTime = new Date().getTime();\n\t\t\t\tvar s = editor.getValue();\n\t\t\t\tvar res = db.exec(s);\n\t\t\t\t$('#sql-output').html(to_tables(res));\n\t\t\t\tvar endTime = new Date().getTime();\n\t\t\t\tvar totalTime = endTime - startTime;\n\t\t\t\t$('#sql-error').html('<div class=\"msg-info\">Processed in ' + totalTime + ' ms<\/div>');\n\t\t\t}\n\t\t\tcatch(err) {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-error\">' + err + '<\/div>');\n\t\t\t}\n\t\t});\n\n\t\t$( \"#sql-export\" ).click(function() {\n\t\t\ttry {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-wait\">Processing...<\/div>');\n\t\t\t\tvar binaryArray = db.export();\n\t\t\t\tvar blob = new Blob([binaryArray]);\n\t\t\t\tsaveAs(blob, \"sqlite.db\");\n\t\t\t\t$('#sql-error').html('<div class=\"msg-info\">Export finished<\/div>');\n\t\t\t}\n\t\t\tcatch(err) {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-error\">' + err + '<\/div>');\n\t\t\t}\n\t\t});\n\n\t\t$( \"#sql-import\" ).click(function() {\n\t\t\timport_db();\n\t\t});\n\n\t\tfunction import_db() {\n\t\t\ttry {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-wait\">Processing...<\/div>');\n\t\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\t\txhr.open('GET', '\/wp-content\/plugins\/smart-sql\/js\/sqlite.db', true);\n\t\t\t\txhr.responseType = 'arraybuffer';\n\n\t\t\t\txhr.onload = function(e) {\n\t\t\t\t\tvar uInt8Array = new Uint8Array(this.response);\n\t\t\t\t\tdb = new SQL.Database(uInt8Array);\n\t\t\t\t\t$('#sql-error').html('<div class=\"msg-info\">Database has been reset<\/div>');\n\t\t\t\t};\n\t\t\t\txhr.send();\n\t\t\t}\n\t\t\tcatch(err) {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-error\">' + err + '<\/div>');\n\t\t\t}\n\t\t}\n\t\t\n\t\t\/\/open-db\n\t\t$(\"#dbfile\").on('change', function() {\n\t\t\ttry {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-wait\">Processing...<\/div>');\n\t\t\t\tvar dbFileElm = document.getElementById('dbfile');\n\t\t\t\tvar f = dbFileElm.files[0];\n\t\t\t\tvar r = new FileReader();\n\t\t\t\tr.onload = function() {\n\t\t\t\t\tvar Uints = new Uint8Array(r.result);\n\t\t\t\t\tdb = new SQL.Database(Uints);\n\t\t\t\t\t$('#sql-error').html('<div class=\"msg-info\">Database has been uploaded<\/div>');\n\t\t\t\t\t$(\"#dbfile\").val(\"\");\n\t\t\t\t}\n\t\t\t\tr.readAsArrayBuffer(f);\n\t\t\t}\n\t\t\tcatch(err) {\n\t\t\t\t$('#sql-error').html('<div class=\"msg-error\">' + err + '<\/div>');\n\t\t\t}\n\t\t});\n\t\t\n\t});\n\n})(jQuery);\n\nfunction to_tables(r) {\n\tres = \"\";\n\tr.forEach( function(tab, i, o) {\n\t\tcolumns = \"<tr><th>\" + tab.columns.join(\"<\/th><th>\") + \"<\/th><\/tr>\";\n\t\trowdata = \"\";\n\t\ttab.values.forEach( function(value, i, o) {\n\t\t\trowdata += \"<tr><td>\" + value.join(\"<\/td><td>\") + \"<\/td><\/tr>\";\n\t\t});\n\t\tres += \"<table><thead>\" + columns + \"<\/thead><tbody>\" + rowdata + \"<\/tbody><\/table>\";\n\t});\n\treturn res;\n}\n\t<\/script>\n\n<p>* <a href=\"\/\/sql.coach\/en\/system-requirements-for-using-the-sql-practice-tool\/\" target=\"_blank\">System Requirements<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>* System Requirements<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-no-title.php","meta":{"footnotes":""},"class_list":["post-41","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/pages\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/comments?post=41"}],"version-history":[{"count":4,"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/pages\/41\/revisions"}],"predecessor-version":[{"id":130,"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/pages\/41\/revisions\/130"}],"wp:attachment":[{"href":"https:\/\/sql.coach\/en\/wp-json\/wp\/v2\/media?parent=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}