This is an automated email from the ASF dual-hosted git repository.

sergeykamov pushed a commit to branch NLPCRAFT-30
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/NLPCRAFT-30 by this push:
     new fa19dcf  WIP.
fa19dcf is described below

commit fa19dcfaa4ba2e0ccfab1ee8e96318888aa2e7dc
Author: Sergey Kamov <[email protected]>
AuthorDate: Sat Apr 4 21:25:24 2020 +0300

    WIP.
---
 .../apache/nlpcraft/examples/sql/SqlModel.scala    |  2 +-
 .../apache/nlpcraft/examples/sql/SqlResult.scala   | 20 ------------
 .../nlpcraft/examples/sql/db/SqlAccess.scala       |  1 -
 .../nlpcraft/examples/sql/db/SqlBuilder.scala      | 37 ++++++----------------
 .../nlpcraft/examples/sql/db/SqlCondition.scala    |  2 +-
 .../apache/nlpcraft/examples/sql/db/SqlQuery.scala |  2 +-
 .../nlpcraft/examples/sql/db/SqlResult.scala       |  3 ++
 .../model/tools/sqlgen/impl/NCSqlBeans.scala       |  4 +--
 .../tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala | 36 ++++++++++-----------
 9 files changed, 34 insertions(+), 73 deletions(-)

diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala 
b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
index dd73fae..ff715f1 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
@@ -145,7 +145,7 @@ class SqlModel extends 
NCModelFileAdapter("org/apache/nlpcraft/examples/sql/sql_
         "term(condVals)={id == 'condition:value'}[0,7] " +
         "term(condDates)={id == 'condition:date'}[0,7] " +
         "term(condFreeDate)={id == 'nlpcraft:date'}? " +
-         // Simplified version of aggregation wih single function column and 
one optional group by column.
+         // The simplified version of aggregation wih single function column 
and one optional group by column.
         "term(sort)={id == 'nlpcraft:sort'}? " +
         "term(limit)={id == 'nlpcraft:limit'}?"
     )
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlResult.scala 
b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlResult.scala
deleted file mode 100644
index 8794f86..0000000
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlResult.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.nlpcraft.examples.sql
-
-case class SqlResult(columns: Seq[String], rows: Seq[Seq[String]])
\ No newline at end of file
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala 
b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
index b564094..445d196 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
@@ -22,7 +22,6 @@ import java.sql.{Connection, SQLException}
 import com.github.vertical_blank.sqlformatter.SqlFormatter
 import com.jakewharton.fliptables.FlipTable
 import com.typesafe.scalalogging.LazyLogging
-import org.apache.nlpcraft.examples.sql.SqlResult
 import org.h2.jdbcx.JdbcDataSource
 import resource.managed
 
diff --git 
a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala 
b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
index f243891..44d32d8 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
@@ -288,45 +288,26 @@ case class SqlBuilder(schema: NCSqlSchema) extends 
LazyLogging {
         condsNorm = condsNorm.distinct
         sortsNorm = sortsNorm.distinct
 
-        // Extends data.
-        case class Ext(
-            tables: Seq[NCSqlTable],
-            columns: Seq[String],
-            groupBy: Seq[NCSqlColumn],
-            distinct: Boolean,
-            sorts: Seq[NCSqlSort],
-            conditions: Seq[String],
-            parameters: Seq[Any]
-        )
-
         val extTabs = extendTables(tabsNorm)
         val extCols = extendColumns(colsNorm, extTabs, freeDateColOpt)
         val (extConds, extParams) = extendConditions(condsNorm, extTabs, 
tabsNorm, freeDateColOpt)
 
-        val ext =
-            Ext(
-                tables = extTabs,
-                columns = sort(extCols, colsNorm, tabsNorm).map(sql),
-                groupBy = Seq.empty,
-                distinct = extCols.forall(col ⇒ 
isString(schemaCols(Key(col.getTable, col.getColumn)))),
-                sorts = extendSort(sortsNorm, tabsNorm, extCols),
-                conditions = extConds,
-                parameters = extParams
-            )
+        val extSortCols = sort(extCols, colsNorm, tabsNorm).map(sql)
+        val distinct = extCols.forall(col ⇒ 
isString(schemaCols(Key(col.getTable, col.getColumn))))
+        val extSorts = extendSort(sortsNorm, tabsNorm, extCols)
 
         SqlQuery(
             sql =
                 s"""
                    |SELECT
-                   |  ${if (ext.distinct) "DISTINCT" else ""}
-                   |  ${ext.columns.mkString(", ")}
-                   |  FROM ${ext.tables.map(sql).mkString(", ")}
-                   |  ${if (ext.conditions.isEmpty) "" else s"WHERE 
${ext.conditions.mkString(" AND ")}"}
-                   |  ${if (ext.groupBy.isEmpty) "" else s"GROUP BY 
${ext.groupBy.map(sql).mkString(", ")}"}
-                   |  ${if (ext.sorts.isEmpty) "" else s"ORDER BY 
${ext.sorts.map(sql).mkString(", ")}"}
+                   |  ${if (distinct) "DISTINCT" else ""}
+                   |  ${extSortCols.mkString(", ")}
+                   |  FROM ${extTabs.map(sql).mkString(", ")}
+                   |  ${if (extConds.isEmpty) "" else s"WHERE 
${extConds.mkString(" AND ")}"}
+                   |  ${if (extSorts.isEmpty) "" else s"ORDER BY 
${extSorts.map(sql).mkString(", ")}"}
                    |  LIMIT ${limit.flatMap(p ⇒ 
Some(p.getLimit)).getOrElse(DFLT_LIMIT)}
                    |""".stripMargin.split(" 
").map(_.trim).filter(_.nonEmpty).mkString(" "),
-            parameters = ext.parameters
+            parameters = extParams
         )
     }
 }
\ No newline at end of file
diff --git 
a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlCondition.scala 
b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlCondition.scala
index 061e1e8..0ad0975 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlCondition.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlCondition.scala
@@ -19,7 +19,7 @@ package org.apache.nlpcraft.examples.sql.db
 
 import org.apache.nlpcraft.model.tools.sqlgen.NCSqlColumn
 
-trait SqlCondition {
+sealed trait SqlCondition {
     def column: NCSqlColumn
 }
 
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlQuery.scala 
b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlQuery.scala
index 5462a1f..85cda44 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlQuery.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlQuery.scala
@@ -15,6 +15,6 @@
  * limitations under the License.
  */
 
-package org.apache.nlpcraft.examples.sql.db;;
+package org.apache.nlpcraft.examples.sql.db
 
 case class SqlQuery(sql: String, parameters: Seq[Any])
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlResult.scala 
b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlResult.scala
new file mode 100644
index 0000000..bdd386e
--- /dev/null
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlResult.scala
@@ -0,0 +1,3 @@
+package org.apache.nlpcraft.examples.sql.db
+
+case class SqlResult(columns: Seq[String], rows: Seq[Seq[String]])
diff --git 
a/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlBeans.scala 
b/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlBeans.scala
index dd10cd3..8dff725 100644
--- 
a/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlBeans.scala
+++ 
b/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlBeans.scala
@@ -86,13 +86,13 @@ case class NCSqlSortImpl(column: NCSqlColumn, asc: Boolean) 
extends NCSqlSort {
   * @param extraTables
   * @param defaultDate
   */
-case class NCSqlTableImpl(table: String, columns: Seq[NCSqlColumn], sort: 
Seq[NCSqlSort], select: Seq[String], extraTables: Seq[String], defaultDate: 
NCSqlColumn) extends NCSqlTable {
+case class NCSqlTableImpl(table: String, columns: Seq[NCSqlColumn], sort: 
Seq[NCSqlSort], select: Seq[String], extraTables: Seq[String], defaultDate: 
Option[NCSqlColumn]) extends NCSqlTable {
     override def getTable: String = table
     override def getColumns: util.List[NCSqlColumn] = columns.asJava
     override def getDefaultSort: util.List[NCSqlSort] = sort.asJava
     override def getDefaultSelect: util.List[String] = select.asJava
     override def getExtraTables: util.List[String] = extraTables.asJava
-    override def getDefaultDate: Optional[NCSqlColumn] = 
Option(defaultDate).asJava
+    override def getDefaultDate: Optional[NCSqlColumn] = defaultDate.asJava
 }
 
 /**
diff --git 
a/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
 
b/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
index 4527995..7899d00 100644
--- 
a/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
+++ 
b/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
@@ -24,6 +24,7 @@ import org.apache.nlpcraft.model.NCModel
 import org.apache.nlpcraft.model.tools.sqlgen._
 
 import scala.collection.JavaConverters._
+import scala.compat.java8.OptionConverters._
 
 /**
   * 
@@ -76,7 +77,7 @@ object NCSqlSchemaBuilderImpl {
                     val dfltSelect = x(p.metax("sql:defaultselect"))
                     val dfltSort = x(p.metax("sql:defaultsort"))
                     val extra = x(p.meta("sql:extratables"))
-                    val defDate: String = p.meta("sql:defaultdate")
+                    val defDateOpt: Option[String] = 
p.metaOpt("sql:defaultdate").asScala
 
                     val cols = tabCols(tab).toSeq.sortBy(p ⇒ (if (p.isPk) 0 
else 1, p.getColumn)).asJava
                     
@@ -89,7 +90,7 @@ object NCSqlSchemaBuilderImpl {
                             map(s ⇒ {
                                 def error() = throw new NCException(s"Invalid 
default sort declaration in: $s")
                                 
-                                var pair = defDate.split("\\.")
+                                var pair = s.split("\\.")
                                 
                                 val t =
                                     pair.length match {
@@ -122,24 +123,21 @@ object NCSqlSchemaBuilderImpl {
                             }),
                         dfltSelect,
                         extra,
-                        if (defDate != null) {
-                            def error() = throw new NCException(s"Invalid 
default date declaration in: $defDate")
-                            
-                            val pair = defDate.split("\\.")
-                            
-                            if (pair.length != 2)
-                                error()
-                            
-                            val tab = pair.head
-                            val col = pair.last.toLowerCase
-                            
-                            tabCols.
-                                getOrElse(tab, error()).
-                                find(_.getColumn == col).
-                                getOrElse(error())
+                        defDateOpt match {
+                            case Some(defDate) ⇒
+                                def error() = throw new NCException(s"Invalid 
default date declaration in: $defDate")
+
+                                val pair = defDate.split("\\.")
+
+                                if (pair.length != 2)
+                                    error()
+
+                                val tab = pair.head
+                                val col = pair.last.toLowerCase
+
+                                Some(tabCols.getOrElse(tab, 
error()).find(_.getColumn == col).getOrElse(error()))
+                            case None ⇒ None
                         }
-                        else
-                            null
                     )
                     
                     table

Reply via email to