Originally reported by: Oleg Volchkov (Bitbucket: ovolchkov, GitHub: Unknown)
Для замены конструкции:
@_allWhere[aOptions]
## aOptions.regionID
## aOptions.regions
## aOptions.houseID
## aOptions.houses
^cleanMethodArgument[]
$result[^BASE:_allWhere[$aOptions]
^switch(true){
^case(^aOptions.contains[regionID]){
and $mcID in (^valuesArray[mcID;^regions.aggregate[_fields(mcID);$.regionID[$aOptions.regionID]]])
}
^case(^aOptions.contains[regions]){
and $mcID in (^valuesArray[mcID;^regions.aggregate[_fields(mcID);$.regions[$aOptions.regions]]])
}
}
^switch(true){
^case(^aOptions.contains[houseID]){
and $mcID in (^valuesArray[mcID;^houses.aggregate[_fields(mcID);$.houseID[$aOptions.houseID]]])
}
^case(^aOptions.contains[houses]){
and $mcID in (^valuesArray[mcID;^houses.aggregate[_fields(mcID);$.houses[$aOptions.houses]]])
}
}
]
— Хочется добавить одно поле для которого будет сгенерирован sql для подзапроса c IN.
— Пока достаточно только по одному ключу. Если нужны условия, то надо реализовывать логику в _allWhere.
Т.е. хочется такого:
^addLookupField[field_name;lookup_model;lookup_field;options]
@create[aOptions]
^addFields[$.mcID[$.primary(true)]]
^addLookupField[houseID;$core.mc.houses;houseID;
$.plural[houses]
$.selfKey[mcID] # если есть первичный ключ, то подставляем автоматом
$.lookupKey[mcID] # если не совпадает с selfKey
]
...
^core.mc.all[$.houseID[$flat.houseID]]
select mcID, ...
from table_name
where 1=1
and [selfKey] in (select relatedKey from related_model_table where houseID in ([values]))
Подумать как быть с операторами. По идее нам подходят in и !in. $.houseID[value] <=> $.[houseID in][value].
Джанго:
https://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield
Originally reported by: Oleg Volchkov (Bitbucket: ovolchkov, GitHub: Unknown)
Для замены конструкции:
— Хочется добавить одно поле для которого будет сгенерирован sql для подзапроса c IN.
— Пока достаточно только по одному ключу. Если нужны условия, то надо реализовывать логику в _allWhere.
Т.е. хочется такого:
Подумать как быть с операторами. По идее нам подходят in и !in.$.houseID[value] <=> $ .[houseID in][value].
Джанго:
https://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield