@@ -784,6 +784,7 @@ func TestAddWithOneUpdate(t *testing.T) {
784784 t .Run (test .description , func (t * testing.T ) {
785785 c , txC := SetupMockDB (t )
786786 stmts := NewMockStmt (gomock .NewController (t ))
787+ preparedStmt := NewMockStmt (gomock .NewController (t ))
787788 store := SetupStoreWithExternalDependencies (t , c , test .updateExternal , test .updateSelf )
788789
789790 c .EXPECT ().Serialize (testObject , false ).Return (testObjectSerialized , nil )
@@ -799,39 +800,45 @@ func TestAddWithOneUpdate(t *testing.T) {
799800 LEFT OUTER JOIN "_v1_Namespace_labels" lt1 ON f.key = lt1.key
800801 JOIN "management.cattle.io_v3_Project_fields" ex2 ON lt1.value = ex2."metadata.name"
801802 WHERE lt1.label = ? AND f."spec.displayName" != ex2."spec.displayName"`
802- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt ))
803+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt )). Return ( preparedStmt )
803804 args1 := []any {"field.cattle.io/projectId" }
804- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args1 )
805+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args1 )
806+ preparedStmt .EXPECT ().Close ()
805807 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"lego.cattle.io/fields1" , "moose1" }}, nil )
806808 // Override check:
807809 rawStmt2 := `SELECT f."spec.displayName" FROM "_v1_Namespace_fields" f WHERE f.key = ?`
808- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 ))
809- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), gomock .Any ())
810+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 )).Return (preparedStmt )
811+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , gomock .Any ())
812+ preparedStmt .EXPECT ().Close ()
810813 c .EXPECT ().ReadStrings (gomock .Any ())
811814
812815 rawStmt2a := `UPDATE "_v1_Namespace_fields" SET "spec.displayName" = ? WHERE key = ?`
813- c .EXPECT ().Prepare (rawStmt2a )
814- txC .EXPECT ().Stmt (gomock .Any ()).Return (stmts )
816+ c .EXPECT ().Prepare (rawStmt2a ).Return (preparedStmt )
817+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
818+ preparedStmt .EXPECT ().Close ()
815819 stmts .EXPECT ().Exec ("moose1" , "lego.cattle.io/fields1" )
816820
817821 rawStmt3 := `SELECT DISTINCT f.key, ex2."spec.projectName" FROM "_v1_Pods_fields" f
818822 JOIN "provisioner.cattle.io_v3_Cluster_fields" ex2 ON f."field.cattle.io/fixer" = ex2."metadata.name"
819823 WHERE f."spec.projectName" != ex2."spec.projectName"`
820- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 ))
824+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 )). Return ( preparedStmt )
821825 args2 := []any {}
822- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args2 )
826+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args2 )
827+ preparedStmt .EXPECT ().Close ()
823828
824829 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"lego.cattle.io/fields2" , "moose2" }}, nil )
825830 // Override check:
826831 rawStmt2 = `SELECT f."spec.projectName" FROM "_v1_Pods_fields" f WHERE f.key = ?`
827- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 ))
828- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), gomock .Any ())
832+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 )).Return (preparedStmt )
833+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , gomock .Any ())
834+ preparedStmt .EXPECT ().Close ()
829835 c .EXPECT ().ReadStrings (gomock .Any ())
830836
831837 rawStmt4 := `UPDATE "_v1_Pods_fields" SET "spec.projectName" = ? WHERE key = ?`
832- c .EXPECT ().Prepare (rawStmt4 )
833- txC .EXPECT ().Stmt (gomock . Any () ).Return (stmts )
838+ c .EXPECT ().Prepare (rawStmt4 ). Return ( preparedStmt )
839+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
834840 stmts .EXPECT ().Exec ("moose2" , "lego.cattle.io/fields2" )
841+ preparedStmt .EXPECT ().Close ()
835842
836843 err := store .Add (testObject )
837844 assert .Nil (t , err )
@@ -850,6 +857,7 @@ func TestAddWithExternalUpdates(t *testing.T) {
850857 tests = append (tests , testCase {description : "Add with no DB client errors" , test : func (t * testing.T ) {
851858 c , txC := SetupMockDB (t )
852859 stmts := NewMockStmt (gomock .NewController (t ))
860+ preparedStmt := NewMockStmt (gomock .NewController (t ))
853861 store := SetupStoreWithExternalDependencies (t , c , true , false )
854862
855863 c .EXPECT ().Serialize (testObject , false ).Return (testObjectSerialized , nil )
@@ -865,41 +873,50 @@ func TestAddWithExternalUpdates(t *testing.T) {
865873 LEFT OUTER JOIN "_v1_Namespace_labels" lt1 ON f.key = lt1.key
866874 JOIN "management.cattle.io_v3_Project_fields" ex2 ON lt1.value = ex2."metadata.name"
867875 WHERE lt1.label = ? AND f."spec.displayName" != ex2."spec.displayName"`
868- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt ))
876+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt )). Return ( preparedStmt )
869877 args1 := []any {"field.cattle.io/projectId" }
870- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args1 )
878+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args1 )
879+ preparedStmt .EXPECT ().Close ()
871880 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"lego.cattle.io/fields1" , "moose1" }}, nil )
872881
882+ // Override check:
873883 rawStmt1b := `SELECT f."spec.displayName" FROM "_v1_Namespace_fields" f WHERE f.key = ?`
874- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt1b ))
884+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt1b )). Return ( preparedStmt )
875885 args1b := []any {"lego.cattle.io/fields1" }
876- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args1b )
886+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args1b )
887+ preparedStmt .EXPECT ().Close ()
877888 c .EXPECT ().ReadStrings (gomock .Any ()).Return ([]string {"flipper" }, nil )
878889
879890 rawStmt2 := `UPDATE "_v1_Namespace_fields" SET "spec.displayName" = ? WHERE key = ?`
880- c .EXPECT ().Prepare (rawStmt2 )
881- txC .EXPECT ().Stmt (gomock .Any ()).Return (stmts )
891+ c .EXPECT ().Prepare (rawStmt2 ).Return (preparedStmt )
892+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
893+ preparedStmt .EXPECT ().Close ()
882894 stmts .EXPECT ().Exec ("moose1" , "lego.cattle.io/fields1" )
883895
884896 rawStmt3 := `SELECT DISTINCT f.key, ex2."spec.projectName"
885897 FROM "_v1_Pods_fields" f JOIN "provisioner.cattle.io_v3_Cluster_fields" ex2
886898 ON f."field.cattle.io/fixer" = ex2."metadata.name"
887899 WHERE f."spec.projectName" != ex2."spec.projectName"`
888- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 ))
900+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 )). Return ( preparedStmt )
889901 args2 := []any {}
890- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args2 )
902+ c .EXPECT ().QueryForRows (gomock .Any (),
903+ preparedStmt , args2 )
904+ preparedStmt .EXPECT ().Close ()
891905 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"lego.cattle.io/fields2" , "moose2" }}, nil )
892906
907+ // Override check:
893908 rawStmt3b := `SELECT f."spec.projectName" FROM "_v1_Pods_fields" f WHERE f.key = ?`
894- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3b ))
909+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3b )). Return ( preparedStmt )
895910 args3b := []any {"lego.cattle.io/fields2" }
896- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args3b )
911+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args3b )
912+ preparedStmt .EXPECT ().Close ()
897913 c .EXPECT ().ReadStrings (gomock .Any ()).Return ([]string {"snorkel" }, nil )
898914
899915 rawStmt4 := `UPDATE "_v1_Pods_fields" SET "spec.projectName" = ? WHERE key = ?`
900- c .EXPECT ().Prepare (rawStmt4 )
901- txC .EXPECT ().Stmt (gomock . Any () ).Return (stmts )
916+ c .EXPECT ().Prepare (rawStmt4 ). Return ( preparedStmt )
917+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
902918 stmts .EXPECT ().Exec ("moose2" , "lego.cattle.io/fields2" )
919+ preparedStmt .EXPECT ().Close ()
903920
904921 err := store .Add (testObject )
905922 assert .Nil (t , err )
@@ -925,6 +942,7 @@ func TestAddWithSelfUpdates(t *testing.T) {
925942 tests = append (tests , testCase {description : "Add with no DB client errors" , test : func (t * testing.T ) {
926943 c , txC := SetupMockDB (t )
927944 stmts := NewMockStmt (gomock .NewController (t ))
945+ preparedStmt := NewMockStmt (gomock .NewController (t ))
928946 store := SetupStoreWithExternalDependencies (t , c , false , true )
929947
930948 c .EXPECT ().Serialize (testObject , false ).Return (testObjectSerialized , nil )
@@ -940,41 +958,49 @@ func TestAddWithSelfUpdates(t *testing.T) {
940958 LEFT OUTER JOIN "_v1_Namespace_labels" lt1 ON f.key = lt1.key
941959 JOIN "management.cattle.io_v3_Project_fields" ex2 ON lt1.value = ex2."metadata.name"
942960 WHERE lt1.label = ? AND f."spec.displayName" != ex2."spec.displayName"`
943- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt ))
961+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt )). Return ( preparedStmt )
944962 args1 := []any {"field.cattle.io/projectId" }
945- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args1 )
963+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args1 )
964+ preparedStmt .EXPECT ().Close ()
946965 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"lego.cattle.io/fields1" , "moose1" }}, nil )
947966
967+ // Override check:
948968 rawStmt1b := `SELECT f."spec.displayName" FROM "_v1_Namespace_fields" f WHERE f.key = ?`
949- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt1b ))
969+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt1b )). Return ( preparedStmt )
950970 args1b := []any {"lego.cattle.io/fields1" }
951- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args1b )
971+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args1b )
972+ preparedStmt .EXPECT ().Close ()
952973 c .EXPECT ().ReadStrings (gomock .Any ()).Return ([]string {"flipper" }, nil )
953974
954975 rawStmt2 := `UPDATE "_v1_Namespace_fields" SET "spec.displayName" = ? WHERE key = ?`
955- c .EXPECT ().Prepare (rawStmt2 )
956- txC .EXPECT ().Stmt (gomock .Any ()).Return (stmts )
976+ c .EXPECT ().Prepare (rawStmt2 ).Return (preparedStmt )
977+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
978+ preparedStmt .EXPECT ().Close ()
957979 stmts .EXPECT ().Exec ("moose1" , "lego.cattle.io/fields1" )
958980
959981 rawStmt3 := `SELECT DISTINCT f.key, ex2."spec.projectName"
960982 FROM "_v1_Pods_fields" f JOIN "provisioner.cattle.io_v3_Cluster_fields" ex2
961983 ON f."field.cattle.io/fixer" = ex2."metadata.name"
962984 WHERE f."spec.projectName" != ex2."spec.projectName"`
963- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 ))
985+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 )). Return ( preparedStmt )
964986 args2 := []any {}
965- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args2 )
987+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args2 )
988+ preparedStmt .EXPECT ().Close ()
966989 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"field.cattle.io/fixer" , "moose1" }}, nil )
967990
991+ // Override check:
968992 rawStmt3b := `SELECT f."spec.projectName" FROM "_v1_Pods_fields" f WHERE f.key = ?`
969- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3b ))
993+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3b )). Return ( preparedStmt )
970994 args3b := []any {"field.cattle.io/fixer" }
971- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args3b )
995+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args3b )
996+ preparedStmt .EXPECT ().Close ()
972997 c .EXPECT ().ReadStrings (gomock .Any ()).Return ([]string {"snorkel" }, nil )
973998
974999 rawStmt4 := `UPDATE "_v1_Pods_fields" SET "spec.projectName" = ? WHERE key = ?`
975- c .EXPECT ().Prepare (rawStmt4 )
976- txC .EXPECT ().Stmt (gomock . Any () ).Return (stmts )
1000+ c .EXPECT ().Prepare (rawStmt4 ). Return ( preparedStmt )
1001+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
9771002 stmts .EXPECT ().Exec ("moose1" , "field.cattle.io/fixer" )
1003+ preparedStmt .EXPECT ().Close ()
9781004
9791005 err := store .Add (testObject )
9801006 assert .Nil (t , err )
@@ -1000,6 +1026,7 @@ func TestAddWithBothUpdates(t *testing.T) {
10001026 tests = append (tests , testCase {description : "Update both external and self" , test : func (t * testing.T ) {
10011027 c , txC := SetupMockDB (t )
10021028 stmts := NewMockStmt (gomock .NewController (t ))
1029+ preparedStmt := NewMockStmt (gomock .NewController (t ))
10031030 store := SetupStoreWithExternalDependencies (t , c , true , true )
10041031
10051032 rawStmt := `SELECT DISTINCT f.key, ex2."spec.displayName" FROM "_v1_Namespace_fields" f
@@ -1027,38 +1054,44 @@ func TestAddWithBothUpdates(t *testing.T) {
10271054 t .Fail ()
10281055 }
10291056 })
1030- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt ))
1057+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt )). Return ( preparedStmt )
10311058 args1 := []any {"field.cattle.io/projectId" }
1032- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args1 )
1059+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args1 )
1060+ preparedStmt .EXPECT ().Close ()
10331061 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"lego.cattle.io/fields1" , "moose1" }}, nil )
10341062 // Override check:
10351063 rawStmt2 := `SELECT f."spec.displayName" FROM "_v1_Namespace_fields" f WHERE f.key = ?`
1036- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 ))
1064+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 )). Return ( preparedStmt )
10371065 args1b := []any {"lego.cattle.io/fields1" }
1038- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args1b )
1066+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args1b )
1067+ preparedStmt .EXPECT ().Close ()
10391068 c .EXPECT ().ReadStrings (gomock .Any ())
10401069
10411070 rawStmt2a := `UPDATE "_v1_Namespace_fields" SET "spec.displayName" = ? WHERE key = ?`
1042- c .EXPECT ().Prepare (rawStmt2a )
1043- txC .EXPECT ().Stmt (gomock .Any ()).Return (stmts )
1071+ c .EXPECT ().Prepare (rawStmt2a ).Return (preparedStmt )
1072+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
1073+ preparedStmt .EXPECT ().Close ()
10441074 stmts .EXPECT ().Exec ("moose1" , "lego.cattle.io/fields1" )
10451075
1046- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 ))
1076+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt3 )). Return ( preparedStmt )
10471077 args2 := []any {}
1048- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args2 )
1078+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args2 )
1079+ preparedStmt .EXPECT ().Close ()
10491080
10501081 c .EXPECT ().ReadStrings2 (gomock .Any ()).Return ([][]string {{"field.cattle.io/fixer" , "moose1" }}, nil )
10511082 // Override check:
10521083 rawStmt2 = `SELECT f."spec.projectName" FROM "_v1_Pods_fields" f WHERE f.key = ?`
1053- c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 ))
1084+ c .EXPECT ().Prepare (WSIgnoringMatcher (rawStmt2 )). Return ( preparedStmt )
10541085 args3b := []any {"field.cattle.io/fixer" }
1055- c .EXPECT ().QueryForRows (gomock .Any (), gomock .Any (), args3b )
1086+ c .EXPECT ().QueryForRows (gomock .Any (), preparedStmt , args3b )
1087+ preparedStmt .EXPECT ().Close ()
10561088 c .EXPECT ().ReadStrings (gomock .Any ())
10571089
10581090 rawStmt4 := `UPDATE "_v1_Pods_fields" SET "spec.projectName" = ? WHERE key = ?`
1059- c .EXPECT ().Prepare (rawStmt4 )
1060- txC .EXPECT ().Stmt (gomock . Any () ).Return (stmts )
1091+ c .EXPECT ().Prepare (rawStmt4 ). Return ( preparedStmt )
1092+ txC .EXPECT ().Stmt (preparedStmt ).Return (stmts )
10611093 stmts .EXPECT ().Exec ("moose1" , "field.cattle.io/fixer" )
1094+ preparedStmt .EXPECT ().Close ()
10621095 // And again for the other object
10631096 }
10641097
0 commit comments