
com.google.cloud.spanner.pgadapter.wireprotocol.QueryMessage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of google-cloud-spanner-pgadapter Show documentation
Show all versions of google-cloud-spanner-pgadapter Show documentation
The PGAdapter server implements the PostgreSQL wire-protocol, but sends all received statements
to a Cloud Spanner database instead of a PostgreSQL database. The Cloud Spanner database must
have been created to use the PostgreSQL dialect. See https://cloud.google.com/spanner/docs/quickstart-console#postgresql
for more information on how to create PostgreSQL dialect databases on Cloud Spanner.
The newest version!
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.cloud.spanner.pgadapter.wireprotocol;
import com.google.api.core.InternalApi;
import com.google.cloud.spanner.Statement;
import com.google.cloud.spanner.pgadapter.ConnectionHandler;
import com.google.cloud.spanner.pgadapter.statements.SimpleQueryStatement;
import com.google.common.collect.ImmutableList;
import java.text.MessageFormat;
/** Executes a simple statement. */
@InternalApi
public class QueryMessage extends ControlMessage {
protected static final char IDENTIFIER = 'Q';
public static final String COPY = "COPY";
public static final String PREPARE = "PREPARE";
public static final String EXECUTE = "EXECUTE";
public static final String DEALLOCATE = "DEALLOCATE";
public static final String SHOW = "SHOW";
public static final String DISCARD = "DISCARD";
public static final String RESET = "RESET";
public static final String VACUUM = "VACUUM";
public static final String TRUNCATE = "TRUNCATE";
public static final String SAVEPOINT = "SAVEPOINT";
public static final String RELEASE = "RELEASE";
public static final String ROLLBACK = "ROLLBACK";
public static final String DECLARE = "DECLARE";
public static final String FETCH = "FETCH";
public static final String MOVE = "MOVE";
public static final String CLOSE = "CLOSE";
public static final String SHUTDOWN = "SHUTDOWN";
public static final ImmutableList SHOW_DATABASE_DDL =
ImmutableList.of("SHOW", "DATABASE", "DDL");
public static final ImmutableList SELECT_CURRENT_SETTING =
ImmutableList.of("SELECT", "CURRENT_SETTING");
public static final ImmutableList SELECT_SET_CONFIG =
ImmutableList.of("SELECT", "SET_CONFIG");
private final Statement originalStatement;
private final SimpleQueryStatement simpleQueryStatement;
public QueryMessage(ConnectionHandler connection) throws Exception {
super(connection);
connection.getExtendedQueryProtocolHandler().maybeStartSpan(true);
this.originalStatement = Statement.of(this.readAll());
connection.maybeDetermineWellKnownClient(this.originalStatement);
this.simpleQueryStatement =
new SimpleQueryStatement(
connection.getServer().getOptions(), this.originalStatement, this.connection);
}
@Override
protected void sendPayload() throws Exception {
this.simpleQueryStatement.execute();
}
@Override
protected String getMessageName() {
return "Query";
}
@Override
protected String getPayloadString() {
return new MessageFormat("Length: {0}, SQL: {1}")
.format(new Object[] {this.length, this.originalStatement.getSql()});
}
@Override
public String getIdentifier() {
return String.valueOf(IDENTIFIER);
}
public Statement getStatement() {
return this.originalStatement;
}
public SimpleQueryStatement getSimpleQueryStatement() {
return this.simpleQueryStatement;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy