@@ -168,5 +168,45 @@ public void JoinOnShouldSetAJoin()
168168 Assert . AreEqual ( quux . foo_id , join . JoinExpression . RightOperand ) ;
169169 Assert . AreEqual ( SimpleExpressionType . Equal , join . JoinExpression . Type ) ;
170170 }
171+
172+ [ Test ]
173+ [ ExpectedException ( typeof ( InvalidOperationException ) ) ]
174+ public void ForUpdateWithoutSelectShouldThrow ( )
175+ {
176+ new SimpleQuery ( null , "foo" ) . ForUpdate ( false ) ;
177+ }
178+
179+ [ Test ]
180+ public void ForUpdateShouldAddAClause ( )
181+ {
182+ var query = new SimpleQuery ( null , "foo" ) . Select ( new AllColumnsSpecialReference ( ) ) . ForUpdate ( true ) ;
183+ Assert . AreEqual ( 1 , query . Clauses . OfType < ForUpdateClause > ( ) . Count ( ) ) ;
184+ var forUpdate = query . Clauses . OfType < ForUpdateClause > ( ) . Single ( ) ;
185+ Assert . IsTrue ( forUpdate . SkipLockedRows ) ;
186+ }
187+
188+ [ Test ]
189+ public void SubsequentCallsToForUpdateShouldReplaceClause ( )
190+ {
191+ var query = new SimpleQuery ( null , "foo" ) . Select ( new AllColumnsSpecialReference ( ) ) . ForUpdate ( false ) ;
192+ Assert . AreEqual ( 1 , query . Clauses . OfType < ForUpdateClause > ( ) . Count ( ) ) ;
193+ var forUpdate = query . Clauses . OfType < ForUpdateClause > ( ) . Single ( ) ;
194+ Assert . IsFalse ( forUpdate . SkipLockedRows ) ;
195+ query = query . ForUpdate ( true ) ;
196+ Assert . AreEqual ( 1 , query . Clauses . OfType < ForUpdateClause > ( ) . Count ( ) ) ;
197+ forUpdate = query . Clauses . OfType < ForUpdateClause > ( ) . Single ( ) ;
198+ Assert . IsTrue ( forUpdate . SkipLockedRows ) ;
199+ }
200+
201+ [ Test ]
202+ public void ClearForUpdateRemovesClause ( )
203+ {
204+ var query = new SimpleQuery ( null , "foo" ) . Select ( new AllColumnsSpecialReference ( ) ) . ForUpdate ( false ) ;
205+ Assert . AreEqual ( 1 , query . Clauses . OfType < ForUpdateClause > ( ) . Count ( ) ) ;
206+ var forUpdate = query . Clauses . OfType < ForUpdateClause > ( ) . Single ( ) ;
207+ Assert . IsFalse ( forUpdate . SkipLockedRows ) ;
208+ query = query . ClearForUpdate ( ) ;
209+ Assert . AreEqual ( 0 , query . Clauses . OfType < ForUpdateClause > ( ) . Count ( ) ) ;
210+ }
171211 }
172212}
0 commit comments