on dev help sign in
fix outer joins
commit128e2f144e1b2cdff5c2d1a3fc611ea8dae3fb99 authorEitan Chatav <eitan.chatav@gmail.com> dateThu 15 Jun 2017, 14:03 (9 years ago) parentb25dcb5
1 file changed+37−38
squeel-postgresql/src/Squeel/PostgreSQL/Statement.hs+37−38
squeel-postgresql/src/Squeel/PostgreSQL/Statement.hs+37−38
@@ -181,6 +181,22 @@ data JoinExpression params schema tables where
181181 -> Expression params (table ': tables) ('NotNull 'PGBool)
182182 -> JoinExpression params schema tables
183183 -> JoinExpression params schema (table ': tables)
184+ LeftOuter
185+ :: Aliased (TableExpression params schema) right
186+ -> Expression params '[left,right] ('NotNull 'PGBool)
187+ -> JoinExpression params schema (tables)
188+ -> JoinExpression params schema (NullifyTable right ': left ': tables)
189+ RightOuter
190+ :: Aliased (TableExpression params schema) right
191+ -> Expression params '[left,right] ('NotNull 'PGBool)
192+ -> JoinExpression params schema (left : tables)
193+ -> JoinExpression params schema (right ': NullifyTable left ': tables)
194+ FullOuter
195+ :: Aliased (TableExpression params schema) right
196+ -> Expression params '[left,right] ('NotNull 'PGBool)
197+ -> JoinExpression params schema (left : tables)
198+ -> JoinExpression params schema
199+ (NullifyTable right ': NullifyTable left ': tables)
184200
185201renderJoinExpression :: JoinExpression params schema tables -> ByteString
186202renderJoinExpression = \case
@@ -198,6 +214,27 @@ renderJoinExpression = \case
198214 , " ON "
199215 , renderExpression on
200216 ]
217+ LeftOuter table on tables -> mconcat
218+ [ renderJoinExpression tables
219+ , " LEFT OUTER JOIN "
220+ , renderAliased renderTableExpression table
221+ , " ON "
222+ , renderExpression on
223+ ]
224+ RightOuter table on tables -> mconcat
225+ [ renderJoinExpression tables
226+ , " RIGHT OUTER JOIN "
227+ , renderAliased renderTableExpression table
228+ , " ON "
229+ , renderExpression on
230+ ]
231+ FullOuter table on tables -> mconcat
232+ [ renderJoinExpression tables
233+ , " FULL OUTER JOIN "
234+ , renderAliased renderTableExpression table
235+ , " ON "
236+ , renderExpression on
237+ ]
201238
202239class KnownSymbol table => HasTable table tables columns
203240 | table tables -> columns where
@@ -217,44 +254,6 @@ instance HasTable table schema columns
217254 => IsLabel table (JoinExpression params schema '[table ::: columns]) where
218255 fromLabel p = Table $ fromLabel p
219256
220−
221−-- leftOuter
222−-- :: JoinExpression params schema '[right]
223−-- -> Expression params (right ': left : tables) ('NotNull 'PGBool)
224−-- -> JoinExpression params schema (tables)
225−-- -> JoinExpression params schema (NullifyTable right ': left ': tables)
226−-- leftOuter tab on tabs = UnsafeJoinExpression $
227−-- renderJoinExpression tabs
228−-- <> " LEFT OUTER JOIN " <>
229−-- renderJoinExpression tab
230−-- <> " ON " <>
231−-- renderExpression on
232−--
233−-- rightOuter
234−-- :: JoinExpression params schema '[right]
235−-- -> Expression params (right ': tables) ('NotNull 'PGBool)
236−-- -> JoinExpression params schema (left : tables)
237−-- -> JoinExpression params schema (right ': NullifyTable left ': tables)
238−-- rightOuter tab on tabs = UnsafeJoinExpression $
239−-- renderJoinExpression tabs
240−-- <> " RIGHT OUTER JOIN " <>
241−-- renderJoinExpression tab
242−-- <> " ON " <>
243−-- renderExpression on
244−--
245−-- fullOuter
246−-- :: JoinExpression params schema '[right]
247−-- -> Expression params (right ': left ': tables) ('NotNull 'PGBool)
248−-- -> JoinExpression params schema (left : tables)
249−-- -> JoinExpression params schema
250−-- (NullifyTable right ': NullifyTable left ': tables)
251−-- fullOuter tab on tabs = UnsafeJoinExpression $
252−-- renderJoinExpression tabs
253−-- <> " FULL OUTER JOIN " <>
254−-- renderJoinExpression tab
255−-- <> " ON " <>
256−-- renderExpression on
257−
258257data Clauses params tables = Clauses
259258 { whereClause :: Maybe (Expression params tables ('NotNull 'PGBool))
260259 , limitClause :: Maybe (Expression params '[] ('NotNull 'PGInt8))