@@ -5,49 +5,20 @@ import (
55
66 "github.com/apache/arrow/go/v13/arrow"
77 "github.com/cloudquery/plugin-sdk/v4/schema"
8+ "golang.org/x/exp/slices"
89)
910
10- type writeBaseMessage struct {
11- }
11+ type writeBaseMessage struct {}
1212
13- func (* writeBaseMessage ) IsWriteMessage () bool {
14- return true
15- }
13+ func (* writeBaseMessage ) IsWriteMessage () bool { return true }
1614
1715type WriteMessage interface {
1816 GetTable () * schema.Table
1917 IsWriteMessage () bool
2018}
2119
22- type WriteMigrateTable struct {
23- writeBaseMessage
24- Table * schema.Table
25- MigrateForce bool
26- }
27-
28- func (m WriteMigrateTable ) GetTable () * schema.Table {
29- return m .Table
30- }
31-
32- type WriteInsert struct {
33- writeBaseMessage
34- Record arrow.Record
35- }
36-
37- func (m * WriteInsert ) GetTable () * schema.Table {
38- table , err := schema .NewTableFromArrowSchema (m .Record .Schema ())
39- if err != nil {
40- panic (err )
41- }
42- return table
43- }
44-
4520type WriteMessages []WriteMessage
4621
47- type WriteMigrateTables []* WriteMigrateTable
48-
49- type WriteInserts []* WriteInsert
50-
5122func (messages WriteMessages ) InsertItems () int64 {
5223 items := int64 (0 )
5324 for _ , msg := range messages {
@@ -59,57 +30,69 @@ func (messages WriteMessages) InsertItems() int64 {
5930}
6031
6132func (messages WriteMessages ) GetInserts () WriteInserts {
62- inserts := [] * WriteInsert {}
33+ inserts := make ( WriteInserts , 0 , len ( messages ))
6334 for _ , msg := range messages {
6435 if m , ok := msg .(* WriteInsert ); ok {
6536 inserts = append (inserts , m )
6637 }
6738 }
68- return inserts
39+ return slices . Clip ( inserts )
6940}
7041
42+ type WriteMigrateTable struct {
43+ writeBaseMessage
44+ Table * schema.Table
45+ MigrateForce bool
46+ }
47+
48+ func (m WriteMigrateTable ) GetTable () * schema.Table { return m .Table }
49+
50+ type WriteMigrateTables []* WriteMigrateTable
51+
7152func (m WriteMigrateTables ) Exists (tableName string ) bool {
72- for _ , table := range m {
73- if table .Table .Name == tableName {
74- return true
75- }
53+ return slices .ContainsFunc (m , func (msg * WriteMigrateTable ) bool {
54+ return msg .Table .Name == tableName
55+ })
56+ }
57+
58+ type WriteInsert struct {
59+ writeBaseMessage
60+ Record arrow.Record
61+ }
62+
63+ func (m * WriteInsert ) GetTable () * schema.Table {
64+ table , err := schema .NewTableFromArrowSchema (m .Record .Schema ())
65+ if err != nil {
66+ panic (err )
7667 }
77- return false
68+ return table
7869}
7970
71+ type WriteInserts []* WriteInsert
72+
8073func (m WriteInserts ) Exists (tableName string ) bool {
81- for _ , insert := range m {
82- md := insert .Record .Schema ().Metadata ()
83- tableNameMeta , ok := md .GetValue (schema .MetadataTableName )
84- if ! ok {
85- continue
86- }
87- if tableNameMeta == tableName {
88- return true
89- }
90- }
91- return false
74+ return slices .ContainsFunc (m , func (msg * WriteInsert ) bool {
75+ tableNameMeta , ok := msg .Record .Schema ().Metadata ().GetValue (schema .MetadataTableName )
76+ return ok && tableNameMeta == tableName
77+ })
9278}
9379
9480func (m WriteInserts ) GetRecordsForTable (table * schema.Table ) []arrow.Record {
95- res := []arrow.Record {}
81+ res := make ( []arrow.Record , 0 , len ( m ))
9682 for _ , insert := range m {
97- md := insert .Record .Schema ().Metadata ()
98- tableNameMeta , ok := md .GetValue (schema .MetadataTableName )
99- if ! ok {
83+ tableNameMeta , ok := insert .Record .Schema ().Metadata ().GetValue (schema .MetadataTableName )
84+ if ! ok || tableNameMeta != table .Name {
10085 continue
10186 }
102- if tableNameMeta == table .Name {
103- res = append (res , insert .Record )
104- }
87+ res = append (res , insert .Record )
10588 }
106- return res
89+ return slices . Clip ( res )
10790}
10891
109- // DeleteStale is a pretty specific message which requires the destination to be aware of a CLI use-case
92+ // WriteDeleteStale is a pretty specific message which requires the destination to be aware of a CLI use-case
11093// thus it might be deprecated in the future
11194// in favour of MessageDelete or MessageRawQuery
112- // The message indeciates that the destination needs to run something like "DELETE FROM table WHERE _cq_source_name=$1 and sync_time < $2"
95+ // The message indicates that the destination needs to run something like "DELETE FROM table WHERE _cq_source_name=$1 and sync_time < $2"
11396type WriteDeleteStale struct {
11497 writeBaseMessage
11598 Table * schema.Table
@@ -120,3 +103,11 @@ type WriteDeleteStale struct {
120103func (m WriteDeleteStale ) GetTable () * schema.Table {
121104 return m .Table
122105}
106+
107+ type WriteDeleteStales []* WriteDeleteStale
108+
109+ func (m WriteDeleteStales ) Exists (tableName string ) bool {
110+ return slices .ContainsFunc (m , func (msg * WriteDeleteStale ) bool {
111+ return msg .Table .Name == tableName
112+ })
113+ }
0 commit comments