use of org.apache.ignite.internal.binary.BinaryWriterExImpl in project ignite by apache.
the class JdbcThinTcpIo method handshake.
/**
* @throws IOException On error.
* @throws IgniteCheckedException On error.
*/
public void handshake() throws IOException, IgniteCheckedException {
BinaryWriterExImpl writer = new BinaryWriterExImpl(null, new BinaryHeapOutputStream(HANDSHAKE_MSG_SIZE), null, null);
writer.writeByte((byte) SqlListenerRequest.HANDSHAKE);
writer.writeShort(CURRENT_VER.major());
writer.writeShort(CURRENT_VER.minor());
writer.writeShort(CURRENT_VER.maintenance());
writer.writeByte(SqlListenerNioListener.JDBC_CLIENT);
writer.writeBoolean(distributedJoins);
writer.writeBoolean(enforceJoinOrder);
send(writer.array());
BinaryReaderExImpl reader = new BinaryReaderExImpl(null, new BinaryHeapInputStream(read()), null, null, false);
boolean accepted = reader.readBoolean();
if (accepted)
return;
short maj = reader.readShort();
short min = reader.readShort();
short maintenance = reader.readShort();
String err = reader.readString();
SqlListenerProtocolVersion ver = SqlListenerProtocolVersion.create(maj, min, maintenance);
throw new IgniteCheckedException("Handshake failed [driverProtocolVer=" + CURRENT_VER + ", remoteNodeProtocolVer=" + ver + ", err=" + err + ']');
}
use of org.apache.ignite.internal.binary.BinaryWriterExImpl in project ignite by apache.
the class SqlListenerNioListener method onHandshake.
/**
* Perform handshake.
*
* @param ses Session.
* @param msg Message bytes.
*/
private void onHandshake(GridNioSession ses, byte[] msg) {
BinaryInputStream stream = new BinaryHeapInputStream(msg);
BinaryReaderExImpl reader = new BinaryReaderExImpl(null, stream, null, true);
byte cmd = reader.readByte();
if (cmd != SqlListenerRequest.HANDSHAKE) {
log.error("Unexpected SQL client request (will close session): " + ses.remoteAddress());
ses.close();
return;
}
short verMajor = reader.readShort();
short verMinor = reader.readShort();
short verMaintenance = reader.readShort();
SqlListenerProtocolVersion ver = SqlListenerProtocolVersion.create(verMajor, verMinor, verMaintenance);
String errMsg = null;
if (SUPPORTED_VERS.contains(ver)) {
// Prepare context.
SqlListenerConnectionContext connCtx = prepareContext(ver, reader);
ses.addMeta(CONN_CTX_META_KEY, connCtx);
} else {
log.warning("Unsupported version: " + ver.toString());
errMsg = "Unsupported version.";
}
// Send response.
BinaryWriterExImpl writer = new BinaryWriterExImpl(null, new BinaryHeapOutputStream(8), null, null);
if (errMsg == null)
writer.writeBoolean(true);
else {
writer.writeBoolean(false);
writer.writeShort(CURRENT_VER.major());
writer.writeShort(CURRENT_VER.minor());
writer.writeShort(CURRENT_VER.maintenance());
writer.doWriteString(errMsg);
}
ses.send(writer.array());
}
use of org.apache.ignite.internal.binary.BinaryWriterExImpl in project ignite by apache.
the class OdbcMessageParser method encode.
/** {@inheritDoc} */
@Override
public byte[] encode(SqlListenerResponse msg0) {
assert msg0 != null;
assert msg0 instanceof OdbcResponse;
OdbcResponse msg = (OdbcResponse) msg0;
// Creating new binary writer
BinaryWriterExImpl writer = new BinaryWriterExImpl(marsh.context(), new BinaryHeapOutputStream(INIT_CAP), BinaryThreadLocalContext.get().schemaHolder(), null);
// Writing status.
writer.writeByte((byte) msg.status());
if (msg.status() != SqlListenerResponse.STATUS_SUCCESS) {
writer.writeString(msg.error());
return writer.array();
}
Object res0 = msg.response();
if (res0 == null)
return writer.array();
else if (res0 instanceof OdbcQueryExecuteResult) {
OdbcQueryExecuteResult res = (OdbcQueryExecuteResult) res0;
if (log.isDebugEnabled())
log.debug("Resulting query ID: " + res.getQueryId());
writer.writeLong(res.getQueryId());
Collection<OdbcColumnMeta> metas = res.getColumnsMetadata();
assert metas != null;
writer.writeInt(metas.size());
for (OdbcColumnMeta meta : metas) meta.write(writer);
} else if (res0 instanceof OdbcQueryFetchResult) {
OdbcQueryFetchResult res = (OdbcQueryFetchResult) res0;
if (log.isDebugEnabled())
log.debug("Resulting query ID: " + res.queryId());
writer.writeLong(res.queryId());
Collection<?> items0 = res.items();
assert items0 != null;
writer.writeBoolean(res.last());
writer.writeInt(items0.size());
for (Object row0 : items0) {
if (row0 != null) {
Collection<?> row = (Collection<?>) row0;
writer.writeInt(row.size());
for (Object obj : row) SqlListenerUtils.writeObject(writer, obj, true);
}
}
} else if (res0 instanceof OdbcQueryCloseResult) {
OdbcQueryCloseResult res = (OdbcQueryCloseResult) res0;
if (log.isDebugEnabled())
log.debug("Resulting query ID: " + res.getQueryId());
writer.writeLong(res.getQueryId());
} else if (res0 instanceof OdbcQueryGetColumnsMetaResult) {
OdbcQueryGetColumnsMetaResult res = (OdbcQueryGetColumnsMetaResult) res0;
Collection<OdbcColumnMeta> columnsMeta = res.meta();
assert columnsMeta != null;
writer.writeInt(columnsMeta.size());
for (OdbcColumnMeta columnMeta : columnsMeta) columnMeta.write(writer);
} else if (res0 instanceof OdbcQueryGetTablesMetaResult) {
OdbcQueryGetTablesMetaResult res = (OdbcQueryGetTablesMetaResult) res0;
Collection<OdbcTableMeta> tablesMeta = res.meta();
assert tablesMeta != null;
writer.writeInt(tablesMeta.size());
for (OdbcTableMeta tableMeta : tablesMeta) tableMeta.writeBinary(writer);
} else if (res0 instanceof OdbcQueryGetParamsMetaResult) {
OdbcQueryGetParamsMetaResult res = (OdbcQueryGetParamsMetaResult) res0;
byte[] typeIds = res.typeIds();
SqlListenerUtils.writeObject(writer, typeIds, true);
} else
assert false : "Should not reach here.";
return writer.array();
}
use of org.apache.ignite.internal.binary.BinaryWriterExImpl in project ignite by apache.
the class JdbcThinTcpIo method sendRequest.
/**
* @param req Request.
* @param cap Initial ouput stream capacity.
* @return Server response.
* @throws IOException On IO error.
* @throws IgniteCheckedException On error.
*/
@SuppressWarnings("unchecked")
public <R extends JdbcResult> R sendRequest(JdbcRequest req, int cap) throws IOException, IgniteCheckedException {
BinaryWriterExImpl writer = new BinaryWriterExImpl(null, new BinaryHeapOutputStream(cap), null, null);
req.writeBinary(writer);
send(writer.array());
BinaryReaderExImpl reader = new BinaryReaderExImpl(null, new BinaryHeapInputStream(read()), null, null, false);
JdbcResponse res = new JdbcResponse();
res.readBinary(reader);
if (res.status() != SqlListenerResponse.STATUS_SUCCESS)
throw new IgniteCheckedException("Error server response: [req=" + req + ", resp=" + res + ']');
return (R) res.response();
}
use of org.apache.ignite.internal.binary.BinaryWriterExImpl in project ignite by apache.
the class BinaryObjectBuilderImpl method build.
/** {@inheritDoc} */
@Override
public BinaryObject build() {
try (BinaryWriterExImpl writer = new BinaryWriterExImpl(ctx)) {
writer.typeId(typeId);
BinaryBuilderSerializer serializationCtx = new BinaryBuilderSerializer();
serializationCtx.registerObjectWriting(this, 0);
serializeTo(writer, serializationCtx);
byte[] arr = writer.array();
return new BinaryObjectImpl(ctx, arr, 0);
}
}
Aggregations