]
Ramesh Reddy resolved TEIID-2990.
---------------------------------
Labels: Beta1 (was: )
Resolution: Done
Upon investigation it looks like <2.6 version of the MongoDB do not support scalar
values in the $projection. In version 2.6 they introduced $literal construct with which it
is possible.
So, added the version class from jdbc translator, but parked the default server version as
2.4 in the translator. If translator sees this situation in the query, then it will error
with proper message, however if user is working with 2.6 version and have properly set the
database version in the translator override properties to 2.6 then it will use the
$literal construct and return correct result.
MongoDB: Usage of lookup() function throws an exception
-------------------------------------------------------
Key: TEIID-2990
URL:
https://issues.jboss.org/browse/TEIID-2990
Project: Teiid
Issue Type: Bug
Components: Misc. Connectors
Affects Versions: 8.4.1
Reporter: Filip Elias
Assignee: Ramesh Reddy
Labels: Beta1
Fix For: 8.7.1, 8.8
Attachments: server.log
Exception[1] is thrown when function lookup() is used in SQL query.
Mongo translator doesn't support selection of constants only, which causes the
exception(select 1, select 'hi' from smalla).
{code}
[1] 3:59:20,997 ERROR [org.teiid.CONNECTOR] (Worker5_QueryProcessorQueue6) Connector
worker process failed for atomic-request=Ef2Z7E0246by.1.5.3:
com.mongodb.CommandFailureException: { "serverUsed" :
"localhost/127.0.0.1:27017" , "errmsg" : "exception: $projection
requires at least one output field" , "code" : 16403 , "ok" :
0.0}
at com.mongodb.CommandResult.getException(CommandResult.java:71)
{code}
Server log is in the attachment.
Sample query:
{code}
SELECT BQT1.SmallA.IntKey FROM BQT1.SmallA, BQT1.SmallB WHERE BQT1.SmallA.IntKey=
lookup('BQT1.SmallB', 'IntKey', 'StringKey',
BQT1.SmallA.StringKey) ORDER BY IntKey
{code}
Generated mongo commands:
{code}
{ aggregate: "smalla", pipeline: [ { $project: { _m0: "$INTKEY", _m1:
"$STRINGKEY" } } ] }
{code}
and
{code}
{ aggregate: "smallb", pipeline: [ { $project: {} } ] }
{code}