diff options
author | jakefeasel <jfeasel@gmail.com> | 2015-03-06 17:20:35 -0800 |
---|---|---|
committer | jakefeasel <jfeasel@gmail.com> | 2015-03-06 17:20:35 -0800 |
commit | 8a11d51925de7a08f203b4448cfb72a7816a5192 (patch) | |
tree | 86c744c3c38ceafde343b7e1096c279ef057c847 | |
parent | a1dd2e944e5254bad419a504e727c3813caa9311 (diff) | |
download | sqlfiddle2-8a11d51925de7a08f203b4448cfb72a7816a5192.zip sqlfiddle2-8a11d51925de7a08f203b4448cfb72a7816a5192.tar.gz sqlfiddle2-8a11d51925de7a08f203b4448cfb72a7816a5192.tar.bz2 |
Changes necessary to support db_types which no longer have hosts available to execute queries on
8 files changed, 44 insertions, 5 deletions
diff --git a/src/main/resources/conf/provisioner.openicf-fiddles.json b/src/main/resources/conf/provisioner.openicf-fiddles.json index c6dc98a..6376581 100644 --- a/src/main/resources/conf/provisioner.openicf-fiddles.json +++ b/src/main/resources/conf/provisioner.openicf-fiddles.json @@ -185,6 +185,16 @@ "required" : false, "nativeName" : "batch_separator", "nativeType" : "string" + }, + "num_hosts" : { + "type" : "integer", + "required" : false, + "nativeName" : "num_hosts", + "nativeType" : "integer", + "flags" : [ + "NOT_CREATABLE", + "NOT_UPDATEABLE" + ] } } }, diff --git a/src/main/resources/script/createSchema.groovy b/src/main/resources/script/createSchema.groovy index 1ce05f2..4011717 100644 --- a/src/main/resources/script/createSchema.groovy +++ b/src/main/resources/script/createSchema.groovy @@ -1,12 +1,15 @@ + import java.security.MessageDigest import java.util.List import java.util.Map import groovy.sql.Sql import java.sql.Statement import java.sql.ResultSet +import groovy.transform.InheritConstructors - +@InheritConstructors +class NoHostException extends Exception {} def digest = MessageDigest.getInstance("MD5") def response = [:] @@ -79,6 +82,10 @@ try { schema_def = existing_schema[0] } else { + if (db_type.context == "host" && db_type.num_hosts == 0) { + throw new NoHostException("No host of this type available to create schema. Try using a different database version.") + } + def short_code = md5hash.substring(0,5) def checkedUniqueCode = false def structure = [] diff --git a/src/main/resources/script/executeQuery.groovy b/src/main/resources/script/executeQuery.groovy index fad73da..5b42376 100644 --- a/src/main/resources/script/executeQuery.groovy +++ b/src/main/resources/script/executeQuery.groovy @@ -102,7 +102,7 @@ def execQueryStatement(connection, statement, rethrow) { def schema_def = openidm.read("system/fiddles/schema_defs/" + content.db_type_id + "_" + content.schema_short_code) assert schema_def != null -def db_type = schema_def.db_type +def db_type = openidm.read("system/fiddles/db_type/" + content.db_type_id) // Update the timestamp for the schema_def each time this instance is used, so we know if it should stay running longer schema_def.last_used = (new Date().format("yyyy-MM-dd HH:mm:ss.S")) @@ -135,6 +135,13 @@ if (securityContext.authorizationId.component == "system/fiddles/users") { if (db_type.context == "host") { + if (db_type.num_hosts == 0) { + return [ + sets: [ + [error_message: "No host of this type available to execute query. Try using a different database version."] + ] + ] + } // Use the presence of a link between fiddle and host db to determine if we need to provision a running instance of this db def hostLink = openidm.query("repo/link", [ "_queryId": "links-for-firstId", diff --git a/src/main/resources/tools/fiddles/SearchScript.groovy b/src/main/resources/tools/fiddles/SearchScript.groovy index fa73592..240b644 100644 --- a/src/main/resources/tools/fiddles/SearchScript.groovy +++ b/src/main/resources/tools/fiddles/SearchScript.groovy @@ -343,10 +343,21 @@ switch ( objectClass.objectClassValue ) { d.simple_name, d.jdbc_class_name, d.sample_fragment, - d.batch_separator + d.batch_separator, + count(h.id) as num_hosts FROM db_types d + LEFT OUTER JOIN hosts h ON + d.id = h.db_type_id ${where} + GROUP BY + d.id, + d.context, + d.full_name, + d.simple_name, + d.jdbc_class_name, + d.sample_fragment, + d.batch_separator ORDER BY d.full_name """, whereParams) { row -> @@ -358,6 +369,7 @@ switch ( objectClass.objectClassValue ) { attribute 'className', row.jdbc_class_name attribute 'sample_fragment', row.sample_fragment attribute 'batch_separator', row.batch_separator + attribute 'num_hosts', row.num_hosts } } diff --git a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/models/DBType.js b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/models/DBType.js index 5ade0ff..d02fb3c 100644 --- a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/models/DBType.js +++ b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/models/DBType.js @@ -7,7 +7,8 @@ define(["Backbone"], function (Backbone) { "full_name": "", "selected": false, "context": "host", - "className": "" + "className": "", + "num_hosts": 0 } }); });
\ No newline at end of file diff --git a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/router.js b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/router.js index e242c64..415e053 100644 --- a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/router.js +++ b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/router.js @@ -21,6 +21,7 @@ define([ DBType: function (db_type_id) { // update currently-selected dbtype dbTypes.setSelectedType(parseInt(db_type_id), true); + schemaDef.set({"dbType": dbTypes.getSelectedType()}); dbTypesListView.render(); }, diff --git a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/templates/dbTypes.html b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/templates/dbTypes.html index 8120fca..fb7a43f 100644 --- a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/templates/dbTypes.html +++ b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/templates/dbTypes.html @@ -3,6 +3,6 @@ </a> <ul class="dropdown-menu"> {{#each dbTypes}} - <li db_type_id="{{this.id}}" class="{{this.className}}"><a href="#"><i class="icon-tag"></i>{{this.full_name}}</a></li> + <li db_type_id="{{this.id}}" class="{{this.className}}{{#unless show}} hidden{{/unless}}"><a href="#"><i class="icon-tag"></i>{{this.full_name}}</a></li> {{/each}} </ul> diff --git a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/views/DBTypesList.js b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/views/DBTypesList.js index a1bb926..dccfe37 100644 --- a/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/views/DBTypesList.js +++ b/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/views/DBTypesList.js @@ -21,6 +21,7 @@ define (["jquery", "Backbone", "Handlebars", "text!fiddle_backbone/templates/dbT dbTypes: this.collection.map(function (dbType) { var json = dbType.toJSON(); json.className = (json.selected ? "active" : ""); + json.show = (json.context != 'host' || json.num_hosts > 0) || json.id === selectedDBType.get("id"); return json; }), selectedFullName: selectedDBType.get("full_name") |