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'))