@@ -92,14 +92,9 @@ public struct Statement: ~Copyable {
9292// MARK: - Fetch with RowDecodable
9393
9494extension Statement {
95- /// Fetches all rows returned by the statement
96- public consuming func fetchAll< Element: RowDecodable > ( ) throws ( OtterError) -> [ Element ] {
97- return try fetchAll ( of: Element . self)
98- }
99-
10095 /// Fetches all rows returned by the statement
10196 public consuming func fetchAll< Element: RowDecodable > (
102- of _: Element . Type
97+ of _: Element . Type = Element . self
10398 ) throws ( OtterError) -> [ Element ] {
10499 var cursor = Cursor < Element > ( of: self )
105100 var result : [ Element ] = [ ]
@@ -110,44 +105,34 @@ extension Statement {
110105
111106 return result
112107 }
113-
114- /// Optionally fetches a single row returned by the statement
115- public consuming func fetchOne< Element: RowDecodable > ( ) throws ( OtterError) -> Element ? {
116- return try fetchOne ( of: Element . self)
108+
109+ /// Fetches a single row returned by the statement
110+ public consuming func fetchOne< Element: RowDecodable > (
111+ of _: Element . Type = Element . self
112+ ) throws ( OtterError) -> Element ? {
113+ var cursor = Cursor < Element > ( of: self )
114+ return try cursor. next ( )
117115 }
118116
119117 /// Fetches a single row returned by the statement
120118 @_disfavoredOverload
121- public consuming func fetchOne< Element: RowDecodable > ( ) throws ( OtterError) -> Element {
122- guard let row = try fetchOne ( of: Element . self) else {
119+ public consuming func fetchOne< Element: RowDecodable > (
120+ of value: Element . Type = Element . self
121+ ) throws ( OtterError) -> Element {
122+ guard let row = try fetchOne ( of: value) else {
123123 throw OtterError . queryReturnedNoValue
124124 }
125125
126126 return row
127127 }
128-
129- /// Fetches a single row returned by the statement
130- public consuming func fetchOne< Element: RowDecodable > (
131- of _: Element . Type
132- ) throws ( OtterError) -> Element ? {
133- var cursor = Cursor < Element > ( of: self )
134- return try cursor. next ( )
135- }
136128}
137129
138130// MARK: - Fetch with RowDecodableWithAdapters
139131
140132extension Statement {
141133 /// Fetches all rows returned by the statement
142134 public consuming func fetchAll< Element: RowDecodableWithAdapters > (
143- adapters: Element . Adapters
144- ) throws ( OtterError) -> [ Element ] {
145- return try fetchAll ( of: Element . self, adapters: adapters)
146- }
147-
148- /// Fetches all rows returned by the statement
149- public consuming func fetchAll< Element: RowDecodableWithAdapters > (
150- of _: Element . Type ,
135+ of _: Element . Type = Element . self,
151136 adapters: Element . Adapters
152137 ) throws ( OtterError) -> [ Element ] {
153138 var cursor = Cursor < Element > ( of: self )
@@ -159,50 +144,36 @@ extension Statement {
159144
160145 return result
161146 }
162-
163- /// Optionally fetches a single row returned by the statement
147+
148+ /// Fetches a single row returned by the statement
164149 public consuming func fetchOne< Element: RowDecodableWithAdapters > (
150+ of _: Element . Type = Element . self,
165151 adapters: Element . Adapters
166152 ) throws ( OtterError) -> Element ? {
167- return try fetchOne ( of: Element . self, adapters: adapters)
153+ var cursor = Cursor < Element > ( of: self )
154+ return try cursor. next ( adapters: adapters)
168155 }
169156
170157 /// Fetches a single row returned by the statement
171158 @_disfavoredOverload
172159 public consuming func fetchOne< Element: RowDecodableWithAdapters > (
160+ of value: Element . Type = Element . self,
173161 adapters: Element . Adapters
174162 ) throws ( OtterError) -> Element {
175- guard let row = try fetchOne ( of: Element . self , adapters: adapters) else {
163+ guard let row = try fetchOne ( of: value , adapters: adapters) else {
176164 throw OtterError . queryReturnedNoValue
177165 }
178166
179167 return row
180168 }
181-
182- /// Fetches a single row returned by the statement
183- public consuming func fetchOne< Element: RowDecodableWithAdapters > (
184- of _: Element . Type ,
185- adapters: Element . Adapters
186- ) throws ( OtterError) -> Element ? {
187- var cursor = Cursor < Element > ( of: self )
188- return try cursor. next ( adapters: adapters)
189- }
190169}
191170
192171// MARK: - Fetch with specific adapter
193172
194173extension Statement {
195174 /// Fetches all rows returned by the statement
196175 public consuming func fetchAll< Adapter: DatabaseValueAdapter , Storage: DatabasePrimitive > (
197- adapter: Adapter ,
198- storage: Storage . Type
199- ) throws ( OtterError) -> [ Adapter . Value ] {
200- return try fetchAll ( of: Adapter . Value. self, adapter: adapter, storage: storage)
201- }
202-
203- /// Fetches all rows returned by the statement
204- public consuming func fetchAll< Adapter: DatabaseValueAdapter , Storage: DatabasePrimitive > (
205- of _: Adapter . Value . Type ,
176+ of _: Adapter . Value . Type = Adapter . Value. self,
206177 adapter: Adapter ,
207178 storage: Storage . Type
208179 ) throws ( OtterError) -> [ Adapter . Value ] {
@@ -215,26 +186,28 @@ extension Statement {
215186
216187 return result
217188 }
218-
189+
219190 /// Fetches a single row returned by the statement
220- @_disfavoredOverload
221191 public consuming func fetchOne< Adapter: DatabaseValueAdapter , Storage: DatabasePrimitive > (
192+ of _: Adapter . Value . Type = Adapter . Value. self,
222193 adapter: Adapter ,
223194 storage: Storage . Type
224- ) throws ( OtterError) -> Adapter . Value {
225- guard let row = try fetchOne ( adapter: adapter, storage: storage) else {
226- throw OtterError . queryReturnedNoValue
227- }
228-
229- return row
195+ ) throws ( OtterError) -> Adapter . Value ? {
196+ var cursor = Cursor < Adapter . Value > ( of: self )
197+ return try cursor. next ( adapter: adapter, storage: storage)
230198 }
231199
232200 /// Fetches a single row returned by the statement
201+ @_disfavoredOverload
233202 public consuming func fetchOne< Adapter: DatabaseValueAdapter , Storage: DatabasePrimitive > (
203+ of value: Adapter . Value . Type = Adapter . Value. self,
234204 adapter: Adapter ,
235205 storage: Storage . Type
236- ) throws ( OtterError) -> Adapter . Value ? {
237- var cursor = Cursor < Adapter . Value > ( of: self )
238- return try cursor. next ( adapter: adapter, storage: storage)
206+ ) throws ( OtterError) -> Adapter . Value {
207+ guard let row = try fetchOne ( of: value, adapter: adapter, storage: storage) else {
208+ throw OtterError . queryReturnedNoValue
209+ }
210+
211+ return row
239212 }
240213}
0 commit comments