Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

Incorrect advancedCriteria query

$
0
0
I am getting incorrect results from the server-side AdvancedCriteria:

EntryPoint:
Code:

public class TestingModule implements EntryPoint {

        @Override
        public void onModuleLoad() {

                ListGrid lg = new ListGrid();
                lg.setDataSource(DataSource.get("table"));

                ListGridField idField = new ListGridField("f_id");
                idField.setTitle("ID");

                lg.setFields(idField);

                lg.setWidth100();
                lg.setHeight100();

                final VStack layout = new VStack(10);
                layout.setWidth100();
                layout.setHeight100();
                layout.setMembers(lg);

                lg.fetchData();

                layout.draw();
        }

}

table.ds.xml:
Code:

<DataSource ID="table" serverType="sql" tableName="t_vertrag">
        <fields>
                <field name="f_id" type="sequence" primaryKey="true" />

                <field name="f_vertrag_gekuendigt" type="date" />
                <field name="f_vertrag_beginn" type="date" />
                <field name="f_vertragsende" type="date" />

        </fields>

        <operationBindings>
                <operationBinding operationType="fetch">
                        <serverObject className="de.mks_infofabrik.kids.server.dmi.TestDMIHandler"
                                methodName="doFetch" />
                </operationBinding>

        </operationBindings>

</DataSource>

TestDMIHandler:
Code:

public class TestDMIHandler {

        public DSResponse doFetch(DSRequest dsRequest) throws Exception {

                dsRequest.setAdvancedCriteria(getSchuelerCriteria(new Date()));
                DSResponse response = dsRequest.execute();

                return response;
        }

        private AdvancedCriteria getSchuelerCriteria(Date stichtag) {
                AdvancedCriteria vertragGekuendigtCriteria = new AdvancedCriteria(
                                DefaultOperators.Or.getID(), new Criterion[] {
                                                new IsNullCriterion("f_vertrag_gekuendigt"),
                                                new SimpleCriterion("f_vertrag_gekuendigt",
                                                                DefaultOperators.LessThan.getID(), stichtag) });
                AdvancedCriteria vertragZeitraumCriteria = new AdvancedCriteria(
                                DefaultOperators.And.getID(),
                                new Criterion[] {
                                                new SimpleCriterion("f_vertrag_beginn",
                                                                DefaultOperators.LessOrEqual.getID(), stichtag),
                                                new SimpleCriterion("f_vertragsende",
                                                                DefaultOperators.GreaterOrEqual.getID(),
                                                                stichtag) });

                AdvancedCriteria schuelerCriteria = new AdvancedCriteria(
                                DefaultOperators.And.getID(),
                                vertragGekuendigtCriteria.asCriterion(),
                                vertragZeitraumCriteria.asCriterion());

                return schuelerCriteria;
        }

}

The result query, which is incorrect:
Code:

SELECT  t_vertrag.f_id, t_vertrag.f_vertrag_gekuendigt,
t_vertrag.f_vertrag_beginn, t_vertrag.f_vertragsende

FROM t_vertrag WHERE (((t_vertrag.f_vertrag_gekuendigt IS NULL)
OR (t_vertrag.f_vertrag_gekuendigt < '20141103' OR t_vertrag.f_vertrag_gekuendigt IS NULL))
AND ((t_vertrag.f_vertrag_beginn <= '20141103' OR t_vertrag.f_vertrag_beginn IS NULL) AND (t_vertrag.f_vertragsende >= '20141103'
AND t_vertrag.f_vertragsende IS NOT NULL)))

The correct SQL would be:
Code:

SELECT  t_vertrag.f_id, t_vertrag.f_vertrag_gekuendigt,
t_vertrag.f_vertrag_beginn, t_vertrag.f_vertragsende

FROM t_vertrag WHERE (((t_vertrag.f_vertrag_gekuendigt IS NULL)
OR (t_vertrag.f_vertrag_gekuendigt < '20141103' AND t_vertrag.f_vertrag_gekuendigt IS NOT NULL))
AND ((t_vertrag.f_vertrag_beginn <= '20141103' AND t_vertrag.f_vertrag_beginn IS NOT NULL) AND (t_vertrag.f_vertragsende >= '20141103'
AND t_vertrag.f_vertragsende IS NOT NULL)))

What is happening here ?

Using SmartGWT 4.1p power v9.1p_2014-10-28/PowerEdition Deployment (built 2014-10-28) with MSSQL 2014.

Viewing all articles
Browse latest Browse all 4756

Trending Articles