use of com.google.spanner.v1.Type in project pgadapter by GoogleCloudPlatform.
the class CopyStatement method queryInformationSchema.
private void queryInformationSchema() {
Map<String, TypeCode> tableColumns = new LinkedHashMap<>();
Statement statement = Statement.newBuilder("SELECT " + COLUMN_NAME + ", " + DATA_TYPE + " FROM information_schema.columns WHERE table_name = $1").bind("p1").to(getTableName()).build();
try (ResultSet result = connection.executeQuery(statement)) {
while (result.next()) {
String columnName = result.getString(COLUMN_NAME);
TypeCode type = parsePostgreSQLDataType(result.getString(DATA_TYPE));
tableColumns.put(columnName, type);
}
}
if (tableColumns.isEmpty()) {
throw SpannerExceptionFactory.newSpannerException(ErrorCode.INVALID_ARGUMENT, "Table " + getTableName() + " is not found in information_schema");
}
this.tableColumns = tableColumns;
if (options.getColumnNames() != null) {
verifyCopyColumns();
}
this.indexedColumnsCount = queryIndexedColumnsCount(tableColumns.keySet());
}
use of com.google.spanner.v1.Type in project pgadapter by GoogleCloudPlatform.
the class JdbcSimpleModeMockServerTest method testQueryWithParameters.
@Test
public void testQueryWithParameters() throws SQLException {
// Query parameters are not supported by the PG wire protocol in the simple query mode. The JDBC
// driver will therefore convert parameters to literals before sending them to PostgreSQL.
// The bytea data type is not supported for that (by the PG JDBC driver).
// Also, the JDBC driver always uses the default timezone of the JVM when setting a timestamp.
// This is a requirement in the JDBC API (and one that causes about a trillion confusions per
// year). So we need to extract that from the env in order to determine what the timestamp
// string will be.
OffsetDateTime zonedDateTime = LocalDateTime.of(2022, 2, 16, 13, 18, 2, 123456789).atOffset(ZoneOffset.UTC);
String timestampString = new TimestampUtils(false, TimeZone::getDefault).timeToString(java.sql.Timestamp.from(Instant.from(zonedDateTime)), true);
String pgSql = "select col_bigint, col_bool, col_bytea, col_float8, col_numeric, col_timestamptz, col_varchar " + "from all_types " + "where col_bigint=1 " + "and col_bool='TRUE' " + "and col_float8=3.14 " + "and col_numeric=6.626 " + String.format("and col_timestamptz='%s' ", timestampString) + "and col_varchar='test'";
String jdbcSql = "select col_bigint, col_bool, col_bytea, col_float8, col_numeric, col_timestamptz, col_varchar " + "from all_types " + "where col_bigint=? " + "and col_bool=? " + "and col_float8=? " + "and col_numeric=? " + "and col_timestamptz=? " + "and col_varchar=?";
mockSpanner.putStatementResult(StatementResult.query(com.google.cloud.spanner.Statement.of(pgSql), ALL_TYPES_RESULTSET));
try (Connection connection = DriverManager.getConnection(createUrl())) {
try (PreparedStatement preparedStatement = connection.prepareStatement(jdbcSql)) {
int index = 0;
preparedStatement.setLong(++index, 1L);
preparedStatement.setBoolean(++index, true);
preparedStatement.setDouble(++index, 3.14d);
preparedStatement.setBigDecimal(++index, new BigDecimal("6.626"));
preparedStatement.setTimestamp(++index, java.sql.Timestamp.from(Instant.from(zonedDateTime)));
preparedStatement.setString(++index, "test");
try (ResultSet resultSet = preparedStatement.executeQuery()) {
assertTrue(resultSet.next());
assertEquals(1L, resultSet.getLong(1));
assertFalse(resultSet.next());
}
}
}
// The statement is sent only once to the mock server in simple query mode.
assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class));
ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0);
assertEquals(QueryMode.NORMAL, request.getQueryMode());
assertEquals(pgSql, request.getSql());
assertTrue(request.getTransaction().hasSingleUse());
assertTrue(request.getTransaction().getSingleUse().hasReadOnly());
}
use of com.google.spanner.v1.Type in project java-spanner-jdbc by googleapis.
the class PgNumericPreparedStatementTest method assertRequestWithScalar.
private void assertRequestWithScalar(String value) {
final ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0);
final String actualSql = request.getSql();
final Struct actualParams = request.getParams();
final Map<String, Type> actualParamTypes = request.getParamTypesMap();
final Value parameterValue = protoValueFromString(value);
final Struct expectedParams = Struct.newBuilder().putFields("p1", parameterValue).build();
final ImmutableMap<String, Type> expectedTypes = ImmutableMap.of("p1", Type.newBuilder().setCode(TypeCode.NUMERIC).setTypeAnnotation(TypeAnnotationCode.PG_NUMERIC).build());
assertEquals(REWRITTEN_QUERY, actualSql);
assertEquals(expectedParams, actualParams);
assertEquals(expectedTypes, actualParamTypes);
}
use of com.google.spanner.v1.Type in project java-spanner-jdbc by googleapis.
the class PgNumericPreparedStatementTest method assertRequestWithArray.
private void assertRequestWithArray(Iterable<String> value) {
final ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0);
final String actualSql = request.getSql();
final Struct actualParams = request.getParams();
final Map<String, Type> actualParamTypes = request.getParamTypesMap();
Value parameterValue;
if (value != null) {
final ListValue.Builder builder = ListValue.newBuilder();
value.forEach(v -> builder.addValues(protoValueFromString(v)));
parameterValue = Value.newBuilder().setListValue(builder.build()).build();
} else {
parameterValue = Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build();
}
final Struct expectedParams = Struct.newBuilder().putFields("p1", parameterValue).build();
final ImmutableMap<String, Type> expectedTypes = ImmutableMap.of("p1", Type.newBuilder().setCode(TypeCode.ARRAY).setArrayElementType(Type.newBuilder().setCode(TypeCode.NUMERIC).setTypeAnnotation(TypeAnnotationCode.PG_NUMERIC)).build());
assertEquals(REWRITTEN_QUERY, actualSql);
assertEquals(expectedParams, actualParams);
assertEquals(expectedTypes, actualParamTypes);
}
use of com.google.spanner.v1.Type in project jodd by oblac.
the class BigClassTest method testAllFeatures.
@Test
public void testAllFeatures() throws IOException, IllegalAccessException, InstantiationException {
StatCounter.counter = 0;
final MutableBoolean firstTime = new MutableBoolean(true);
ProxyAspect aspect = new ProxyAspect(StatCounterAdvice.class, new ProxyPointcutSupport() {
public boolean apply(MethodInfo mi) {
if (firstTime.value) {
firstTime.value = false;
ClassInfo ci = mi.getClassInfo();
assertEquals("BigFatJoe", ci.getClassname());
assertEquals(BigFatJoe.class.getPackage().getName(), ci.getPackage());
assertEquals("jodd/proxetta/data/BigFatJoe", ci.getReference());
assertEquals("jodd/proxetta/data/SmallSkinnyZoe", ci.getSuperName());
AnnotationInfo[] anns = ci.getAnnotations();
assertNotNull(anns);
assertEquals(3, anns.length);
AnnotationInfo ai = anns[0];
assertSame(ai, getAnnotation(ci, MadvocAction.class));
assertEquals(MadvocAction.class.getName(), ai.getAnnotationClassname());
assertEquals("L" + MadvocAction.class.getName().replace('.', '/') + ";", ai.getAnnotationSignature());
assertEquals("madvocAction", ai.getElement("value"));
ai = anns[1];
assertSame(ai, getAnnotation(ci, PetiteBean.class));
assertEquals(PetiteBean.class.getName(), ai.getAnnotationClassname());
assertEquals("L" + PetiteBean.class.getName().replace('.', '/') + ";", ai.getAnnotationSignature());
ai = anns[2];
assertSame(ai, getAnnotation(ci, InterceptedBy.class));
assertEquals(InterceptedBy.class.getName(), ai.getAnnotationClassname());
assertEquals("L" + InterceptedBy.class.getName().replace('.', '/') + ";", ai.getAnnotationSignature());
assertTrue(ai.getElement("value") instanceof Object[]);
assertFalse(ai.getElement("value") instanceof String[]);
Object c1 = ((Object[]) ai.getElement("value"))[0];
assertEquals("Ljodd/proxetta/data/Str;", ((Type) c1).getDescriptor());
}
if (mi.getMethodName().equals("publicMethod")) {
AnnotationInfo[] anns = mi.getAnnotations();
assertNotNull(anns);
assertEquals(3, anns.length);
AnnotationInfo ai = anns[0];
assertSame(ai, getAnnotation(mi, Action.class));
assertEquals(Action.class.getName(), ai.getAnnotationClassname());
assertEquals("value", ai.getElement("value"));
assertEquals("alias", ai.getElement("alias"));
ai = anns[1];
assertSame(ai, getAnnotation(mi, PetiteInject.class));
assertEquals(PetiteInject.class.getName(), ai.getAnnotationClassname());
assertEquals(0, ai.getElementNames().size());
ai = anns[2];
assertSame(ai, getAnnotation(mi, Transaction.class));
assertEquals(Transaction.class.getName(), ai.getAnnotationClassname());
assertEquals(2, ai.getElementNames().size());
String s = (String) ai.getElement("propagation");
assertEquals("PROPAGATION_REQUIRES_NEW", s);
}
if (mi.getMethodName().equals("superPublicMethod")) {
AnnotationInfo[] anns = mi.getAnnotations();
assertNotNull(anns);
assertEquals(3, anns.length);
AnnotationInfo ai = anns[0];
assertSame(ai, getAnnotation(mi, Action.class));
assertEquals(Action.class.getName(), ai.getAnnotationClassname());
assertEquals(0, ai.getElementNames().size());
ai = anns[1];
assertSame(ai, getAnnotation(mi, PetiteInject.class));
assertEquals(PetiteInject.class.getName(), ai.getAnnotationClassname());
assertEquals(0, ai.getElementNames().size());
ai = anns[2];
assertSame(ai, getAnnotation(mi, Transaction.class));
assertEquals(Transaction.class.getName(), ai.getAnnotationClassname());
assertEquals(0, ai.getElementNames().size());
}
//System.out.println(!isRootMethod(mi) + " " + mi.getDeclaredClassName() + '#' + mi.getMethodName());
return !isRootMethod(mi);
}
});
byte[] classBytes = ProxyProxetta.withAspects(aspect).builder(BigFatJoe.class).create();
// URL resource = BigFatJoe.class.getResource("/" + BigFatJoe.class.getName().replace(".", "/") + ".class");
// jodd.io.FileUtil.copy(FileUtil.toFile(resource), new java.io.File(SystemUtil.getUserHome(), "jo.class"));
// jodd.io.FileUtil.writeBytes(new java.io.File(SystemUtil.getUserHome(), "joe.class"), classBytes);
Class clazz = ClassLoaderUtil.defineClass(null, classBytes);
BigFatJoe bigFatJoe = (BigFatJoe) clazz.newInstance();
assertEquals(BigFatJoe.class.getName() + "$$Proxetta", bigFatJoe.getClass().getName());
assertEquals(BigFatJoe.class, ProxettaUtil.getTargetClass(bigFatJoe.getClass()));
// test invocation
// 2 x static + 1 x instance
assertEquals(3, StatCounter.counter);
bigFatJoe.publicMethod();
assertEquals(4, StatCounter.counter);
bigFatJoe.callInnerMethods();
// private method is not overridden
assertEquals(7, StatCounter.counter);
bigFatJoe.superPublicMethod();
assertEquals(8, StatCounter.counter);
bigFatJoe.callInnerMethods2();
// only public super methods are overridden
assertEquals(9, StatCounter.counter);
// test class annotation
MadvocAction ma = (MadvocAction) clazz.getAnnotation(MadvocAction.class);
assertEquals("madvocAction", ma.value());
InterceptedBy ib = (InterceptedBy) clazz.getAnnotation(InterceptedBy.class);
assertNotNull(ib.value());
assertEquals(2, ib.value().length);
// test method annotation
ClassDescriptor cd = ClassIntrospector.lookup(clazz);
Method m = cd.getMethodDescriptor("publicMethod", false).getMethod();
assertNotNull(m);
Annotation[] aa = m.getAnnotations();
assertEquals(3, aa.length);
Action a = (Action) aa[0];
assertEquals("alias", a.alias());
assertEquals("extension", a.extension());
assertEquals("method", a.method());
assertEquals("value", a.value());
PetiteInject pi = (PetiteInject) aa[1];
assertEquals("", pi.value());
Transaction tx = (Transaction) aa[2];
assertTrue(tx.readOnly());
assertEquals(1000, tx.timeout());
assertEquals("PROPAGATION_REQUIRES_NEW", tx.propagation());
bigFatJoe.runInnerClass();
// proxy + call
assertEquals(11, StatCounter.counter);
}
Aggregations