src/Pure/General/sql.scala
changeset 65696 3f53a05c1266
parent 65695 4edac706bc5e
child 65697 60f4fb867d70
--- a/src/Pure/General/sql.scala	Wed May 03 15:10:22 2017 +0200
+++ b/src/Pure/General/sql.scala	Wed May 03 15:16:55 2017 +0200
@@ -115,7 +115,7 @@
 
   /* tables */
 
-  sealed case class Table(name: String, columns: List[Column], view: String = "")
+  sealed case class Table(name: String, columns: List[Column], body: String = "")
   {
     private val columns_index: Map[String, Int] =
       columns.iterator.map(_.name).zipWithIndex.toMap
@@ -125,9 +125,11 @@
       case bad => error("Duplicate column names " + commas_quote(bad) + " for table " + quote(name))
     }
 
-    def is_view: Boolean = view != ""
+    def ident: String = SQL.ident(name)
 
-    def ident: String = SQL.ident(name)
+    def expr: String =
+      if (body == "") error("Missing SQL body for table " + quote(name))
+      else SQL.enclose(body)
 
     def sql_columns(sql_type: Type.Value => String): String =
     {
@@ -305,9 +307,8 @@
 
     def create_view(table: Table, strict: Boolean = false): Unit =
     {
-      require(table.is_view)
       if (strict || !tables.contains(table.name)) {
-        val sql = "CREATE VIEW " + ident(table.name) + " AS " + table.view
+        val sql = "CREATE VIEW " + table.ident + " AS " + table.expr
         using(statement(sql))(_.execute())
       }
     }