@@ -7,27 +7,27 @@ import dev.mongocamp.driver.mongodb.database.DatabaseProvider.CollectionSeparato
7
7
import dev .mongocamp .driver .mongodb .exception .SqlCommandNotSupportedException
8
8
import dev .mongocamp .driver .mongodb .sql .SQLCommandType .SQLCommandType
9
9
import 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 }
11
11
import 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 }
15
15
import net .sf .jsqlparser .statement .alter .Alter
16
16
import net .sf .jsqlparser .statement .create .index .CreateIndex
17
17
import net .sf .jsqlparser .statement .create .table .CreateTable
18
18
import net .sf .jsqlparser .statement .delete .Delete
19
19
import net .sf .jsqlparser .statement .drop .Drop
20
20
import net .sf .jsqlparser .statement .execute .Execute
21
21
import 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 }
23
23
import net .sf .jsqlparser .statement .show .ShowTablesStatement
24
24
import net .sf .jsqlparser .statement .truncate .Truncate
25
25
import net .sf .jsqlparser .statement .update .Update
26
- import net .sf .jsqlparser .statement .{ShowStatement , Statement }
26
+ import net .sf .jsqlparser .statement .{ ShowStatement , Statement }
27
27
import org .bson .conversions .Bson
28
28
import org .mongodb .scala .model .IndexOptions
29
29
import org .mongodb .scala .model .Sorts .ascending
30
- import org .mongodb .scala .{Document , Observable , SingleObservable }
30
+ import org .mongodb .scala .{ Document , Observable , SingleObservable }
31
31
32
32
import java .sql .SQLException
33
33
import java .util .Date
@@ -48,7 +48,7 @@ class MongoSqlQueryHolder {
48
48
private var indexOptions : Option [IndexOptions ] = None
49
49
private var callFunction : Option [String ] = None
50
50
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
52
52
53
53
def this (statement : net.sf.jsqlparser.statement.Statement ) = {
54
54
this ()
@@ -211,7 +211,7 @@ class MongoSqlQueryHolder {
211
211
}
212
212
}
213
213
214
- def getKeysForEmptyDocument : Set [String ] = keysForEmptyDocument.toSet
214
+ def getKeysFromSelect : List [String ] = keysFromSelect.toList
215
215
216
216
def hasFunctionCallInSelect : Boolean = keepOneDocument
217
217
@@ -235,7 +235,7 @@ class MongoSqlQueryHolder {
235
235
case e : net.sf.jsqlparser.expression.TimeValue => e.getValue
236
236
case e : net.sf.jsqlparser.expression.TimestampValue => e.getValue
237
237
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)))
239
239
case t : net.sf.jsqlparser.expression.TimeKeyExpression =>
240
240
t.getStringValue.toUpperCase match {
241
241
case " CURRENT_TIMESTAMP" => new Date ()
@@ -343,6 +343,14 @@ class MongoSqlQueryHolder {
343
343
if (classOf [net.sf.jsqlparser.expression.Function ].isAssignableFrom(sI.getExpression.getClass)) {
344
344
keepOneDocument = maybeDistinct.isEmpty
345
345
}
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
+ }
346
354
})
347
355
val aliasList = ArrayBuffer [String ]()
348
356
sqlCommandType = SQLCommandType .Select
@@ -496,7 +504,6 @@ class MongoSqlQueryHolder {
496
504
val expression = if (functionName.equalsIgnoreCase(espr.last)) Map (" $first" -> espr.last) else Map (functionName -> espr.last)
497
505
group += expressionName -> expression
498
506
}
499
- keysForEmptyDocument += Option (se.getAlias).map(_.getName).getOrElse(expressionName)
500
507
}
501
508
502
509
val groupMap = Map (" _id" -> idGroupMap) ++ group.toMap
0 commit comments