summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakefeasel <jfeasel@gmail.com>2015-03-06 17:20:35 -0800
committerjakefeasel <jfeasel@gmail.com>2015-03-06 17:20:35 -0800
commit8a11d51925de7a08f203b4448cfb72a7816a5192 (patch)
tree86c744c3c38ceafde343b7e1096c279ef057c847
parenta1dd2e944e5254bad419a504e727c3813caa9311 (diff)
downloadsqlfiddle2-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
-rw-r--r--src/main/resources/conf/provisioner.openicf-fiddles.json10
-rw-r--r--src/main/resources/script/createSchema.groovy9
-rw-r--r--src/main/resources/script/executeQuery.groovy9
-rw-r--r--src/main/resources/tools/fiddles/SearchScript.groovy14
-rw-r--r--src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/models/DBType.js3
-rw-r--r--src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/router.js1
-rw-r--r--src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/templates/dbTypes.html2
-rw-r--r--src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/views/DBTypesList.js1
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")