@@ -7,27 +7,27 @@ import dev.mongocamp.driver.mongodb.database.DatabaseProvider.CollectionSeparato
77import dev .mongocamp .driver .mongodb .exception .SqlCommandNotSupportedException
88import dev .mongocamp .driver .mongodb .sql .SQLCommandType .SQLCommandType
99import net .sf .jsqlparser .expression .operators .arithmetic .Concat
10- import net .sf .jsqlparser .expression .operators .conditional .{AndExpression , OrExpression }
10+ import net .sf .jsqlparser .expression .operators .conditional .{ AndExpression , OrExpression }
1111import net .sf .jsqlparser .expression .operators .relational ._
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 }
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 }
1515import net .sf .jsqlparser .statement .alter .Alter
1616import net .sf .jsqlparser .statement .create .index .CreateIndex
1717import net .sf .jsqlparser .statement .create .table .CreateTable
1818import net .sf .jsqlparser .statement .delete .Delete
1919import net .sf .jsqlparser .statement .drop .Drop
2020import net .sf .jsqlparser .statement .execute .Execute
2121import net .sf .jsqlparser .statement .insert .Insert
22- import net .sf .jsqlparser .statement .select .{FromItem , PlainSelect , Select , SelectItem }
22+ import net .sf .jsqlparser .statement .select .{ FromItem , PlainSelect , Select , SelectItem }
2323import net .sf .jsqlparser .statement .show .ShowTablesStatement
2424import net .sf .jsqlparser .statement .truncate .Truncate
2525import net .sf .jsqlparser .statement .update .Update
26- import net .sf .jsqlparser .statement .{ShowStatement , Statement }
26+ import net .sf .jsqlparser .statement .{ ShowStatement , Statement }
2727import org .bson .conversions .Bson
2828import org .mongodb .scala .model .IndexOptions
2929import org .mongodb .scala .model .Sorts .ascending
30- import org .mongodb .scala .{Document , Observable , SingleObservable }
30+ import org .mongodb .scala .{ Document , Observable , SingleObservable }
3131
3232import java .sql .SQLException
3333import java .util .Date
@@ -48,7 +48,7 @@ class MongoSqlQueryHolder {
4848 private var indexOptions : Option [IndexOptions ] = None
4949 private var callFunction : Option [String ] = None
5050 private var keepOneDocument : Boolean = false
51- private val keysForEmptyDocument : mutable.Set [String ] = mutable.Set .empty
51+ private val keysFromSelect : mutable.ListBuffer [String ] = mutable.ListBuffer .empty
5252
5353 def this (statement : net.sf.jsqlparser.statement.Statement ) = {
5454 this ()
@@ -211,7 +211,7 @@ class MongoSqlQueryHolder {
211211 }
212212 }
213213
214- def getKeysForEmptyDocument : Set [String ] = keysForEmptyDocument.toSet
214+ def getKeysFromSelect : List [String ] = keysFromSelect.toList
215215
216216 def hasFunctionCallInSelect : Boolean = keepOneDocument
217217
@@ -235,7 +235,7 @@ class MongoSqlQueryHolder {
235235 case e : net.sf.jsqlparser.expression.TimeValue => e.getValue
236236 case e : net.sf.jsqlparser.expression.TimestampValue => e.getValue
237237 case _ : net.sf.jsqlparser.expression.NullValue => null
238- case e : Concat => Map (" $concat" -> List (convertValue(e.getLeftExpression), convertValue(e.getRightExpression)))
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 ()
@@ -343,6 +343,14 @@ class MongoSqlQueryHolder {
343343 if (classOf [net.sf.jsqlparser.expression.Function ].isAssignableFrom(sI.getExpression.getClass)) {
344344 keepOneDocument = maybeDistinct.isEmpty
345345 }
346+ sI match {
347+ case se : SelectItem [Expression ] =>
348+ val expressionName = se.getExpression.toString
349+ val keyFromSelect = Option (se.getAlias).map(_.getName).getOrElse(expressionName)
350+ if (keyFromSelect != " *" ) {
351+ keysFromSelect += keyFromSelect
352+ }
353+ }
346354 })
347355 val aliasList = ArrayBuffer [String ]()
348356 sqlCommandType = SQLCommandType .Select
@@ -496,7 +504,6 @@ class MongoSqlQueryHolder {
496504 val expression = if (functionName.equalsIgnoreCase(espr.last)) Map (" $first" -> espr.last) else Map (functionName -> espr.last)
497505 group += expressionName -> expression
498506 }
499- keysForEmptyDocument += Option (se.getAlias).map(_.getName).getOrElse(expressionName)
500507 }
501508
502509 val groupMap = Map (" _id" -> idGroupMap) ++ group.toMap
0 commit comments