@@ -60,81 +60,92 @@ func checksum(x []byte) (hash uint64) {
60
60
return h .Sum64 ()
61
61
}
62
62
63
- func (this * defaultHandle ) Execute (ctx context.Context , script Script ) (err error ) {
63
+ func (this * defaultHandle ) Execute (ctx context.Context , scripts ... Script ) (err error ) {
64
64
defer func () { err = normalizeErr (err ) }()
65
- statements := script .Statements ()
66
- parameters := script .Parameters ()
67
- placeholderCount := strings .Count (statements , "?" )
68
- if placeholderCount != len (parameters ) {
69
- return fmt .Errorf ("%w: Expected: %d, received %d" , ErrParameterCountMismatch , placeholderCount , len (parameters ))
65
+ for _ , script := range scripts {
66
+ statements := script .Statements ()
67
+ parameters := script .Parameters ()
68
+ placeholderCount := strings .Count (statements , "?" )
69
+ if placeholderCount != len (parameters ) {
70
+ return fmt .Errorf ("%w: Expected: %d, received %d" , ErrParameterCountMismatch , placeholderCount , len (parameters ))
71
+ }
72
+ for statement , params := range interleaveParameters (statements , parameters ... ) {
73
+ prepared , err := this .prepare (ctx , statement )
74
+ if err != nil {
75
+ return err
76
+ }
77
+ var result sql.Result
78
+ if prepared != nil {
79
+ result , err = prepared .ExecContext (ctx , params ... )
80
+ } else {
81
+ result , err = this .pool .ExecContext (ctx , statement , params ... )
82
+ }
83
+ if err != nil {
84
+ return err
85
+ }
86
+ if rows , ok := script .(RowsAffected ); ok {
87
+ if affected , err := result .RowsAffected (); err == nil {
88
+ rows .RowsAffected (uint64 (affected ))
89
+ }
90
+ }
91
+ }
70
92
}
71
- for statement , params := range interleaveParameters (statements , parameters ... ) {
93
+ return nil
94
+ }
95
+ func (this * defaultHandle ) Populate (ctx context.Context , queries ... Query ) (err error ) {
96
+ defer func () { err = normalizeErr (err ) }()
97
+ for _ , query := range queries {
98
+ statement := query .Statement ()
72
99
prepared , err := this .prepare (ctx , statement )
73
100
if err != nil {
74
101
return err
75
102
}
76
- var result sql.Result
103
+ parameters := query .Parameters ()
104
+ var rows * sql.Rows
77
105
if prepared != nil {
78
- result , err = prepared .ExecContext (ctx , params ... )
106
+ rows , err = prepared .QueryContext (ctx , parameters ... )
79
107
} else {
80
- result , err = this .pool .ExecContext (ctx , statement , params ... )
108
+ rows , err = this .pool .QueryContext (ctx , statement , parameters ... )
81
109
}
82
110
if err != nil {
83
111
return err
84
112
}
85
- if rows , ok := script .(RowsAffected ); ok {
86
- if affected , err := result .RowsAffected (); err == nil {
87
- rows .RowsAffected (uint64 (affected ))
113
+ for rows .Next () {
114
+ err = query .Scan (rows )
115
+ if err != nil {
116
+ _ = rows .Close ()
117
+ return err
88
118
}
89
119
}
120
+ _ = rows .Close ()
90
121
}
91
122
return nil
92
123
}
93
- func (this * defaultHandle ) Populate (ctx context.Context , query Query ) (err error ) {
124
+ func (this * defaultHandle ) PopulateRow (ctx context.Context , queries ... Query ) (err error ) {
94
125
defer func () { err = normalizeErr (err ) }()
95
- statement := query .Statement ()
96
- prepared , err := this .prepare (ctx , statement )
97
- if err != nil {
98
- return err
99
- }
100
- parameters := query .Parameters ()
101
- var rows * sql.Rows
102
- if prepared != nil {
103
- rows , err = prepared .QueryContext (ctx , parameters ... )
104
- } else {
105
- rows , err = this .pool .QueryContext (ctx , statement , parameters ... )
106
- }
107
- if err != nil {
108
- return err
109
- }
110
- defer func () { _ = rows .Close () }()
111
- for rows .Next () {
112
- err = query .Scan (rows )
126
+ for _ , query := range queries {
127
+ statement := query .Statement ()
128
+ prepared , err := this .prepare (ctx , statement )
113
129
if err != nil {
114
130
return err
115
131
}
116
- }
117
- return rows .Err ()
118
- }
119
- func (this * defaultHandle ) PopulateRow (ctx context.Context , query Query ) (err error ) {
120
- defer func () { err = normalizeErr (err ) }()
121
- statement := query .Statement ()
122
- prepared , err := this .prepare (ctx , statement )
123
- if err != nil {
132
+ parameters := query .Parameters ()
133
+ var row * sql.Row
134
+ if prepared != nil {
135
+ row = prepared .QueryRowContext (ctx , parameters ... )
136
+ } else {
137
+ row = this .pool .QueryRowContext (ctx , statement , parameters ... )
138
+ }
139
+ err = query .Scan (row )
140
+ if err == nil {
141
+ continue
142
+ }
143
+ if errors .Is (err , sql .ErrNoRows ) {
144
+ continue
145
+ }
124
146
return err
125
147
}
126
- parameters := query .Parameters ()
127
- var row * sql.Row
128
- if prepared != nil {
129
- row = prepared .QueryRowContext (ctx , parameters ... )
130
- } else {
131
- row = this .pool .QueryRowContext (ctx , statement , parameters ... )
132
- }
133
- err = query .Scan (row )
134
- if errors .Is (err , sql .ErrNoRows ) {
135
- return nil
136
- }
137
- return err
148
+ return nil
138
149
}
139
150
140
151
// interleaveParameters splits the statements (on ';') and yields each with its corresponding parameters.
0 commit comments