Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions plugins/source/oracledb/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (
"fmt"

"github.com/cloudquery/plugin-pb-go/specs"
"github.com/cloudquery/plugin-sdk/v2/plugins/source"
"github.com/cloudquery/plugin-sdk/v2/schema"
"github.com/cloudquery/plugin-sdk/v3/plugins/source"
"github.com/cloudquery/plugin-sdk/v3/schema"
"github.com/rs/zerolog"

// Import the oracle driver
Expand Down
12 changes: 6 additions & 6 deletions plugins/source/oracledb/client/list_tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"sort"
"strings"

"github.com/cloudquery/plugin-sdk/v2/schema"
"github.com/cloudquery/plugin-sdk/v3/schema"
)

type column struct {
Expand Down Expand Up @@ -45,9 +45,9 @@ func (c *Client) updateTableConstraints(ctx context.Context, table *schema.Table
for _, constraintType := range constraintTypes {
switch constraintType {
case "P":
table.Columns[i].CreationOptions.PrimaryKey = true
table.Columns[i].PrimaryKey = true
case "U":
table.Columns[i].CreationOptions.Unique = true
table.Columns[i].Unique = true
}
}
}
Expand Down Expand Up @@ -114,9 +114,9 @@ func (c *Client) listTables(ctx context.Context) (schema.Tables, error) {
})
for _, column := range columns {
table.Columns = append(table.Columns, schema.Column{
Name: column.name,
Type: SchemaType(tableName, column.name, column.dataType),
CreationOptions: schema.ColumnCreationOptions{NotNull: column.notNull},
Name: column.name,
Type: SchemaType(column.dataType),
NotNull: column.notNull,
})
}
err := c.updateTableConstraints(ctx, &table)
Expand Down
24 changes: 12 additions & 12 deletions plugins/source/oracledb/client/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ import (
"strings"
"time"

"github.com/cloudquery/plugin-sdk/v2/plugins/source"
"github.com/cloudquery/plugin-sdk/v2/schema"
"github.com/apache/arrow/go/v13/arrow"
"github.com/cloudquery/plugin-sdk/v3/plugins/source"
"github.com/cloudquery/plugin-sdk/v3/schema"
"github.com/cloudquery/plugin-sdk/v3/types"
"golang.org/x/sync/errgroup"
)

Expand All @@ -26,25 +28,23 @@ func (c *Client) Sync(ctx context.Context, metrics *source.Metrics, res chan<- *
func (*Client) createResultsArray(table *schema.Table) []any {
results := make([]any, 0, len(table.Columns))
for _, col := range table.Columns {
switch col.Type {
case schema.TypeUUID, schema.TypeByteArray:
// We only support types that we create based on the schema, see SchemaType function
switch col.Type.(type) {
case *types.UUIDType, *arrow.BinaryType:
var r *[]byte
results = append(results, &r)
case schema.TypeBool:
case *arrow.BooleanType:
var r *bool
results = append(results, &r)
case schema.TypeInt:
var r *int
case *arrow.Decimal128Type:
var r *string
results = append(results, &r)
case schema.TypeFloat:
case *arrow.Float64Type:
var r *float64
results = append(results, &r)
case schema.TypeTimestamp:
case *arrow.TimestampType:
var r *time.Time
results = append(results, &r)
case schema.TypeJSON:
var r string
results = append(results, &r)
default:
var r *string
results = append(results, &r)
Expand Down
207 changes: 76 additions & 131 deletions plugins/source/oracledb/client/transformer.go
Original file line number Diff line number Diff line change
@@ -1,137 +1,82 @@
package client

import (
"github.com/cloudquery/plugin-sdk/v2/schema"
"github.com/apache/arrow/go/v13/arrow"
"github.com/apache/arrow/go/v13/arrow/array"
"github.com/cloudquery/plugin-sdk/v3/types"
)

// this is used for tests
type Transformer struct{}

func (*Transformer) TransformBool(v *schema.Bool) any {
if v.Status != schema.Present {
return nil
}
return v.Bool
}

func (*Transformer) TransformBytea(v *schema.Bytea) any {
if v.Status != schema.Present {
return nil
}
return v.Bytes
}

func (*Transformer) TransformFloat8(v *schema.Float8) any {
if v.Status != schema.Present {
return nil
}
return v.Float
}

func (*Transformer) TransformInt8(v *schema.Int8) any {
if v.Status != schema.Present {
return nil
}
return v.Int
}

func (*Transformer) TransformTimestamptz(v *schema.Timestamptz) any {
if v.Status != schema.Present {
return nil
}
return v.Time
}

func (*Transformer) TransformJSON(v *schema.JSON) any {
if v.Status != schema.Present {
return nil
}

return string(v.Bytes)
}

func (*Transformer) TransformUUID(v *schema.UUID) any {
if v.Status != schema.Present {
return nil
}
// We need a slice instead of a fixed sized array
bytes := make([]byte, 16)
copy(bytes, v.Bytes[:])
return bytes
}

func (*Transformer) TransformUUIDArray(v *schema.UUIDArray) any {
if v.Status != schema.Present {
return nil
}

return v.String()
}

func (*Transformer) TransformInt8Array(v *schema.Int8Array) any {
if v.Status != schema.Present {
return nil
}

return v.String()
}

func (*Transformer) TransformCIDR(v *schema.CIDR) any {
if v.Status != schema.Present {
return nil
}
return v.String()
}

func (*Transformer) TransformInet(v *schema.Inet) any {
if v.Status != schema.Present {
return nil
}
return v.String()
}

func (*Transformer) TransformMacaddr(v *schema.Macaddr) any {
if v.Status != schema.Present {
return nil
}
return v.String()
}

func (*Transformer) TransformText(v *schema.Text) any {
if v.Status != schema.Present {
return nil
}
return v.Str
}

func (*Transformer) TransformCIDRArray(v *schema.CIDRArray) any {
if v.Status != schema.Present {
return nil
}

return v.String()
}

func (*Transformer) TransformInetArray(v *schema.InetArray) any {
if v.Status != schema.Present {
return nil
}

return v.String()
}

func (*Transformer) TransformMacaddrArray(v *schema.MacaddrArray) any {
if v.Status != schema.Present {
return nil
}

return v.String()
}

func (*Transformer) TransformTextArray(v *schema.TextArray) any {
if v.Status != schema.Present {
return nil
}

return v.String()
func GetValue(arr arrow.Array, i int) (any, error) {
if arr.IsNull(i) {
return nil, nil
}
switch a := arr.(type) {
case *array.Boolean:
return a.Value(i), nil
case *array.Int8:
return a.Value(i), nil
case *array.Int16:
return a.Value(i), nil
case *array.Int32:
return a.Value(i), nil
case *array.Int64:
return a.Value(i), nil
case *array.Uint8:
return a.Value(i), nil
case *array.Uint16:
return a.Value(i), nil
case *array.Uint32:
return a.Value(i), nil
case *array.Uint64:
return a.Value(i), nil
case *array.Float16:
return a.Value(i), nil
case *array.Float32:
return a.Value(i), nil
case *array.Float64:
return a.Value(i), nil
case *array.String:
return a.Value(i), nil
case *array.LargeString:
return a.Value(i), nil
case *array.Binary:
return a.Value(i), nil
case *array.LargeBinary:
return a.Value(i), nil
case *array.FixedSizeBinary:
return a.Value(i), nil
case *array.Timestamp:
toTime, err := a.DataType().(*arrow.TimestampType).GetToTimeFunc()
if err != nil {
return nil, err
}
return toTime(a.Value(i)), nil
case *types.UUIDArray:
bUUID, err := a.Value(i).MarshalBinary()
if err != nil {
return nil, err
}
return bUUID, nil
default:
return a.ValueStr(i), nil
}
}

// used in the tests to insert the arrow.Record
func TransformRecord(record arrow.Record) ([][]any, error) {
numRows := record.NumRows()
res := make([][]any, numRows)
var err error
for i := int64(0); i < numRows; i++ {
numCols := record.NumCols()
row := make([]any, numCols)
for j := 0; int64(j) < numCols; j++ {
row[j], err = GetValue(record.Column(j), int(i))
if err != nil {
return nil, err
}
}
res[i] = row
}
return res, nil
}
Loading