/** {@inheritDoc} */ @Override public ColumnDefinitions getVariables() { return st.getVariables(); }
ColumnDefinitions vars = stmt.getVariables(); for (int i = 1; i < vars.size(); i++) { boundStmt.setString(i, values.get(vars.getName(i)).toString());
ColumnDefinitions vars = stmt.getVariables(); BoundStatement boundStmt = stmt.bind(); for (int i = 0; i < vars.size() - 1; i++) {
protected int[] getAllIndexesOf(String name) { return wrapped.statement.getVariables().getAllIdx(name); }
protected DataType getType(int i) { return wrapped.statement.getVariables().getType(i); }
protected String getName(int i) { return wrapped.statement.getVariables().getName(i); }
protected int appendParameters(BoundStatement statement, StringBuilder buffer, int remaining) { if (remaining == 0) return 0; ColumnDefinitions metadata = statement.preparedStatement().getVariables(); int numberOfParameters = metadata.size(); if (numberOfParameters > 0) { List<ColumnDefinitions.Definition> definitions = metadata.asList(); int numberOfLoggedParameters; if (remaining == -1) { numberOfLoggedParameters = numberOfParameters; } else { numberOfLoggedParameters = Math.min(remaining, numberOfParameters); remaining -= numberOfLoggedParameters; } for (int i = 0; i < numberOfLoggedParameters; i++) { if (buffer.length() == 0) buffer.append(" ["); else buffer.append(", "); String value = statement.isSet(i) ? parameterValueAsString(definitions.get(i), statement.wrapper.values[i]) : "<UNSET>"; buffer.append(String.format("%s:%s", metadata.getName(i), value)); } if (numberOfLoggedParameters < numberOfParameters) { buffer.append(FURTHER_PARAMS_OMITTED); } } return remaining; }
if (values.length > statement.getVariables().size()) throw new IllegalArgumentException( String.format( "Prepared statement has only %d variables, %d values provided", statement.getVariables().size(), values.length));
@BeforeMethod(groups = {"unit"}) public void setup() { MockitoAnnotations.initMocks(this); PreparedId preparedId = new PreparedId( new PreparedId.PreparedMetadata(MD5Digest.wrap(PREPARED_ID), null), new PreparedId.PreparedMetadata(MD5Digest.wrap(RESULT_METADATA_ID), null), new int[0], ProtocolVersion.V5); Mockito.when(preparedStatement.getPreparedId()).thenReturn(preparedId); ColumnDefinitions columnDefinitions = new ColumnDefinitions( new Definition[] { new Definition("ks", "table", "c1", DataType.cint()), new Definition("ks", "table", "c2", DataType.text()) }, CodecRegistry.DEFAULT_INSTANCE); Mockito.when(preparedStatement.getVariables()).thenReturn(columnDefinitions); Mockito.when(preparedStatement.getIncomingPayload()).thenReturn(null); Mockito.when(preparedStatement.getOutgoingPayload()).thenReturn(null); Mockito.when(preparedStatement.getCodecRegistry()).thenReturn(CodecRegistry.DEFAULT_INSTANCE); }
@Test(groups = "short") @CassandraVersion(value = "3.6", description = "Non-frozen UDTs were introduced in C* 3.6") public void should_indicate_user_type_is_not_frozen() { session().execute("CREATE TABLE not_frozen_table(k int primary key, v type_for_frozen_test)"); KeyspaceMetadata keyspaceMetadata = cluster().getMetadata().getKeyspace(this.keyspace); assertThat(keyspaceMetadata.getUserType("type_for_frozen_test")).isNotFrozen(); DataType userType = keyspaceMetadata.getTable("not_frozen_table").getColumn("v").getType(); assertThat(userType).isNotFrozen(); assertThat(userType.toString()).isEqualTo(keyspace + ".type_for_frozen_test"); ResultSet rs = session().execute("SELECT v FROM not_frozen_table WHERE k = 1"); assertThat(rs.getColumnDefinitions().getType(0)).isNotFrozen(); PreparedStatement pst = session().prepare("SELECT v FROM not_frozen_table WHERE k = ?"); assertThat(pst.getVariables().getType(0)).isNotFrozen(); } }
@Test(groups = "short") public void should_indicate_user_type_is_frozen() { session() .execute("CREATE TABLE frozen_table(k int primary key, v frozen<type_for_frozen_test>)"); KeyspaceMetadata keyspaceMetadata = cluster().getMetadata().getKeyspace(this.keyspace); assertThat(keyspaceMetadata.getUserType("type_for_frozen_test")).isNotFrozen(); DataType userType = keyspaceMetadata.getTable("frozen_table").getColumn("v").getType(); assertThat(userType).isFrozen(); assertThat(userType.toString()).isEqualTo("frozen<" + keyspace + ".type_for_frozen_test>"); // The frozen flag is not set for result set definitions (the protocol does not provide // that information and it's not really useful in that situation). We always return false. ResultSet rs = session().execute("SELECT v FROM frozen_table WHERE k = 1"); assertThat(rs.getColumnDefinitions().getType(0)).isNotFrozen(); // Same thing for prepared statements PreparedStatement pst = session().prepare("SELECT v FROM frozen_table WHERE k = ?"); assertThat(pst.getVariables().getType(0)).isNotFrozen(); }
/** * Creates a new {@code BoundStatement} from the provided prepared statement. * * @param statement the prepared statement from which to create a {@code BoundStatement}. */ public BoundStatement(PreparedStatement statement) { this.statement = statement; this.wrapper = new DataWrapper(this, statement.getVariables().size()); for (int i = 0; i < wrapper.values.length; i++) { wrapper.values[i] = UNSET; } if (statement.getConsistencyLevel() != null) this.setConsistencyLevel(statement.getConsistencyLevel()); if (statement.getSerialConsistencyLevel() != null) this.setSerialConsistencyLevel(statement.getSerialConsistencyLevel()); if (statement.isTracing()) this.enableTracing(); if (statement.getRetryPolicy() != null) this.setRetryPolicy(statement.getRetryPolicy()); if (statement.getOutgoingPayload() != null) this.setOutgoingPayload(statement.getOutgoingPayload()); else // propagate incoming payload as outgoing payload, if no outgoing payload has been explicitly // set this.setOutgoingPayload(statement.getIncomingPayload()); this.codecRegistry = statement.getCodecRegistry(); if (statement.isIdempotent() != null) { this.setIdempotent(statement.isIdempotent()); } }
@Override public QueryBinder<ENTITY> setDate(String name, Date v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setDate(name, v); } } return this; }
@Override public QueryBinder<ENTITY> setFloat(String name, float v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setFloat(name, v); } } return this; }
@Override public QueryBinder<ENTITY> setBytesUnsafe(String name, ByteBuffer v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setBytesUnsafe(name, v); } } return this; }
@Override public QueryBinder<ENTITY> setLong(String name, long v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setLong(name, v); } } return this; }
@Override public QueryBinder<ENTITY> setDouble(String name, double v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setDouble(name, v); } } return this; }
@Override public QueryBinder<ENTITY> setDecimal(String name, BigDecimal v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setDecimal(name, v); } } return this; }
@Override public QueryBinder<ENTITY> setBool(String name, boolean v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setBool(name, v); } } return this; }
@Override public QueryBinder<ENTITY> setInt(String name, int v) { for (BoundStatement statement : statements.values()) { if (statement.preparedStatement().getVariables().contains(name)) { statement.setInt(name, v); } } return this; }