on dev help sign in
subquery expressions
commit47d210eee429eca77e67d92f4ea50a670f5a4fdd authorEitan Chatav <eitan.chatav@gmail.com> dateTue 14 Aug 2018, 15:59 (8 years ago) parentb259049
1 file changed+215
squeal-postgresql/src/Squeal/PostgreSQL/Query.hs+215
squeal-postgresql/src/Squeal/PostgreSQL/Query.hs+215
@@ -89,6 +89,35 @@ module Squeal.PostgreSQL.Query
8989 -- * Sorting
9090 , SortExpression (..)
9191 , renderSortExpression
92+ -- * Subquery expressions
93+ , unsafeSubqueryExpression
94+ , unsafeRowSubqueryExpression
95+ , in_
96+ , rowIn
97+ , allEq
98+ , rowAllEq
99+ , anyEq
100+ , rowAnyEq
101+ , allNeq
102+ , rowAllNeq
103+ , anyNeq
104+ , rowAnyNeq
105+ , allLt
106+ , rowAllLt
107+ , anyLt
108+ , rowAnyLt
109+ , allLte
110+ , rowAllLte
111+ , anyLte
112+ , rowAnyLte
113+ , allGt
114+ , rowAllGt
115+ , anyGt
116+ , rowAnyGt
117+ , allGte
118+ , rowAllGte
119+ , anyGte
120+ , rowAnyGte
92121 ) where
93122
94123import Control.DeepSeq
@@ -1072,3 +1101,189 @@ renderSortExpression = \case
10721101 <+> "DESC NULLS FIRST"
10731102 AscNullsLast expression -> renderExpression expression <+> "ASC NULLS LAST"
10741103 DescNullsLast expression -> renderExpression expression <+> "DESC NULLS LAST"
1104+
1105+unsafeSubqueryExpression
1106+ :: ByteString
1107+ -> Expression schema from grp params ty
1108+ -> Query schema params '[alias ::: ty]
1109+ -> Condition schema from grp params
1110+unsafeSubqueryExpression op x q = UnsafeExpression $
1111+ renderExpression x <+> op <+> parenthesized (renderQuery q)
1112+
1113+unsafeRowSubqueryExpression
1114+ :: SListI row
1115+ => ByteString
1116+ -> NP (Aliased (Expression schema from grp params)) row
1117+ -> Query schema params row
1118+ -> Condition schema from grp params
1119+unsafeRowSubqueryExpression op xs q = UnsafeExpression $
1120+ renderExpression (row xs) <+> op <+> parenthesized (renderQuery q)
1121+
1122+in_
1123+ :: Expression schema from grp params ty
1124+ -> Query schema params '[alias ::: ty]
1125+ -> Condition schema from grp params
1126+in_ = unsafeSubqueryExpression "IN"
1127+
1128+rowIn
1129+ :: SListI row
1130+ => NP (Aliased (Expression schema from grp params)) row
1131+ -> Query schema params row
1132+ -> Condition schema from grp params
1133+rowIn = unsafeRowSubqueryExpression "IN"
1134+
1135+allEq
1136+ :: Expression schema from grp params ty
1137+ -> Query schema params '[alias ::: ty]
1138+ -> Condition schema from grp params
1139+allEq = unsafeSubqueryExpression "ALL ="
1140+
1141+rowAllEq
1142+ :: SListI row
1143+ => NP (Aliased (Expression schema from grp params)) row
1144+ -> Query schema params row
1145+ -> Condition schema from grp params
1146+rowAllEq = unsafeRowSubqueryExpression "ALL ="
1147+
1148+anyEq
1149+ :: Expression schema from grp params ty
1150+ -> Query schema params '[alias ::: ty]
1151+ -> Condition schema from grp params
1152+anyEq = unsafeSubqueryExpression "ANY ="
1153+
1154+rowAnyEq
1155+ :: SListI row
1156+ => NP (Aliased (Expression schema from grp params)) row
1157+ -> Query schema params row
1158+ -> Condition schema from grp params
1159+rowAnyEq = unsafeRowSubqueryExpression "ANY ="
1160+
1161+allNeq
1162+ :: Expression schema from grp params ty
1163+ -> Query schema params '[alias ::: ty]
1164+ -> Condition schema from grp params
1165+allNeq = unsafeSubqueryExpression "ALL <>"
1166+
1167+rowAllNeq
1168+ :: SListI row
1169+ => NP (Aliased (Expression schema from grp params)) row
1170+ -> Query schema params row
1171+ -> Condition schema from grp params
1172+rowAllNeq = unsafeRowSubqueryExpression "ALL <>"
1173+
1174+anyNeq
1175+ :: Expression schema from grp params ty
1176+ -> Query schema params '[alias ::: ty]
1177+ -> Condition schema from grp params
1178+anyNeq = unsafeSubqueryExpression "ANY <>"
1179+
1180+rowAnyNeq
1181+ :: SListI row
1182+ => NP (Aliased (Expression schema from grp params)) row
1183+ -> Query schema params row
1184+ -> Condition schema from grp params
1185+rowAnyNeq = unsafeRowSubqueryExpression "ANY <>"
1186+
1187+allLt
1188+ :: Expression schema from grp params ty
1189+ -> Query schema params '[alias ::: ty]
1190+ -> Condition schema from grp params
1191+allLt = unsafeSubqueryExpression "ALL <"
1192+
1193+rowAllLt
1194+ :: SListI row
1195+ => NP (Aliased (Expression schema from grp params)) row
1196+ -> Query schema params row
1197+ -> Condition schema from grp params
1198+rowAllLt = unsafeRowSubqueryExpression "ALL <"
1199+
1200+anyLt
1201+ :: Expression schema from grp params ty
1202+ -> Query schema params '[alias ::: ty]
1203+ -> Condition schema from grp params
1204+anyLt = unsafeSubqueryExpression "ANY <"
1205+
1206+rowAnyLt
1207+ :: SListI row
1208+ => NP (Aliased (Expression schema from grp params)) row
1209+ -> Query schema params row
1210+ -> Condition schema from grp params
1211+rowAnyLt = unsafeRowSubqueryExpression "ANY <"
1212+
1213+allLte
1214+ :: Expression schema from grp params ty
1215+ -> Query schema params '[alias ::: ty]
1216+ -> Condition schema from grp params
1217+allLte = unsafeSubqueryExpression "ALL <="
1218+
1219+rowAllLte
1220+ :: SListI row
1221+ => NP (Aliased (Expression schema from grp params)) row
1222+ -> Query schema params row
1223+ -> Condition schema from grp params
1224+rowAllLte = unsafeRowSubqueryExpression "ALL <="
1225+
1226+anyLte
1227+ :: Expression schema from grp params ty
1228+ -> Query schema params '[alias ::: ty]
1229+ -> Condition schema from grp params
1230+anyLte = unsafeSubqueryExpression "ANY <="
1231+
1232+rowAnyLte
1233+ :: SListI row
1234+ => NP (Aliased (Expression schema from grp params)) row
1235+ -> Query schema params row
1236+ -> Condition schema from grp params
1237+rowAnyLte = unsafeRowSubqueryExpression "ANY <="
1238+
1239+allGt
1240+ :: Expression schema from grp params ty
1241+ -> Query schema params '[alias ::: ty]
1242+ -> Condition schema from grp params
1243+allGt = unsafeSubqueryExpression "ALL >"
1244+
1245+rowAllGt
1246+ :: SListI row
1247+ => NP (Aliased (Expression schema from grp params)) row
1248+ -> Query schema params row
1249+ -> Condition schema from grp params
1250+rowAllGt = unsafeRowSubqueryExpression "ALL >"
1251+
1252+anyGt
1253+ :: Expression schema from grp params ty
1254+ -> Query schema params '[alias ::: ty]
1255+ -> Condition schema from grp params
1256+anyGt = unsafeSubqueryExpression "ANY >"
1257+
1258+rowAnyGt
1259+ :: SListI row
1260+ => NP (Aliased (Expression schema from grp params)) row
1261+ -> Query schema params row
1262+ -> Condition schema from grp params
1263+rowAnyGt = unsafeRowSubqueryExpression "ANY >"
1264+
1265+allGte
1266+ :: Expression schema from grp params ty
1267+ -> Query schema params '[alias ::: ty]
1268+ -> Condition schema from grp params
1269+allGte = unsafeSubqueryExpression "ALL >="
1270+
1271+rowAllGte
1272+ :: SListI row
1273+ => NP (Aliased (Expression schema from grp params)) row
1274+ -> Query schema params row
1275+ -> Condition schema from grp params
1276+rowAllGte = unsafeRowSubqueryExpression "ALL >="
1277+
1278+anyGte
1279+ :: Expression schema from grp params ty
1280+ -> Query schema params '[alias ::: ty]
1281+ -> Condition schema from grp params
1282+anyGte = unsafeSubqueryExpression "ANY >="
1283+
1284+rowAnyGte
1285+ :: SListI row
1286+ => NP (Aliased (Expression schema from grp params)) row
1287+ -> Query schema params row
1288+ -> Condition schema from grp params
1289+rowAnyGte = unsafeRowSubqueryExpression "ANY >="