Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Spanner connector #16724

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

taher-cldcvr
Copy link

@taher-cldcvr taher-cldcvr commented Mar 25, 2023

Description

Fixes #13053

Release notes

(x) Release notes are required, with the following suggested text:

# General
* Add Spanner connector. ({issue}`13053`)

@cla-bot
Copy link

cla-bot bot commented Mar 25, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

Copy link
Member

@ebyhr ebyhr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a documentation and tests (connector test, type mapping test, product test and etc). You can refer to #8323

@taher-cldcvr
Copy link
Author

@ebyhr sure, thank you for the reference. I will keep enhancing the PR

…y keys,not null fields, timestamp field options etc.
@cla-bot
Copy link

cla-bot bot commented Mar 27, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

@cla-bot
Copy link

cla-bot bot commented Mar 27, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

@ebyhr
Copy link
Member

ebyhr commented Mar 28, 2023

Could you change to draft PR if it's not ready for review?

@@ -0,0 +1,660 @@
package io.trino.plugin.spanner;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The license header is missing.

Comment on lines 168 to 172
case Types.CHAR:
case Types.VARCHAR:
case Types.NVARCHAR:
case Types.LONGVARCHAR:
case Types.LONGNVARCHAR:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All conditions are really needed?

Comment on lines 174 to 176
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All conditions are really needed?

import io.trino.testing.MaterializedResult;
import org.testng.annotations.Test;

public class TestSpannerDataTypes
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename to TestSpannerTypeMapping

MaterializedResult execute = queryRunner.execute("select * from spanner.default.dtest");
System.out.println(execute);

}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please cover all types in this test.

@Inject
public SpannerTableProperties()
{
System.out.println("CALLED TABLE PROPERTIES ");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove.

MaterializedResult drop = queryRunner.execute("DROP TABLE spanner.default.dept");
System.out.println(drop);

System.out.println("DONE");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove System.out.println.

@@ -196,6 +196,7 @@
<module>testing/trino-testing-resources</module>
<module>testing/trino-testing-services</module>
<module>testing/trino-tests</module>
<module>plugin/trino-spanner</module>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update core/trino-server/src/main/provisio/trino.xml as well.

DATE,
dateReadFunctionUsingLocalDate(),
spannerDateWriteFunctionUsingLocalDate()));
case Types.TIMESTAMP:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would recommend removing support for TIMESTAMP in this PR. We can add the type later.

return timestamp.toInstant().toEpochMilli() * 1000;
},
(statement, index, value) -> statement.setTimestamp(index, new java.sql.Timestamp(value / 1000))));
case Types.BOOLEAN:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move before Types.SMALLINT.

@taher-cldcvr taher-cldcvr marked this pull request as draft March 28, 2023 04:17
@taher-cldcvr
Copy link
Author

@ebyhr changed to draft as not ready for review yet

@cla-bot
Copy link

cla-bot bot commented Apr 14, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

@cla-bot
Copy link

cla-bot bot commented Apr 14, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

@taher-cldcvr
Copy link
Author

@ebyhr Spanner JDBC does not allow upserts when inserting duplicate records with the same key. So i changed spanner sink from JdbcSink to write via Spanner Mutations API which can do upserts. So right now spanner reads everything over JDBC but writes are made via Spanner API. What is the best practise her? Should reads also change to Spanner API? or we can allow reads and writes to be different API's as in this case

@taher-cldcvr
Copy link
Author

taher-cldcvr commented Apr 14, 2023

@ebyhr Another reason why I changed from JDBC sink to Spanner mutations API-based sink is that randomly after creating a table JDBC would throw an error that the table is not ready in the spanner. That was automatically taken care of by the spanner mutations api. For this see https://cloud.google.com/spanner/docs/information-schema#columns Spanner state

Copy link
Contributor

@chenjian2664 chenjian2664 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work!

resultSet.getString("TABLE_NAME"));
}

public static void sleep()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the usage about this method?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nah just random testing will remove that

int jdbcType = typeHandle.getJdbcType();
String jdbcTypeName = typeHandle.getJdbcTypeName()
.orElseThrow(() -> new TrinoException(JDBC_ERROR, "Type name is missing: " + typeHandle));
System.out.println("Column mapping for type " + typeHandle);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove system.out.println

switch (jdbcType) {
case Types.BOOLEAN:
return Optional.of(StandardColumnMappings.booleanColumnMapping());
case Types.SMALLINT:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about add a type mapping test? you can refer TestIgniteTypeMapping as a example

@Override
public Collection<String> listSchemas(Connection connection)
{
Set<String> schemas = new HashSet<>(Collections.singleton(DEFAULT_SCHEMA));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User ImmutableSet.Builder

Set<String> schemas = new HashSet<>(Collections.singleton(DEFAULT_SCHEMA));
try (ResultSet resultSet = connection.getMetaData().getSchemas(null, null)) {
while (resultSet.next()) {
schemas.add(resultSet.getString(1));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about use resultSet.getString(name)

}

@Override
public List<JdbcColumnHandle> getColumns(ConnectorSession session, JdbcTableHandle tableHandle)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why override?

{
}

@Override
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why override?

public SpannerClient(BaseJdbcConfig config, SpannerConfig spannerConfig, JdbcStatisticsConfig statisticsConfig, ConnectionFactory connectionFactory, QueryBuilder queryBuilder, TypeManager typeManager, IdentifierMapping identifierMapping, RemoteQueryModifier queryModifier)
{
super("`", connectionFactory, queryBuilder, config.getJdbcTypesMappedToVarchar(), identifierMapping, queryModifier, true);
this.config = spannerConfig;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

requireNonNull(spannerConfig, "spannerConfig is null")

throws SQLException
{
String schema = resultSet.getString("TABLE_SCHEM");
if (schema != null && schema.equals("")) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Strings.emptyToNull

}

@Override
public TableStatistics getTableStatistics(ConnectorSession session, JdbcTableHandle handle)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same, why override?

@chenjian2664
Copy link
Contributor

@taher-cldcvr If the write side is much more complicated than the read part, maybe we can support read for Spanner connector first cc @ebyhr

@taher-cldcvr
Copy link
Author

@taher-cldcvr If the write side is much more complicated than the read part, maybe we can support read for Spanner connector first cc @ebyhr

It is not complicated as it is already implemented and works well. I want to review and need help testing the writing side thoroughly

@taher-cldcvr
Copy link
Author

Thank you @chenjian2664 for the review. I will address the comments and add more test cases.

@cla-bot
Copy link

cla-bot bot commented Jun 6, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

@cla-bot
Copy link

cla-bot bot commented Jun 15, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

@taher-cldcvr
Copy link
Author

taher-cldcvr commented Jun 15, 2023

Need help with test case @ebyhr , @chenjian2664
6555aa8

I am getting the following error when testing for test type mapping
`2023-06-15T02:26:00.023-0500 INFO dispatcher-query-3 io.trino.event.QueryMonitor TIMELINE: Query 20230615_072559_00000_tysvf :: FINISHED :: elapsed 708ms :: planning 194ms :: waiting 214ms :: scheduling 468ms :: running 38ms :: finishing 8ms :: begin 2023-06-15T01:25:59.299-06:00 :: end 2023-06-15T01:26:00.007-06:00
2023-06-15T02:26:00.183-0500 INFO dispatcher-query-4 io.trino.event.QueryMonitor TIMELINE: Query 20230615_072600_00001_tysvf :: FINISHED :: elapsed 109ms :: planning 48ms :: waiting 9ms :: scheduling 45ms :: running 15ms :: finishing 1ms :: begin 2023-06-15T01:26:00.060-06:00 :: end 2023-06-15T01:26:00.169-06:00
2023-06-15T02:26:00.196-0500 INFO main io.trino.testng.services.FlakyTestRetryAnalyzer FlakyTestRetryAnalyzer not enabled: CONTINUOUS_INTEGRATION environment is not detected or system property 'io.trino.testng.services.FlakyTestRetryAnalyzer.enabled' is not set to 'true' (actual: )

org.assertj.core.error.MultipleAssertionsError:
The following assertion failed:

  1. [Rows for query [SELECT * FROM test_boolean]]
    Expecting actual:

to contain exactly in any order:
[(true, false, null, 1)]
but could not find the following elements:
(true, false, null, 1)

at org.assertj.core.error.AssertionErrorCreator.multipleAssertionsError(AssertionErrorCreator.java:106)
at org.assertj.core.api.AbstractAssert.multipleAssertionsError(AbstractAssert.java:979)
at org.assertj.core.api.AbstractAssert.satisfiesForProxy(AbstractAssert.java:875)
at org.assertj.core.api.AbstractAssert.satisfies(AbstractAssert.java:862)
at io.trino.sql.query.QueryAssertions$QueryAssert.matches(QueryAssertions.java:384)
at io.trino.testing.datatype.SqlDataTypeTest.verifySelect(SqlDataTypeTest.java:119)
at io.trino.testing.datatype.SqlDataTypeTest.execute(SqlDataTypeTest.java:91)
at io.trino.testing.datatype.SqlDataTypeTest.execute(SqlDataTypeTest.java:84)
at io.trino.plugin.spanner.TestSpannerDataTypesMapping.testBoolean(TestSpannerDataTypesMapping.java:52)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:756)
at org.testng.TestRunner.run(TestRunner.java:610)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
at org.testng.TestNG.runSuites(TestNG.java:1133)
at org.testng.TestNG.run(TestNG.java:1104)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)`

Dont understand what i did wrong here

@findepi findepi changed the title Added Spanner connector Add Spanner connector Jun 15, 2023
@cla-bot
Copy link

cla-bot bot commented Oct 20, 2023

Thank you for your pull request and welcome to the Trino community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. Continue to work with us on the review and improvements in this PR, and submit the signed CLA to cla@trino.io. Photos, scans, or digitally-signed PDF files are all suitable. Processing may take a few days. The CLA needs to be on file before we merge your changes. For more information, see https://github.com/trinodb/cla

@taher-cldcvr
Copy link
Author

Need help with test case @ebyhr , @chenjian2664 6555aa8

I am getting the following error when testing for test type mapping `2023-06-15T02:26:00.023-0500 INFO dispatcher-query-3 io.trino.event.QueryMonitor TIMELINE: Query 20230615_072559_00000_tysvf :: FINISHED :: elapsed 708ms :: planning 194ms :: waiting 214ms :: scheduling 468ms :: running 38ms :: finishing 8ms :: begin 2023-06-15T01:25:59.299-06:00 :: end 2023-06-15T01:26:00.007-06:00 2023-06-15T02:26:00.183-0500 INFO dispatcher-query-4 io.trino.event.QueryMonitor TIMELINE: Query 20230615_072600_00001_tysvf :: FINISHED :: elapsed 109ms :: planning 48ms :: waiting 9ms :: scheduling 45ms :: running 15ms :: finishing 1ms :: begin 2023-06-15T01:26:00.060-06:00 :: end 2023-06-15T01:26:00.169-06:00 2023-06-15T02:26:00.196-0500 INFO main io.trino.testng.services.FlakyTestRetryAnalyzer FlakyTestRetryAnalyzer not enabled: CONTINUOUS_INTEGRATION environment is not detected or system property 'io.trino.testng.services.FlakyTestRetryAnalyzer.enabled' is not set to 'true' (actual: )

org.assertj.core.error.MultipleAssertionsError: The following assertion failed:

  1. [Rows for query [SELECT * FROM test_boolean]]
    Expecting actual:

to contain exactly in any order: [(true, false, null, 1)] but could not find the following elements: (true, false, null, 1)

at org.assertj.core.error.AssertionErrorCreator.multipleAssertionsError(AssertionErrorCreator.java:106)
at org.assertj.core.api.AbstractAssert.multipleAssertionsError(AbstractAssert.java:979)
at org.assertj.core.api.AbstractAssert.satisfiesForProxy(AbstractAssert.java:875)
at org.assertj.core.api.AbstractAssert.satisfies(AbstractAssert.java:862)
at io.trino.sql.query.QueryAssertions$QueryAssert.matches(QueryAssertions.java:384)
at io.trino.testing.datatype.SqlDataTypeTest.verifySelect(SqlDataTypeTest.java:119)
at io.trino.testing.datatype.SqlDataTypeTest.execute(SqlDataTypeTest.java:91)
at io.trino.testing.datatype.SqlDataTypeTest.execute(SqlDataTypeTest.java:84)
at io.trino.plugin.spanner.TestSpannerDataTypesMapping.testBoolean(TestSpannerDataTypesMapping.java:52)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:756)
at org.testng.TestRunner.run(TestRunner.java:610)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
at org.testng.TestNG.runSuites(TestNG.java:1133)
at org.testng.TestNG.run(TestNG.java:1104)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)`

Dont understand what i did wrong here

@findepi @chenjian2664 @ebyhr @ragnard I cannot understand what is going wrong with this test case. Please can you guys help me

@taher-cldcvr
Copy link
Author

Need help with test case @ebyhr , @chenjian2664 6555aa8
I am getting the following error when testing for test type mapping `2023-06-15T02:26:00.023-0500 INFO dispatcher-query-3 io.trino.event.QueryMonitor TIMELINE: Query 20230615_072559_00000_tysvf :: FINISHED :: elapsed 708ms :: planning 194ms :: waiting 214ms :: scheduling 468ms :: running 38ms :: finishing 8ms :: begin 2023-06-15T01:25:59.299-06:00 :: end 2023-06-15T01:26:00.007-06:00 2023-06-15T02:26:00.183-0500 INFO dispatcher-query-4 io.trino.event.QueryMonitor TIMELINE: Query 20230615_072600_00001_tysvf :: FINISHED :: elapsed 109ms :: planning 48ms :: waiting 9ms :: scheduling 45ms :: running 15ms :: finishing 1ms :: begin 2023-06-15T01:26:00.060-06:00 :: end 2023-06-15T01:26:00.169-06:00 2023-06-15T02:26:00.196-0500 INFO main io.trino.testng.services.FlakyTestRetryAnalyzer FlakyTestRetryAnalyzer not enabled: CONTINUOUS_INTEGRATION environment is not detected or system property 'io.trino.testng.services.FlakyTestRetryAnalyzer.enabled' is not set to 'true' (actual: )
org.assertj.core.error.MultipleAssertionsError: The following assertion failed:

  1. [Rows for query [SELECT * FROM test_boolean]]
    Expecting actual:

to contain exactly in any order: [(true, false, null, 1)] but could not find the following elements: (true, false, null, 1)

at org.assertj.core.error.AssertionErrorCreator.multipleAssertionsError(AssertionErrorCreator.java:106)
at org.assertj.core.api.AbstractAssert.multipleAssertionsError(AbstractAssert.java:979)
at org.assertj.core.api.AbstractAssert.satisfiesForProxy(AbstractAssert.java:875)
at org.assertj.core.api.AbstractAssert.satisfies(AbstractAssert.java:862)
at io.trino.sql.query.QueryAssertions$QueryAssert.matches(QueryAssertions.java:384)
at io.trino.testing.datatype.SqlDataTypeTest.verifySelect(SqlDataTypeTest.java:119)
at io.trino.testing.datatype.SqlDataTypeTest.execute(SqlDataTypeTest.java:91)
at io.trino.testing.datatype.SqlDataTypeTest.execute(SqlDataTypeTest.java:84)
at io.trino.plugin.spanner.TestSpannerDataTypesMapping.testBoolean(TestSpannerDataTypesMapping.java:52)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:756)
at org.testng.TestRunner.run(TestRunner.java:610)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
at org.testng.TestNG.runSuites(TestNG.java:1133)
at org.testng.TestNG.run(TestNG.java:1104)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)`

Dont understand what i did wrong here

@findepi @chenjian2664 @ebyhr @ragnard I cannot understand what is going wrong with this test case. Please can you guys help me

@ebyhr @findepi can you guys help me understand what I am doing wrong here? I feel like this is a very simple assertion error of expecting elements in list. I cannot figure out what needs to change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

Spanner connector support
4 participants