diff --git a/source-oracle/.snapshots/TestAllTypesPDB-backfill b/source-oracle/.snapshots/TestAllTypesPDB-backfill new file mode 100644 index 0000000000..e4d4464533 --- /dev/null +++ b/source-oracle/.snapshots/TestAllTypesPDB-backfill @@ -0,0 +1,9 @@ +# ================================ +# Collection "acmeCo/test/c__flow_test_logminer_t18110541": 1 Documents +# ================================ +{"DATEONLY":"2022-01-01T00:00:00","DATETIME":"1998-01-01T13:00:00","DOUBLE_PRECISION":"123456789.123457","FLOAT_126":"123456789.123457","INTEG":"18446744073709551615","INTERVAL_DAY":"+01 02:03:04.567000","INTERVAL_YEAR":"+1234-05","NUM":"123456789.123457","NUM15":123456789123456,"NUM19":"1234567891234567891","NVCHAR2":"nvarchar2 value with unicode characters ❤️ \\ 🔥️')","R":"dGVzdGluZyByYXcgdmFsdWU=","REAL_NUM":"123456789.123457","SINGLE_NCHAR":"a","SMALL_INT":"123456789","TS":"2022-01-01T13:00:00.000000","TS_LOCAL_TZ":"2022-01-01T11:00:00.000000","TS_LOCAL_TZ_NINE":"2022-01-01T11:00:00.000000000","TS_NINE":"2022-01-01T13:00:00.123456789","TS_TZ":"2022-01-01T12:00:00.000000Z","TS_TZ_NINE":"2022-01-01T12:00:00.123456789Z","VCAHR2":"varchar2 value","VCHAR":"varchar value","_meta":{"op":"c","source":{"schema":"C##FLOW_TEST_LOGMINER","snapshot":true,"table":"T18110541","row_id":"AAAAAAAAAAAAAAAAAA"}}} +# ================================ +# Final State Checkpoint +# ================================ +{"bindingStateV1":{"C%23%23FLOW_TEST_LOGMINER%2FT18110541":{"backfilled":1,"mode":"Active"}},"cursor":"11111111"} + diff --git a/source-oracle/.snapshots/TestAllTypesPDB-discover b/source-oracle/.snapshots/TestAllTypesPDB-discover new file mode 100644 index 0000000000..9200ab7968 --- /dev/null +++ b/source-oracle/.snapshots/TestAllTypesPDB-discover @@ -0,0 +1,289 @@ +Binding 0: +{ + "recommended_name": "c__flow_test_logminer_t18110541", + "resource_config_json": { + "mode": "Without Primary Key", + "namespace": "C##FLOW_TEST_LOGMINER", + "stream": "T18110541" + }, + "document_schema_json": { + "$defs": { + "C##FLOW_TEST_LOGMINERT18110541": { + "type": "object", + "$anchor": "C##FLOW_TEST_LOGMINERT18110541", + "properties": { + "DATEONLY": { + "description": "(source type: DATE)", + "type": [ + "string", + "null" + ] + }, + "DATETIME": { + "description": "(source type: DATE)", + "type": [ + "string", + "null" + ] + }, + "DOUBLE_PRECISION": { + "format": "number", + "description": "(source type: FLOAT)", + "type": [ + "string", + "null" + ] + }, + "FLOAT_126": { + "format": "number", + "description": "(source type: FLOAT)", + "type": [ + "string", + "null" + ] + }, + "INTEG": { + "format": "integer", + "description": "(source type: NUMBER)", + "type": [ + "string", + "null" + ] + }, + "INTERVAL_DAY": { + "description": "(source type: INTERVAL DAY(2) TO SECOND(6))", + "type": [ + "string", + "null" + ] + }, + "INTERVAL_YEAR": { + "description": "(source type: INTERVAL YEAR(4) TO MONTH)", + "type": [ + "string", + "null" + ] + }, + "NUM": { + "format": "number", + "description": "(source type: NUMBER)", + "type": [ + "string", + "null" + ] + }, + "NUM15": { + "description": "(source type: NUMBER)", + "type": [ + "integer", + "null" + ] + }, + "NUM19": { + "format": "integer", + "description": "(source type: NUMBER)", + "type": [ + "string", + "null" + ] + }, + "NVCHAR2": { + "description": "(source type: NVARCHAR2)", + "type": [ + "string", + "null" + ] + }, + "R": { + "description": "(source type: RAW)", + "type": [ + "string", + "null" + ] + }, + "REAL_NUM": { + "format": "number", + "description": "(source type: FLOAT)", + "type": [ + "string", + "null" + ] + }, + "SINGLE_NCHAR": { + "description": "(source type: NCHAR)", + "type": [ + "string", + "null" + ] + }, + "SMALL_INT": { + "format": "integer", + "description": "(source type: NUMBER)", + "type": [ + "string", + "null" + ] + }, + "TS": { + "description": "(source type: TIMESTAMP(6))", + "type": [ + "string", + "null" + ] + }, + "TS_LOCAL_TZ": { + "description": "(source type: TIMESTAMP(6) WITH LOCAL TIME ZONE)", + "type": [ + "string", + "null" + ] + }, + "TS_LOCAL_TZ_NINE": { + "description": "(source type: TIMESTAMP(9) WITH LOCAL TIME ZONE)", + "type": [ + "string", + "null" + ] + }, + "TS_NINE": { + "description": "(source type: TIMESTAMP(9))", + "type": [ + "string", + "null" + ] + }, + "TS_TZ": { + "format": "date-time", + "description": "(source type: TIMESTAMP(6) WITH TIME ZONE)", + "type": [ + "string", + "null" + ] + }, + "TS_TZ_NINE": { + "format": "date-time", + "description": "(source type: TIMESTAMP(9) WITH TIME ZONE)", + "type": [ + "string", + "null" + ] + }, + "VCAHR2": { + "description": "(source type: VARCHAR2)", + "type": [ + "string", + "null" + ] + }, + "VCHAR": { + "description": "(source type: VARCHAR2)", + "type": [ + "string", + "null" + ] + } + } + } + }, + "allOf": [ + { + "if": { + "properties": { + "_meta": { + "properties": { + "op": { + "const": "d" + } + } + } + } + }, + "then": { + "reduce": { + "delete": true, + "strategy": "merge" + } + }, + "else": { + "reduce": { + "strategy": "merge" + } + }, + "required": [ + "_meta" + ], + "properties": { + "_meta": { + "type": "object", + "required": [ + "op", + "source" + ], + "properties": { + "before": { + "$ref": "#C##FLOW_TEST_LOGMINERT18110541", + "description": "Record state immediately before this change was applied.", + "reduce": { + "strategy": "firstWriteWins" + } + }, + "op": { + "enum": [ + "c", + "d", + "u" + ], + "description": "Change operation type: 'c' Create/Insert, 'u' Update, 'd' Delete." + }, + "source": { + "$id": "https://github.com/estuary/connectors/source-oracle/oracle-source", + "properties": { + "ts_ms": { + "type": "integer", + "description": "Unix timestamp (in millis) at which this event was recorded by the database." + }, + "schema": { + "type": "string", + "description": "Database schema (namespace) of the event." + }, + "snapshot": { + "type": "boolean", + "description": "Snapshot is true if the record was produced from an initial table backfill and unset if produced from the replication log." + }, + "table": { + "type": "string", + "description": "Database table of the event." + }, + "scn": { + "type": "integer", + "description": "SCN of this event" + }, + "row_id": { + "type": "string", + "description": "ROWID of the document" + } + }, + "type": "object", + "required": [ + "schema", + "table", + "row_id" + ] + } + }, + "reduce": { + "strategy": "merge" + } + } + } + }, + { + "$ref": "#C##FLOW_TEST_LOGMINERT18110541" + } + ] + }, + "key": [ + "/_meta/source/row_id" + ] + } + diff --git a/source-oracle/.snapshots/TestAllTypesPDB-replication b/source-oracle/.snapshots/TestAllTypesPDB-replication new file mode 100644 index 0000000000..df77c867fe --- /dev/null +++ b/source-oracle/.snapshots/TestAllTypesPDB-replication @@ -0,0 +1,9 @@ +# ================================ +# Collection "acmeCo/test/c__flow_test_logminer_t18110541": 1 Documents +# ================================ +{"DATEONLY":"2022-01-01T00:00:00","DATETIME":"1998-01-01T13:00:00","DOUBLE_PRECISION":"123456789.123457","FLOAT_126":"123456789.123457","INTEG":"18446744073709551615","INTERVAL_DAY":"+01 02:03:04.567000","INTERVAL_YEAR":"+1234-05","NUM":"123456789.123457","NUM15":123456789123456,"NUM19":"1234567891234567891","NVCHAR2":"nvarchar2 value with unicode characters ❤️ \\ 🔥️')","R":"dGVzdGluZyByYXcgdmFsdWU=","REAL_NUM":"123456789.123457","SINGLE_NCHAR":"a","SMALL_INT":"123456789","TS":"2022-01-01T13:00:00","TS_LOCAL_TZ":"2022-01-01T11:00:00","TS_LOCAL_TZ_NINE":"2022-01-01T11:00:00","TS_NINE":"2022-01-01T13:00:00.123456789","TS_TZ":"2022-01-01T12:00:00Z","TS_TZ_NINE":"2022-01-01T12:00:00.123456789Z","VCAHR2":"varchar2 value","VCHAR":"varchar value","_meta":{"op":"c","source":{"ts_ms":1111111111111,"schema":"C##FLOW_TEST_LOGMINER","table":"T18110541","scn":11111111,"row_id":"AAAAAAAAAAAAAAAAAA"}}} +# ================================ +# Final State Checkpoint +# ================================ +{"bindingStateV1":{"C%23%23FLOW_TEST_LOGMINER%2FT18110541":{"backfilled":1,"mode":"Active"}},"cursor":"11111111"} + diff --git a/source-oracle/capture_test.go b/source-oracle/capture_test.go index 81b65b4234..71ef4c5292 100644 --- a/source-oracle/capture_test.go +++ b/source-oracle/capture_test.go @@ -12,9 +12,9 @@ import ( "github.com/sirupsen/logrus" ) -func TestViewDiscovery(t *testing.T) { +func testViewDiscovery(t *testing.T, configFile string) { var unique = "18110541" - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var tableName = tb.CreateTable(ctx, t, unique, "(id INTEGER PRIMARY KEY, grp INTEGER, data VARCHAR(2000))") var view = fmt.Sprintf(`"t%s"`, unique+"_simpleview") @@ -37,9 +37,17 @@ func TestViewDiscovery(t *testing.T) { } } -func TestAllTypes(t *testing.T) { +func TestViewDiscovery(t *testing.T) { + testViewDiscovery(t, "config.rds.yaml") +} + +func TestViewDiscoveryPDB(t *testing.T) { + testViewDiscovery(t, "config.pdb.yaml") +} + +func testAllTypes(t *testing.T, configFile string) { var unique = "18110541" - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var typesAndValues = [][]any{ {"nvchar2", "NVARCHAR2(2000)", "nvarchar2 value with unicode characters ❤️ \\ 🔥️'')"}, {"vcahr2", "VARCHAR2(2000)", "varchar2 value"}, @@ -94,9 +102,17 @@ func TestAllTypes(t *testing.T) { t.Run("replication", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestNullValues(t *testing.T) { +func TestAllTypes(t *testing.T) { + testAllTypes(t, "config.rds.yaml") +} + +func TestAllTypesPDB(t *testing.T) { + testAllTypes(t, "config.PDB.yaml") +} + +func testNullValues(t *testing.T, configFile string) { var unique = "18110541" - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var typesAndValues = [][]any{ {"nvchar2", "NVARCHAR2(2000)", NewRawTupleValue("NULL")}, {"vcahr2", "VARCHAR2(2000)", NewRawTupleValue("NULL")}, @@ -151,9 +167,16 @@ func TestNullValues(t *testing.T) { t.Run("replication", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestUnsupportedTypes(t *testing.T) { +func TestNullValues(t *testing.T) { + testNullValues(t, "config.rds.yaml") +} +func TestNullValuesPDB(t *testing.T) { + testNullValues(t, "config.pdb.yaml") +} + +func testUnsupportedTypes(t *testing.T, configFile string) { var unique = "18110541" - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var typesAndValues = [][]any{ {"nvchar2", "NVARCHAR2(2000)", "nvarchar2 value with unicode characters ❤️ \\ 🔥️'')"}, {"anycol", "ANYDATA", NewRawTupleValue("NULL")}, @@ -187,9 +210,17 @@ func TestUnsupportedTypes(t *testing.T) { t.Run("replication", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestStringKey(t *testing.T) { +func TestUnsupportedTypes(t *testing.T) { + testUnsupportedTypes(t, "config.rds.yaml") +} + +func TestUnsupportedTypesPDB(t *testing.T) { + testUnsupportedTypes(t, "config.pdb.yaml") +} + +func testStringKey(t *testing.T, configFile string) { var unique = "18110541" - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() // Integer keys are output as string, format: integer by default var tableName = tb.CreateTable(ctx, t, unique, "(id integer)") @@ -208,9 +239,17 @@ func TestStringKey(t *testing.T) { t.Run("replication", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestLongStrings(t *testing.T) { +func TestStringKey(t *testing.T) { + testStringKey(t, "config.rds.yaml") +} + +func TestStringKeyPDB(t *testing.T) { + testStringKey(t, "config.pdb.yaml") +} + +func testLongStrings(t *testing.T, configFile string) { var unique = "18110541" - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var fire, ice, normalString string for i := 0; i < 250; i++ { fire += "🔥️" @@ -234,11 +273,19 @@ func TestLongStrings(t *testing.T) { t.Run("replication", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestSkipBackfills(t *testing.T) { +func TestLongStrings(t *testing.T) { + testLongStrings(t, "config.rds.yaml") +} + +func TestLongStringsPDB(t *testing.T) { + testLongStrings(t, "config.pdb.yaml") +} + +func testSkipBackfills(t *testing.T, configFile string) { // Set up three tables with some data in them, a catalog which captures all three, // but a configuration which specifies that tables A and C should skip backfilling // and only capture new changes. - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var uniqueA, uniqueB, uniqueC = "18110541", "24310805", "38410024" var tableA = tb.CreateTable(ctx, t, uniqueA, "(id INTEGER PRIMARY KEY, data VARCHAR(2000))") var tableB = tb.CreateTable(ctx, t, uniqueB, "(id INTEGER PRIMARY KEY, data VARCHAR(2000))") @@ -260,9 +307,17 @@ func TestSkipBackfills(t *testing.T) { t.Run("main", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestTruncatedTables(t *testing.T) { +func TestSkipBackfills(t *testing.T) { + testSkipBackfills(t, "config.rds.yaml") +} + +func TestSkipBackfillsPDB(t *testing.T) { + testSkipBackfills(t, "config.pdb.yaml") +} + +func testTruncatedTables(t *testing.T, configFile string) { // Set up two tables with some data in them - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var uniqueA, uniqueB = "14026504", "29415894" var tableA = tb.CreateTable(ctx, t, uniqueA, "(id INTEGER PRIMARY KEY, data VARCHAR(2000))") var tableB = tb.CreateTable(ctx, t, uniqueB, "(id INTEGER PRIMARY KEY, data VARCHAR(2000))") @@ -285,10 +340,18 @@ func TestTruncatedTables(t *testing.T) { t.Run("capture2", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestTrickyColumnNames(t *testing.T) { +func TestTruncatedTables(t *testing.T) { + testTruncatedTables(t, "config.rds.yaml") +} + +func TestTruncatedTablesPDB(t *testing.T) { + testTruncatedTables(t, "config.pdb.yaml") +} + +func testTrickyColumnNames(t *testing.T, configFile string) { // Create a table with some 'difficult' column names (a reserved word, a capitalized // name, and one containing special characters which also happens to be the primary key). - var tb, ctx = oracleTestBackend(t), context.Background() + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var uniqueA, uniqueB = "39256824", "42531495" var tableA = tb.CreateTable(ctx, t, uniqueA, `("`+"`"+`Meta/'wtf'~ID`+"`"+`" INTEGER PRIMARY KEY, data VARCHAR(2000))`) var tableB = tb.CreateTable(ctx, t, uniqueB, `("table" INTEGER PRIMARY KEY, data VARCHAR(2000))`) @@ -310,10 +373,18 @@ func TestTrickyColumnNames(t *testing.T) { t.Run("replication", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } +func TestTrickyColumnNames(t *testing.T) { + testTrickyColumnNames(t, "config.rds.yaml") +} + +func TestTrickyColumnNamesPDB(t *testing.T) { + testTrickyColumnNames(t, "config.pdb.yaml") +} + // TestCursorResume sets up a capture with a (string, int) primary key and // and repeatedly restarts it after each row of capture output. -func TestCursorResume(t *testing.T) { - var tb, ctx = oracleTestBackend(t), context.Background() +func testCursorResume(t *testing.T, configFile string) { + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var uniqueID = "95911555" var tableName = tb.CreateTable(ctx, t, uniqueID, "(epoch VARCHAR(8), count INTEGER, data VARCHAR(2000), PRIMARY KEY (epoch, count))") tb.Insert(ctx, t, tableName, [][]any{ @@ -332,8 +403,16 @@ func TestCursorResume(t *testing.T) { cupaloy.SnapshotT(t, summary) } -func TestCaptureCapitalization(t *testing.T) { - var tb, ctx = oracleTestBackend(t), context.Background() +func TestCursorResume(t *testing.T) { + testCursorResume(t, "config.rds.yaml") +} + +func TestCursorResumePDB(t *testing.T) { + testCursorResume(t, "config.pdb.yaml") +} + +func testCaptureCapitalization(t *testing.T, configFile string) { + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var uniqueA, uniqueB = "69943814", "73423348" var tablePrefix = "test" @@ -358,8 +437,16 @@ func TestCaptureCapitalization(t *testing.T) { tests.VerifiedCapture(ctx, t, tb.CaptureSpec(ctx, t, regexp.MustCompile(uniqueA), regexp.MustCompile(uniqueB))) } -func TestSchemaChanges(t *testing.T) { - var tb, ctx = oracleTestBackend(t), context.Background() +func TestCaptureCapitalization(t *testing.T) { + testCaptureCapitalization(t, "config.rds.yaml") +} + +func TestCaptureCapitalizationPDB(t *testing.T) { + testCaptureCapitalization(t, "config.pdb.yaml") +} + +func testSchemaChanges(t *testing.T, configFile string) { + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var uniqueID = "83287013" var tableName = tb.CreateTable(ctx, t, uniqueID, "(year INTEGER, state VARCHAR(2000), fullname VARCHAR(2000), population INTEGER, PRIMARY KEY (year, state))") tb.Insert(ctx, t, tableName, [][]any{{1900, "AA", "No Such State", 20000}}) @@ -382,8 +469,16 @@ func TestSchemaChanges(t *testing.T) { t.Run("insert-after", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } -func TestSchemaChangesOnlineDictionary(t *testing.T) { - var tb, ctx = oracleTestBackend(t), context.Background() +func TestSchemaChanges(t *testing.T) { + testSchemaChanges(t, "config.rds.yaml") +} + +func TestSchemaChangesPDB(t *testing.T) { + testSchemaChanges(t, "config.pdb.yaml") +} + +func testSchemaChangesOnlineDictionary(t *testing.T, configFile string) { + var tb, ctx = oracleTestBackend(t, configFile), context.Background() var uniqueID = "83287013" var tableName = tb.CreateTable(ctx, t, uniqueID, "(year INTEGER, state VARCHAR(2000), fullname VARCHAR(2000), population INTEGER, PRIMARY KEY (year, state))") tb.Insert(ctx, t, tableName, [][]any{{1900, "AA", "No Such State", 20000}}) @@ -404,3 +499,11 @@ func TestSchemaChangesOnlineDictionary(t *testing.T) { t.Run("main", func(t *testing.T) { tests.VerifiedCapture(ctx, t, cs) }) } + +func TestSchemaChangesOnlineDictionary(t *testing.T) { + testSchemaChangesOnlineDictionary(t, "config.rds.yaml") +} + +func TestSchemaChangesOnlineDictionaryPDB(t *testing.T) { + testSchemaChangesOnlineDictionary(t, "config.pdb.yaml") +} diff --git a/source-oracle/config.cdb.yaml b/source-oracle/config.pdb.yaml similarity index 100% rename from source-oracle/config.cdb.yaml rename to source-oracle/config.pdb.yaml diff --git a/source-oracle/main_test.go b/source-oracle/main_test.go index 8b8557426e..8c9b9ecc47 100644 --- a/source-oracle/main_test.go +++ b/source-oracle/main_test.go @@ -37,7 +37,7 @@ func TestMain(m *testing.M) { os.Exit(m.Run()) } -func oracleTestBackend(t testing.TB) *testBackend { +func oracleTestBackend(t testing.TB, configFile string) *testBackend { t.Helper() if os.Getenv("TEST_DATABASE") != "yes" { t.Skipf("skipping %q: ${TEST_DATABASE} != \"yes\"", t.Name()) @@ -45,7 +45,7 @@ func oracleTestBackend(t testing.TB) *testBackend { } var ctx = context.Background() - var sops = exec.CommandContext(ctx, "sops", "--decrypt", "--output-type", "json", "config.rds.yaml") + var sops = exec.CommandContext(ctx, "sops", "--decrypt", "--output-type", "json", configFile) var configRaw, err = sops.Output() require.NoError(t, err) var jq = exec.CommandContext(ctx, "jq", `walk( if type == "object" then with_entries(.key |= rtrimstr("_sops")) else . end)`) @@ -223,12 +223,17 @@ func argsTuple(row []any) string { // TestGeneric runs the generic sqlcapture test suite. func TestGeneric(t *testing.T) { - var tb = oracleTestBackend(t) + var tb = oracleTestBackend(t, "config.rds.yaml") tests.Run(context.Background(), t, tb) } -func TestCapitalizedTables(t *testing.T) { - var tb, ctx = oracleTestBackend(t), context.Background() +func TestGenericPDB(t *testing.T) { + var tb = oracleTestBackend(t, "config.pdb.yaml") + tests.Run(context.Background(), t, tb) +} + +func testCapitalizedTables(t *testing.T, configFile string) { + var tb, ctx = oracleTestBackend(t, configFile), context.Background() tb.Query(ctx, t, false, fmt.Sprintf(`DROP TABLE "%s"."USERS"`, tb.config.User)) tb.Query(ctx, t, true, fmt.Sprintf(`CREATE TABLE "%s"."USERS" (id INTEGER PRIMARY KEY, data VARCHAR(2000) NOT NULL)`, tb.config.User)) var cs = tb.CaptureSpec(ctx, t) @@ -252,6 +257,14 @@ func TestCapitalizedTables(t *testing.T) { }) } +func TestCapitalizedTables(t *testing.T) { + testCapitalizedTables(t, "config.rds.yaml") +} + +func TestCapitalizedTablesPDB(t *testing.T) { + testCapitalizedTables(t, "config.pdb.yaml") +} + func TestConfigURI(t *testing.T) { for name, cfg := range map[string]Config{ "Basic": { diff --git a/source-oracle/replication.go b/source-oracle/replication.go index 50ef95dfb1..92d4c75fda 100644 --- a/source-oracle/replication.go +++ b/source-oracle/replication.go @@ -214,7 +214,7 @@ func (s *replicationStream) addLogFiles(ctx context.Context, startSCN, endSCN in s.redoSequence = redoSequence - return err + return nil } func (s *replicationStream) startLogminer(ctx context.Context, startSCN, endSCN int64) error {