datanucleus-rdbms icon indicating copy to clipboard operation
datanucleus-rdbms copied to clipboard

Query handling of CAST only caters for some situations, and doesn't always add a discriminator clause

Open andyjefferson opened this issue 8 years ago • 1 comments

If we have something like class Base (SINGLE_TABLE, with DISCRIMINATOR) class Sub extends Base (SUPERCLASS_TABLE)

and we have a query like

SELECT b FROM Base b WHERE (TREAT(b) AS Sub).someField = value

then this currently ignore the TREAT (cast) whereas it should add a DISCRIMINATOR clause.

The problem is that we can only add the discriminator clause to a BooleanExpression ... i.e let it propagate back up to the {...}.someField = value and add the discriminator constraint there.

andyjefferson avatar Apr 11 '16 08:04 andyjefferson

See ObjectExpression.cast(). Near the end there is a block "if (castSqlTbl == table)". We need to allow ObjectExpression to have a BooleanExpression adding (when part of FILTER), and then when we evaluate a BooleanExpression from the ObjectExpression (e.g in ObjectExpression = value) we then add the BooleanExpression the ObjectExpression has attached.

andyjefferson avatar Sep 12 '16 17:09 andyjefferson