Midgard.QueryStorage storage = new Midgard.QueryStorage ("midgard_page");
Midgard.QuerySelect select = new Midgard.QuerySelect (cnc, storage);
Midgard.QueryProperty prop1 = new Midgard.QueryProperty ("metadata.created", null);
Midgard.QueryValue val1 = new Midgard.QueryValue ("2000-01-01 10:10:10");
Midgard.QueryConstraint cnstr1 = new Midgard.QueryConstraint (prop1, ">", val1, null);
Midgard.QueryProperty prop2 = new Midgard.QueryProperty ("name", null);
Midgard.QueryValue val2 = new Midgard.QueryValue ("");
Midgard.QueryConstraint cnstr2 = new Midgard.QueryConstraint (prop2, "<>", val2, null);
Midgard.QueryProperty prop3 = new Midgard.QueryProperty ("up", null);
Midgard.QueryValue val3 = new Midgard.QueryValue (0);
Midgard.QueryConstraint cnstr3 = new Midgard.QueryConstraint (prop3, "<>", val3, null);
Midgard.QueryProperty prop4 = new Midgard.QueryProperty ("style.metadata.revised", null);
Midgard.QueryValue val4 = new Midgard.QueryValue ("2000-01-01 10:10:10");
Midgard.QueryConstraint cnstr4 = new Midgard.QueryConstraint (prop4, ">", val4, null);
Midgard.QueryProperty prop5 = new Midgard.QueryProperty ("parameter.name", null);
Midgard.QueryValue val5 = new Midgard.QueryValue ("some domain");
Midgard.QueryConstraint cnstr5 = new Midgard.QueryConstraint (prop5, "=", val5, null);
Midgard.QueryProperty prop6 = new Midgard.QueryProperty ("attachment.name", null);
Midgard.QueryValue val6 = new Midgard.QueryValue ("my attachment");
Midgard.QueryConstraint cnstr6 = new Midgard.QueryConstraint (prop6, "=", val6, null);
Midgard.QueryGroupConstraint group_constraint_and = new Midgard.QueryGroupConstraint ("AND", cnstr4, cnstr5, cnstr6);
Midgard.QueryGroupConstraint group_constraint = new Midgard.QueryGroupConstraint ("OR", cnstr1, cnstr2, cnstr3, group_constraint_and);
Midgard.QueryProperty prop7 = new Midgard.QueryProperty ("metadata.creator", null);
Midgard.QueryStorage join_storage = new Midgard.QueryStorage ("midgard_person");
Midgard.QueryProperty prop8 = new Midgard.QueryProperty ("guid", join_storage);
Midgard.QueryProperty prop9 = new Midgard.QueryProperty ("metadata.creator", null);
Midgard.QueryStorage join_storage1 = new Midgard.QueryStorage ("midgard_page");
Midgard.QueryProperty prop10 = new Midgard.QueryProperty ("metadata.revisor", join_storage1);
select.add_join ("LEFT", prop7, prop8);
select.add_join ("LEFT", prop9, prop10);
select.set_constraint (group_constraint);
select.set_limit (1);
select.execute();
Generated SQL:
SELECT
(...)
t1.metadata_deleted AS deleted,
t1.metadata_isapproved AS isapproved,
t1.metadata_islocked AS islocked
FROM `page` AS t1
LEFT JOIN `person` AS t2 ON (t1.metadata_creator = t2.guid)
LEFT JOIN `page` AS t3 ON (t1.metadata_creator = t3.metadata_revisor)
LEFT JOIN `style` AS t4 ON (t1.style = t4.id)
LEFT JOIN `record_extension` AS t5 ON (t1.guid = t5.parent_guid)
LEFT JOIN `blobs` AS t6 ON (t1.guid = t6.parent_guid)
WHERE (t1.metadata_created > '2000-01-01 10:10:10') OR (t1.name != '') OR (t1.up != 0) OR ((t4.metadata_revised > '2000-01-01 10:10:10') AND (t5.name = 'some domain') AND (t6.name = 'my attachment'))