@@ -12,15 +12,9 @@ import (
12
12
"github.com/streamingfast/substreams-sink-sql/db_changes/db"
13
13
"github.com/streamingfast/substreams-sink-sql/db_proto"
14
14
"github.com/streamingfast/substreams-sink-sql/db_proto/proto"
15
- protosql "github.com/streamingfast/substreams-sink-sql/db_proto/sql"
16
- clickhouse "github.com/streamingfast/substreams-sink-sql/db_proto/sql/click_house"
17
- "github.com/streamingfast/substreams-sink-sql/db_proto/sql/postgres"
18
- schema2 "github.com/streamingfast/substreams-sink-sql/db_proto/sql/schema"
19
- stats2 "github.com/streamingfast/substreams-sink-sql/db_proto/stats"
20
15
pbsql "github.com/streamingfast/substreams-sink-sql/pb/sf/substreams/sink/sql/services/v1"
21
16
"github.com/streamingfast/substreams-sink-sql/services"
22
17
"github.com/streamingfast/substreams/manifest"
23
- "go.uber.org/zap"
24
18
"google.golang.org/protobuf/types/descriptorpb"
25
19
)
26
20
@@ -174,13 +168,6 @@ func fromProtoE(cmd *cobra.Command, args []string) error {
174
168
return fmt .Errorf ("message descriptor not found for output type %q. Your substreams need to bundle its protobuf definitions" , outputType )
175
169
}
176
170
177
- schemaName := dsn .Schema ()
178
-
179
- schema , err := schema2 .NewSchema (schemaName , rootMessageDescriptor , useProtoOption , zlog )
180
- if err != nil {
181
- return fmt .Errorf ("creating schema: %w" , err )
182
- }
183
-
184
171
baseSink , err := sink .NewFromViper (
185
172
cmd ,
186
173
outputType ,
@@ -195,123 +182,28 @@ func fromProtoE(cmd *cobra.Command, args []string) error {
195
182
return fmt .Errorf ("new base sinker: %w" , err )
196
183
}
197
184
198
- var database protosql.Database
199
-
200
- switch dsn .Driver () {
201
- case "postgres" :
202
- database , err = postgres .NewDatabase (schema , dsn , outputModuleName , rootMessageDescriptor , useProtoOption , useConstraints , zlog )
203
- if err != nil {
204
- return fmt .Errorf ("creating postgres database: %w" , err )
205
- }
206
-
207
- case "clickhouse" :
208
- database , err = clickhouse .NewDatabase (
209
- cmd .Context (),
210
- schema ,
211
- dsn ,
212
- outputModuleName ,
213
- rootMessageDescriptor ,
214
- sflags .MustGetString (cmd , "clickhouse-sink-info-folder" ),
215
- sflags .MustGetString (cmd , "clickhouse-cursor-file-path" ),
216
- true ,
217
- zlog ,
218
- tracer ,
219
- )
220
- if err != nil {
221
- return fmt .Errorf ("creating clickhouse database: %w" , err )
222
- }
223
- default :
224
- panic (fmt .Sprintf ("unsupported driver: %s" , dsn .Driver ()))
225
-
226
- }
227
-
228
- sinkInfo , err := database .FetchSinkInfo (schema .Name )
229
- if err != nil {
230
- return fmt .Errorf ("fetching sink info: %w" , err )
231
- }
232
-
233
- zlog .Info ("sink info read" , zap .Reflect ("sink_info" , sinkInfo ))
234
- if sinkInfo == nil {
235
- err := database .BeginTransaction ()
236
- if err != nil {
237
- return fmt .Errorf ("begin transaction: %w" , err )
238
- }
239
- err = database .CreateDatabase (useConstraints )
240
- if err != nil {
241
- database .RollbackTransaction ()
242
- return fmt .Errorf ("creating database: %w" , err )
243
- }
244
-
245
- err = database .StoreSinkInfo (schemaName , database .GetDialect ().SchemaHash ())
246
- if err != nil {
247
- database .RollbackTransaction ()
248
- return fmt .Errorf ("storing sink info: %w" , err )
249
- }
250
-
251
- err = database .CommitTransaction ()
252
-
253
- } else {
254
- migrationNeeded := sinkInfo .SchemaHash != database .GetDialect ().SchemaHash ()
255
- if migrationNeeded {
256
-
257
- tempSchemaName := schema .Name + "_" + database .GetDialect ().SchemaHash ()
258
- tempSinkInfo , err := database .FetchSinkInfo (tempSchemaName )
259
- if err != nil {
260
- return fmt .Errorf ("fetching temp schema sink info: %w" , err )
261
- }
262
- if tempSinkInfo != nil {
263
- hash , err := database .DatabaseHash (schema .Name )
264
- if err != nil {
265
- return fmt .Errorf ("fetching schema %q hash: %w" , schema .Name , err )
266
- }
267
- dbTempHash , err := database .DatabaseHash (tempSchemaName )
268
- if err != nil {
269
- return fmt .Errorf ("fetching temp schema %q hash: %w" , tempSchemaName , err )
270
- }
271
-
272
- if hash != dbTempHash {
273
- return fmt .Errorf ("schema %s and temp schema %s have different hash" , schema .Name , tempSchemaName )
274
- }
275
- err = database .BeginTransaction ()
276
- if err != nil {
277
- return fmt .Errorf ("begin transaction: %w" , err )
278
- }
279
- err = database .UpdateSinkInfoHash (schemaName , tempSinkInfo .SchemaHash )
280
- if err != nil {
281
- database .RollbackTransaction ()
282
- return fmt .Errorf ("updating sink info hash: %w" , err )
283
- }
284
-
285
- err = database .CommitTransaction ()
286
- if err != nil {
287
- return fmt .Errorf ("commit transaction: %w" , err )
288
- }
185
+ factory := db_proto .SinkerFactory (baseSink , outputModuleName , rootMessageDescriptor .UnwrapMessage (), db_proto.SinkerFactoryOptions {
186
+ UseProtoOption : useProtoOption ,
187
+ UseConstraints : useConstraints ,
188
+ UseTransactions : useTransactions ,
189
+ BlockBatchSize : blockBatchSize ,
190
+ Parallel : parallel ,
191
+ Clickhouse : db_proto.SinkerFactoryClickhouse {
192
+ SinkInfoFolder : sflags .MustGetString (cmd , "clickhouse-sink-info-folder" ),
193
+ CursorFilePath : sflags .MustGetString (cmd , "clickhouse-cursor-file-path" ),
194
+ },
195
+ })
289
196
290
- } else {
291
- //todo: create the temp schema ... and exit
292
-
293
- //err = schema.ChangeName(tempSchemaName, dialect)
294
- //if err != nil {
295
- // return nil, fmt.Errorf("changing schema name: %w", err)
296
- //}
297
- //generateTempSchema = true
298
- }
299
- }
300
- }
301
-
302
- err = database .Open ()
197
+ sinker , err := factory (cmd .Context (), dsnString , dsn .Schema (), zlog , tracer )
303
198
if err != nil {
304
- return fmt .Errorf ("opening database : %w" , err )
199
+ return fmt .Errorf ("creating sinker : %w" , err )
305
200
}
306
201
307
- stats := stats2 .NewStats (zlog )
308
- sinker := db_proto .NewSinker (rootMessageDescriptor , baseSink , database , useTransactions , useConstraints , blockBatchSize , parallel , stats , zlog )
309
-
310
202
err = sinker .Run (cmd .Context ())
311
203
if err != nil {
312
204
return fmt .Errorf ("running sinker: %w" , err )
313
205
}
314
206
315
- stats . Log ()
207
+ sinker . LogStats ()
316
208
return nil
317
209
}
0 commit comments