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