Skip to content

Commit

Permalink
feat: more converter for net.sf.jsqlparser expressions
Browse files Browse the repository at this point in the history
  • Loading branch information
QuadStingray committed Jan 31, 2025
1 parent 05cd13e commit 73b7e40
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,15 @@ object LuceneQueryConverter extends LazyLogging {
}

private def appendPhraseQueryToSearchMap(negated: Boolean, searchMapResponse: mutable.Map[String, Any], query: PhraseQuery): Unit = {
val listOfSearches = query.getTerms.map(term => Map(term.field() -> generateRegexQuery(s"(.*?)${checkAndConvertValue(term.text())}(.*?)", "i"))).toList
val listOfSearches = query.getTerms.map(term => {
val convertedValue = checkAndConvertValue(term.text())
if (convertedValue.isInstanceOf[String]) {
Map(term.field() -> generateRegexQuery(s"(.*?)$convertedValue(.*?)", "i"))
}
else {
Map(term.field() -> Map("$eq" -> convertedValue))
}
}).toList
if (negated) {
searchMapResponse.put("$nor", listOfSearches)
}
Expand Down Expand Up @@ -223,10 +231,12 @@ object LuceneQueryConverter extends LazyLogging {
val parsedOptions: List[Date] = Try(new DateTime(s).toDate).toOption.toList ++ datePatters.flatMap(pattern => {
try {
val formatter = new SimpleDateFormat(pattern)
Option(formatter.parse(s))
val r = Option(formatter.parse(s))
logger.info(s"parsed date $s with pattern $pattern to $r")
r
}
catch {
case _: Exception =>
case e: Exception =>
None
}
}).distinct
Expand All @@ -241,9 +251,9 @@ object LuceneQueryConverter extends LazyLogging {
}

private lazy val datePatters = List(
"yyyyMMdd'T'HHmmssSSSZZ",
"yyyyMMdd'T'HHmmssZZ",
"yyyyMMdd'T'HHmmZZ",
"yyyyMMdd'T'HHmmssSSS'Z'",
"yyyyMMdd'T'HHmmssZ",
"yyyyMMdd'T'HHmmZ",
"yyyyMMdd'T'HHmmssSSS",
"yyyyMMdd'T'HHmmss",
"yyyyMMdd'T'HHmm",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,29 @@ import dev.mongocamp.driver.mongodb._
import dev.mongocamp.driver.mongodb.database.DatabaseProvider
import dev.mongocamp.driver.mongodb.database.DatabaseProvider.CollectionSeparator
import dev.mongocamp.driver.mongodb.exception.SqlCommandNotSupportedException
import dev.mongocamp.driver.mongodb.json._
import dev.mongocamp.driver.mongodb.sql.SQLCommandType.SQLCommandType
import io.circe.generic.auto._
import io.circe.syntax._
import net.sf.jsqlparser.expression.operators.conditional.{ AndExpression, OrExpression }
import net.sf.jsqlparser.expression.operators.arithmetic.Concat
import net.sf.jsqlparser.expression.operators.conditional.{AndExpression, OrExpression}
import net.sf.jsqlparser.expression.operators.relational._
import net.sf.jsqlparser.expression.{ ArrayConstructor, Expression, NotExpression, SignedExpression }
import net.sf.jsqlparser.parser.{ CCJSqlParser, StreamProvider }
import net.sf.jsqlparser.schema.{ Column, Table }
import net.sf.jsqlparser.statement.{ ShowStatement, Statement }
import net.sf.jsqlparser.expression.{ArrayConstructor, Expression, NotExpression, SignedExpression}
import net.sf.jsqlparser.parser.{CCJSqlParser, StreamProvider}
import net.sf.jsqlparser.schema.{Column, Table}
import net.sf.jsqlparser.statement.alter.Alter
import net.sf.jsqlparser.statement.create.index.CreateIndex
import net.sf.jsqlparser.statement.create.table.CreateTable
import net.sf.jsqlparser.statement.delete.Delete
import net.sf.jsqlparser.statement.drop.Drop
import net.sf.jsqlparser.statement.execute.Execute
import net.sf.jsqlparser.statement.insert.Insert
import net.sf.jsqlparser.statement.select.{ FromItem, PlainSelect, Select, SelectItem }
import net.sf.jsqlparser.statement.select.{FromItem, PlainSelect, Select, SelectItem}
import net.sf.jsqlparser.statement.show.ShowTablesStatement
import net.sf.jsqlparser.statement.truncate.Truncate
import net.sf.jsqlparser.statement.update.Update
import net.sf.jsqlparser.statement.{ShowStatement, Statement}
import org.bson.conversions.Bson
import org.mongodb.scala.model.IndexOptions
import org.mongodb.scala.model.Sorts.{ ascending, metaTextScore }
import org.mongodb.scala.{ Document, Observable, SingleObservable }
import org.mongodb.scala.model.Sorts.ascending
import org.mongodb.scala.{Document, Observable, SingleObservable}

import java.sql.SQLException
import java.util.Date
Expand Down Expand Up @@ -232,10 +230,12 @@ class MongoSqlQueryHolder {
else {
e.getValue
}
case e: net.sf.jsqlparser.expression.BooleanValue => e.getValue
case e: net.sf.jsqlparser.expression.DateValue => e.getValue
case e: net.sf.jsqlparser.expression.TimeValue => e.getValue
case e: net.sf.jsqlparser.expression.TimestampValue => e.getValue
case _: net.sf.jsqlparser.expression.NullValue => null
case e: Concat => Map("$concat" -> List(convertValue(e.getLeftExpression), convertValue(e.getRightExpression)))
case t: net.sf.jsqlparser.expression.TimeKeyExpression =>
t.getStringValue.toUpperCase match {
case "CURRENT_TIMESTAMP" => new Date()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ class LiquibaseJdbcSpec extends BaseJdbcSpec with LazyLogging {
logger.error(e.getMessage, e)
false must beTrue
}
}.pendingUntilFixed()
}
}
}

0 comments on commit 73b7e40

Please sign in to comment.