diff --git a/tests/lock_test.go b/tests/lock_test.go new file mode 100644 index 0000000..bd8f959 --- /dev/null +++ b/tests/lock_test.go @@ -0,0 +1,73 @@ +package tests + +import ( + "context" + "gotest.tools/assert" + "testing" + "time" + + . "github.com/go-jet/jet" + . "github.com/go-jet/jet/tests/genTestDir2/jetdb/dvds/table" +) + +func TestLockTable(t *testing.T) { + expectedSQL := ` +LOCK TABLE dvds.address IN` + + var testData = []TableLockMode{ + LOCK_ACCESS_SHARE, + LOCK_ROW_SHARE, + LOCK_ROW_EXCLUSIVE, + LOCK_SHARE_UPDATE_EXCLUSIVE, + LOCK_SHARE, + LOCK_SHARE_ROW_EXCLUSIVE, + LOCK_EXCLUSIVE, + LOCK_ACCESS_EXCLUSIVE, + } + + for _, lockMode := range testData { + query := Address.LOCK().IN(lockMode) + + assertStatementSql(t, query, expectedSQL+" "+string(lockMode)+" MODE;\n") + + tx, _ := db.Begin() + + _, err := query.Exec(tx) + + assert.NilError(t, err) + + err = tx.Rollback() + + assert.NilError(t, err) + } + + for _, lockMode := range testData { + query := Address.LOCK().IN(lockMode).NOWAIT() + + assertStatementSql(t, query, expectedSQL+" "+string(lockMode)+" MODE NOWAIT;\n") + + tx, _ := db.Begin() + + _, err := query.Exec(tx) + + assert.NilError(t, err) + + err = tx.Rollback() + + assert.NilError(t, err) + } +} + +func TestLockExecContext(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Microsecond) + defer cancel() + + time.Sleep(10 * time.Microsecond) + + tx, _ := db.Begin() + defer tx.Rollback() + + _, err := Address.LOCK().IN(LOCK_ACCESS_SHARE).ExecContext(ctx, tx) + + assert.Error(t, err, "context deadline exceeded") +} diff --git a/tests/main_test.go b/tests/main_test.go index 09106a4..e80b585 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -119,6 +119,7 @@ func assertGeneratedFiles(t *testing.T) { // Enums SQL Builder files enumFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/enum") + assert.NilError(t, err) assertFileNameEqual(t, enumFiles, "mpaa_rating.go") assertFileContent(t, "./.gentestdata2/jetdb/dvds/enum/mpaa_rating.go", "\npackage enum", mpaaRatingEnumFile) diff --git a/tests/select_test.go b/tests/select_test.go index bdba6d4..40f7bbb 100644 --- a/tests/select_test.go +++ b/tests/select_test.go @@ -1315,54 +1315,6 @@ LIMIT 20; assert.Equal(t, dest[1].StaffIDNum, "ONE") } -func TestLockTable(t *testing.T) { - expectedSQL := ` -LOCK TABLE dvds.address IN` - - var testData = []TableLockMode{ - LOCK_ACCESS_SHARE, - LOCK_ROW_SHARE, - LOCK_ROW_EXCLUSIVE, - LOCK_SHARE_UPDATE_EXCLUSIVE, - LOCK_SHARE, - LOCK_SHARE_ROW_EXCLUSIVE, - LOCK_EXCLUSIVE, - LOCK_ACCESS_EXCLUSIVE, - } - - for _, lockMode := range testData { - query := Address.LOCK().IN(lockMode) - - assertStatementSql(t, query, expectedSQL+" "+string(lockMode)+" MODE;\n") - - tx, _ := db.Begin() - - _, err := query.Exec(tx) - - assert.NilError(t, err) - - err = tx.Rollback() - - assert.NilError(t, err) - } - - for _, lockMode := range testData { - query := Address.LOCK().IN(lockMode).NOWAIT() - - assertStatementSql(t, query, expectedSQL+" "+string(lockMode)+" MODE NOWAIT;\n") - - tx, _ := db.Begin() - - _, err := query.Exec(tx) - - assert.NilError(t, err) - - err = tx.Rollback() - - assert.NilError(t, err) - } -} - func getRowLockTestData() map[SelectLock]string { return map[SelectLock]string{ UPDATE(): "UPDATE", diff --git a/time_expression.go b/time_expression.go index 6d13eba..779d37f 100644 --- a/time_expression.go +++ b/time_expression.go @@ -59,15 +59,15 @@ type prefixTimeExpression struct { prefixOpExpression } -func newPrefixTimeExpression(operator string, expression Expression) TimeExpression { - timeExpr := prefixTimeExpression{} - timeExpr.prefixOpExpression = newPrefixExpression(expression, operator) - - timeExpr.expressionInterfaceImpl.parent = &timeExpr - timeExpr.timeInterfaceImpl.parent = &timeExpr - - return &timeExpr -} +//func newPrefixTimeExpression(operator string, expression Expression) TimeExpression { +// timeExpr := prefixTimeExpression{} +// timeExpr.prefixOpExpression = newPrefixExpression(expression, operator) +// +// timeExpr.expressionInterfaceImpl.parent = &timeExpr +// timeExpr.timeInterfaceImpl.parent = &timeExpr +// +// return &timeExpr +//} //---------------------------------------------------// diff --git a/timez_expression.go b/timez_expression.go index cfd1f1d..d860703 100644 --- a/timez_expression.go +++ b/timez_expression.go @@ -67,15 +67,15 @@ type prefixTimezExpression struct { prefixOpExpression } -func newPrefixTimezExpression(operator string, expression Expression) TimezExpression { - timeExpr := prefixTimezExpression{} - timeExpr.prefixOpExpression = newPrefixExpression(expression, operator) - - timeExpr.expressionInterfaceImpl.parent = &timeExpr - timeExpr.timezInterfaceImpl.parent = &timeExpr - - return &timeExpr -} +//func newPrefixTimezExpression(operator string, expression Expression) TimezExpression { +// timeExpr := prefixTimezExpression{} +// timeExpr.prefixOpExpression = newPrefixExpression(expression, operator) +// +// timeExpr.expressionInterfaceImpl.parent = &timeExpr +// timeExpr.timezInterfaceImpl.parent = &timeExpr +// +// return &timeExpr +//} //---------------------------------------------------//