Skip to content

Commit 73b7e40

Browse files
committed
feat: more converter for net.sf.jsqlparser expressions
1 parent 05cd13e commit 73b7e40

File tree

3 files changed

+28
-18
lines changed

3 files changed

+28
-18
lines changed

src/main/scala/dev/mongocamp/driver/mongodb/lucene/LuceneQueryConverter.scala

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,15 @@ object LuceneQueryConverter extends LazyLogging {
186186
}
187187

188188
private def appendPhraseQueryToSearchMap(negated: Boolean, searchMapResponse: mutable.Map[String, Any], query: PhraseQuery): Unit = {
189-
val listOfSearches = query.getTerms.map(term => Map(term.field() -> generateRegexQuery(s"(.*?)${checkAndConvertValue(term.text())}(.*?)", "i"))).toList
189+
val listOfSearches = query.getTerms.map(term => {
190+
val convertedValue = checkAndConvertValue(term.text())
191+
if (convertedValue.isInstanceOf[String]) {
192+
Map(term.field() -> generateRegexQuery(s"(.*?)$convertedValue(.*?)", "i"))
193+
}
194+
else {
195+
Map(term.field() -> Map("$eq" -> convertedValue))
196+
}
197+
}).toList
190198
if (negated) {
191199
searchMapResponse.put("$nor", listOfSearches)
192200
}
@@ -223,10 +231,12 @@ object LuceneQueryConverter extends LazyLogging {
223231
val parsedOptions: List[Date] = Try(new DateTime(s).toDate).toOption.toList ++ datePatters.flatMap(pattern => {
224232
try {
225233
val formatter = new SimpleDateFormat(pattern)
226-
Option(formatter.parse(s))
234+
val r = Option(formatter.parse(s))
235+
logger.info(s"parsed date $s with pattern $pattern to $r")
236+
r
227237
}
228238
catch {
229-
case _: Exception =>
239+
case e: Exception =>
230240
None
231241
}
232242
}).distinct
@@ -241,9 +251,9 @@ object LuceneQueryConverter extends LazyLogging {
241251
}
242252

243253
private lazy val datePatters = List(
244-
"yyyyMMdd'T'HHmmssSSSZZ",
245-
"yyyyMMdd'T'HHmmssZZ",
246-
"yyyyMMdd'T'HHmmZZ",
254+
"yyyyMMdd'T'HHmmssSSS'Z'",
255+
"yyyyMMdd'T'HHmmssZ",
256+
"yyyyMMdd'T'HHmmZ",
247257
"yyyyMMdd'T'HHmmssSSS",
248258
"yyyyMMdd'T'HHmmss",
249259
"yyyyMMdd'T'HHmm",

src/main/scala/dev/mongocamp/driver/mongodb/sql/MongoSqlQueryHolder.scala

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,29 @@ import dev.mongocamp.driver.mongodb._
55
import dev.mongocamp.driver.mongodb.database.DatabaseProvider
66
import dev.mongocamp.driver.mongodb.database.DatabaseProvider.CollectionSeparator
77
import dev.mongocamp.driver.mongodb.exception.SqlCommandNotSupportedException
8-
import dev.mongocamp.driver.mongodb.json._
98
import dev.mongocamp.driver.mongodb.sql.SQLCommandType.SQLCommandType
10-
import io.circe.generic.auto._
11-
import io.circe.syntax._
12-
import net.sf.jsqlparser.expression.operators.conditional.{ AndExpression, OrExpression }
9+
import net.sf.jsqlparser.expression.operators.arithmetic.Concat
10+
import net.sf.jsqlparser.expression.operators.conditional.{AndExpression, OrExpression}
1311
import net.sf.jsqlparser.expression.operators.relational._
14-
import net.sf.jsqlparser.expression.{ ArrayConstructor, Expression, NotExpression, SignedExpression }
15-
import net.sf.jsqlparser.parser.{ CCJSqlParser, StreamProvider }
16-
import net.sf.jsqlparser.schema.{ Column, Table }
17-
import net.sf.jsqlparser.statement.{ ShowStatement, Statement }
12+
import net.sf.jsqlparser.expression.{ArrayConstructor, Expression, NotExpression, SignedExpression}
13+
import net.sf.jsqlparser.parser.{CCJSqlParser, StreamProvider}
14+
import net.sf.jsqlparser.schema.{Column, Table}
1815
import net.sf.jsqlparser.statement.alter.Alter
1916
import net.sf.jsqlparser.statement.create.index.CreateIndex
2017
import net.sf.jsqlparser.statement.create.table.CreateTable
2118
import net.sf.jsqlparser.statement.delete.Delete
2219
import net.sf.jsqlparser.statement.drop.Drop
2320
import net.sf.jsqlparser.statement.execute.Execute
2421
import net.sf.jsqlparser.statement.insert.Insert
25-
import net.sf.jsqlparser.statement.select.{ FromItem, PlainSelect, Select, SelectItem }
22+
import net.sf.jsqlparser.statement.select.{FromItem, PlainSelect, Select, SelectItem}
2623
import net.sf.jsqlparser.statement.show.ShowTablesStatement
2724
import net.sf.jsqlparser.statement.truncate.Truncate
2825
import net.sf.jsqlparser.statement.update.Update
26+
import net.sf.jsqlparser.statement.{ShowStatement, Statement}
2927
import org.bson.conversions.Bson
3028
import org.mongodb.scala.model.IndexOptions
31-
import org.mongodb.scala.model.Sorts.{ ascending, metaTextScore }
32-
import org.mongodb.scala.{ Document, Observable, SingleObservable }
29+
import org.mongodb.scala.model.Sorts.ascending
30+
import org.mongodb.scala.{Document, Observable, SingleObservable}
3331

3432
import java.sql.SQLException
3533
import java.util.Date
@@ -232,10 +230,12 @@ class MongoSqlQueryHolder {
232230
else {
233231
e.getValue
234232
}
233+
case e: net.sf.jsqlparser.expression.BooleanValue => e.getValue
235234
case e: net.sf.jsqlparser.expression.DateValue => e.getValue
236235
case e: net.sf.jsqlparser.expression.TimeValue => e.getValue
237236
case e: net.sf.jsqlparser.expression.TimestampValue => e.getValue
238237
case _: net.sf.jsqlparser.expression.NullValue => null
238+
case e: Concat => Map("$concat" -> List(convertValue(e.getLeftExpression), convertValue(e.getRightExpression)))
239239
case t: net.sf.jsqlparser.expression.TimeKeyExpression =>
240240
t.getStringValue.toUpperCase match {
241241
case "CURRENT_TIMESTAMP" => new Date()

src/test/scala/dev/mongocamp/driver/mongodb/jdbc/LiquibaseJdbcSpec.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ class LiquibaseJdbcSpec extends BaseJdbcSpec with LazyLogging {
3333
logger.error(e.getMessage, e)
3434
false must beTrue
3535
}
36-
}.pendingUntilFixed()
36+
}
3737
}
3838
}

0 commit comments

Comments
 (0)