diff --git a/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDB.java b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDB.java index 01e738bf..f35be13a 100644 --- a/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDB.java +++ b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDB.java @@ -11,9 +11,7 @@ import io.stargate.sdk.data.NamespaceClient; import io.stargate.sdk.data.domain.CollectionDefinition; import io.stargate.sdk.data.domain.SimilarityMetric; -import io.stargate.sdk.http.RetryHttpClient; import io.stargate.sdk.http.ServiceHttp; -import io.stargate.sdk.http.domain.UserAgentChunk; import lombok.Getter; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; @@ -94,6 +92,8 @@ public AstraDB(@NonNull String token, @NonNull String apiEndpoint, @NonNull Stri jsonDeploy.addDatacenterServices("default", new ServiceHttp("json", apiEndpoint, apiEndpoint)); this.apiClient = new DataApiClient(jsonDeploy); this.nsClient = apiClient.namespace(keyspace); + String version = AstraDB.class.getPackage().getImplementationVersion(); + AstraDBAdmin.setCallerName(AstraDBAdmin.USER_AGENT, (null != version) ? version : "dev"); } /** @@ -158,6 +158,7 @@ public AstraDB(@NonNull String token, @NonNull UUID databaseId, String region, @ .findById(databaseId.toString()) .orElseThrow(() -> new DatabaseNotFoundException(databaseId.toString())); + // If no region is provided, we use the default region of the DB if (region == null) region = db.getInfo().getRegion(); ServiceDeployment jsonDeploy = new ServiceDeployment<>(); @@ -181,21 +182,8 @@ public AstraDB(@NonNull String token, @NonNull UUID databaseId, String region, @ this.nsClient = apiClient.namespace(keyspace); } - // -------------------------- - // --- User Agent ---- - // -------------------------- - /** - * Allow user to set the client name - * - * @param clientName - * client name - * @param version - * client version - */ - public void setClientName(String clientName, String version) { - RetryHttpClient.getInstance().pushUserAgent(new UserAgentChunk(clientName, version)); - } + // -------------------------- // --- Find, FindAll ---- @@ -433,7 +421,7 @@ public void changeKeyspace(String keyspace) { * @return * storeName client */ - public AstraDBCollection collection(@NonNull String storeName) { + public AstraDBCollection getCollection(@NonNull String storeName) { return new AstraDBCollection(nsClient.collection(storeName)); } @@ -449,7 +437,7 @@ public AstraDBCollection collection(@NonNull String storeName) { * @param * type of the bean in use */ - public AstraDBRepository collectionRepository(@NonNull String storeName, Class clazz) { + public AstraDBRepository getCollection(@NonNull String storeName, Class clazz) { return new AstraDBRepository<>(nsClient.collectionRepository(storeName, clazz)); } diff --git a/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBAdmin.java b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBAdmin.java index 5c1e3f1f..4ac26c5a 100644 --- a/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBAdmin.java +++ b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBAdmin.java @@ -12,6 +12,7 @@ import com.dtsx.astra.sdk.utils.AstraEnvironment; import com.dtsx.astra.sdk.utils.AstraRc; import io.stargate.sdk.data.DataApiClient; +import io.stargate.sdk.http.RetryHttpClient; import lombok.Getter; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; @@ -38,6 +39,8 @@ @Slf4j public class AstraDBAdmin { + public static final String USER_AGENT = "astra-db-java"; + /** Default timeout for initiating connection. */ public static final int CONNECT_TIMEOUT_SECONDS = 20; @@ -114,6 +117,32 @@ public AstraDBAdmin(String token, AstraEnvironment env) { .version(Version.HTTP_2) .connectTimeout(Duration.ofSeconds(CONNECT_TIMEOUT_SECONDS)) .build(); + String version = AstraDBAdmin.class.getPackage().getImplementationVersion(); + AstraDBAdmin.setCallerName(AstraDBAdmin.USER_AGENT, (null != version) ? version : "dev"); + } + + // -------------------------- + // --- User Agent ---- + // -------------------------- + + /** + * Allow user to set the client name + * + * @param callerName + * client name + * @param callerVersion + * client version + */ + public static void setCallerName(String callerName, String callerVersion) { + RetryHttpClient.getInstance().pushUserAgent(callerName, callerVersion); + } + + // -------------------- + // -- Watch --- + // -------------------- + + public void watch() { + throw new UnsupportedOperationException("As we connect to a HTTP apis without hooks, no watch is possible."); } // -------------------- @@ -172,13 +201,23 @@ public void deleteKeyspace(UUID databaseId, String keyspaceName) { // -- Databases --- // -------------------- + /** + * List available database names. + * + * @return + * list of database names + */ + public List listDatabaseNames() { + return listDatabases().map(db -> db.getInfo().getName()).collect(Collectors.toList()); + } + /** * List active databases with vector enabled in current organization. * * @return * active databases list */ - public Stream findAllDatabases() { + public Stream listDatabases() { return devopsDbClient .findAllNonTerminated() .filter(db -> db.getInfo().getDbType() != null); @@ -211,7 +250,7 @@ public UUID createDatabase(@NonNull String name) { * database identifier */ public UUID createDatabase(@NonNull String name, @NonNull CloudProviderType cloud, @NonNull String cloudRegion) { - Optional optDb = findDatabaseByName(name).findFirst(); + Optional optDb = getDatabaseInformations(name).findFirst(); // Handling all cases for the user if (optDb.isPresent()) { Database db = optDb.get(); @@ -255,8 +294,8 @@ public UUID createDatabase(@NonNull String name, @NonNull CloudProviderType clou * @return * if the db has been deleted */ - public boolean deleteDatabaseByName(@NonNull String name) { - Optional opDb = findDatabaseByName(name).findFirst(); + public boolean dropDatabase(@NonNull String name) { + Optional opDb = getDatabaseInformations(name).findFirst(); opDb.ifPresent(db -> devopsDbClient.database(db.getId()).delete()); return opDb.isPresent(); } @@ -269,8 +308,8 @@ public boolean deleteDatabaseByName(@NonNull String name) { * @return * if the db has been deleted */ - public boolean deleteDatabaseById(@NonNull UUID databaseId) { - if (findDatabaseById(databaseId).isPresent()) { + public boolean dropDatabase(@NonNull UUID databaseId) { + if (getDatabaseInformations(databaseId).isPresent()) { devopsDbClient.database(databaseId.toString()).delete(); return true; } @@ -285,9 +324,9 @@ public boolean deleteDatabaseById(@NonNull UUID databaseId) { * @return * list of db matching the criteria */ - public Stream findDatabaseByName(String name) { + public Stream getDatabaseInformations(String name) { Assert.hasLength(name, "Database name"); - return findAllDatabases().filter(db->name.equals(db.getInfo().getName())); + return listDatabases().filter(db->name.equals(db.getInfo().getName())); } /** @@ -299,7 +338,7 @@ public Stream findDatabaseByName(String name) { * if the database exists */ public boolean isDatabaseExists(String name) { - return findDatabaseByName(name).findFirst().isPresent(); + return getDatabaseInformations(name).findFirst().isPresent(); } /** @@ -310,7 +349,7 @@ public boolean isDatabaseExists(String name) { * @return * list of db matching the criteria */ - public Optional findDatabaseById(@NonNull UUID id) { + public Optional getDatabaseInformations(@NonNull UUID id) { Assert.notNull(id, "Database identifier should not be null"); return devopsDbClient.findById(id.toString()); } @@ -323,15 +362,15 @@ public Optional findDatabaseById(@NonNull UUID id) { * @return * database client */ - public AstraDB database(@NonNull String databaseName) { - List dbs = findDatabaseByName(databaseName).collect(Collectors.toList()); + public AstraDB getDatabase(@NonNull String databaseName) { + List dbs = getDatabaseInformations(databaseName).collect(Collectors.toList()); if (dbs.isEmpty()) { throw new DatabaseNotFoundException(databaseName); } if (dbs.size() > 1) { throw new IllegalStateException("More than one database exists with the same name, use id."); } - return database(UUID.fromString(dbs.get(0).getId())); + return getDatabase(UUID.fromString(dbs.get(0).getId())); } // -------------------- @@ -346,7 +385,7 @@ public AstraDB database(@NonNull String databaseName) { * @return * database client */ - public AstraDB database(UUID databaseId) { + public AstraDB getDatabase(UUID databaseId) { return new AstraDB(token, databaseId, null, env, AstraDBAdmin.DEFAULT_KEYSPACE); } @@ -423,7 +462,7 @@ private void resumeDb(Database db) { * database client */ public DataApiClient getDataApiClient(@NonNull String databaseName) { - return database(databaseName).getApiClient(); + return getDatabase(databaseName).getApiClient(); } /** @@ -435,7 +474,7 @@ public DataApiClient getDataApiClient(@NonNull String databaseName) { * database client */ public DataApiClient getDataApiClient(@NonNull UUID databaseId) { - return database(databaseId).getApiClient(); + return getDatabase(databaseId).getApiClient(); } /** diff --git a/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBClients.java b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBClients.java new file mode 100644 index 00000000..d7392020 --- /dev/null +++ b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBClients.java @@ -0,0 +1,10 @@ +package com.dtsx.astra.sdk; + +public class AstraDBClients { + + public static AstraDBAdmin create(String token) { + return new AstraDBAdmin(token); + } + + +} diff --git a/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBCollection.java b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBCollection.java index 84bcbb22..ba9f5f2b 100644 --- a/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBCollection.java +++ b/astra-db-client/src/main/java/com/dtsx/astra/sdk/AstraDBCollection.java @@ -47,6 +47,16 @@ public class AstraDBCollection { this.collectionClient = collectionClient; } + /** + * Access the name of the collection. + * + * @return + * collection name + */ + public String getName() { + return collectionClient.getCollection(); + } + // -------------------------- // --- Insert One ---- // -------------------------- diff --git a/astra-db-client/src/main/java/com/dtsx/astra/sdk/cassio/ClusteredRecord.java b/astra-db-client/src/main/java/com/dtsx/astra/sdk/cassio/ClusteredRecord.java new file mode 100644 index 00000000..852e7326 --- /dev/null +++ b/astra-db-client/src/main/java/com/dtsx/astra/sdk/cassio/ClusteredRecord.java @@ -0,0 +1,30 @@ +package com.dtsx.astra.sdk.cassio; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +/** + * Default Constructor. + */ +@Data +@AllArgsConstructor +public class ClusteredRecord { + + /** Partition id. */ + String partitionId; + + /** Row identifier. */ + UUID rowId; + + /** Text body. */ + String body; + + /** + * Record for a clustered table. + */ + public ClusteredRecord() {} + +} \ No newline at end of file diff --git a/astra-db-client/src/main/java/com/dtsx/astra/sdk/cassio/ClusteredTable.java b/astra-db-client/src/main/java/com/dtsx/astra/sdk/cassio/ClusteredTable.java new file mode 100644 index 00000000..d5ee5bcc --- /dev/null +++ b/astra-db-client/src/main/java/com/dtsx/astra/sdk/cassio/ClusteredTable.java @@ -0,0 +1,193 @@ +package com.dtsx.astra.sdk.cassio; + +import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.cql.BatchStatement; +import com.datastax.oss.driver.api.core.cql.BatchStatementBuilder; +import com.datastax.oss.driver.api.core.cql.BatchType; +import com.datastax.oss.driver.api.core.cql.PreparedStatement; +import com.datastax.oss.driver.api.core.cql.Row; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * Table representing persistence for LangChain operations + */ +@Slf4j +public class ClusteredTable extends AbstractCassandraTable { + + /** + * Prepared statements + */ + private PreparedStatement findPartitionStatement; + private PreparedStatement deletePartitionStatement; + private PreparedStatement deleteRowStatement; + private PreparedStatement insertRowStatement; + private PreparedStatement findRowStatement; + + /** + * Constructor with the mandatory parameters. + * + * @param session + * cassandra Session + * @param keyspaceName + * keyspace name + * @param tableName + * table name + */ + public ClusteredTable(@NonNull CqlSession session, @NonNull String keyspaceName, @NonNull String tableName) { + super(session, keyspaceName, tableName); + } + + /** + * Prepare statements on first request. + */ + private synchronized void prepareStatements() { + if (findPartitionStatement == null) { + findPartitionStatement = cqlSession.prepare( + "select * from " + keyspaceName + "." + tableName + + " where " + PARTITION_ID + " = ? "); + deletePartitionStatement = cqlSession.prepare( + "delete from " + keyspaceName + "." + tableName + + " where " + PARTITION_ID + " = ? "); + findRowStatement = cqlSession.prepare( + "select * from " + keyspaceName + "." + tableName + + " where " + PARTITION_ID + " = ? " + + " and " + ROW_ID + " = ? "); + deleteRowStatement = cqlSession.prepare( + "delete from " + keyspaceName + "." + tableName + + " where " + PARTITION_ID + " = ? " + + " and " + ROW_ID + " = ? "); + insertRowStatement = cqlSession.prepare( + "insert into " + keyspaceName + "." + tableName + + " (" + PARTITION_ID + ", " + ROW_ID + ", " + BODY_BLOB + ") " + + " values (?, ?, ?)"); + } + } + + /** {@inheritDoc} */ + @Override + public void create() { + cqlSession.execute("CREATE TABLE IF NOT EXISTS " + keyspaceName + "." + tableName + " (" + + PARTITION_ID + " text, " + + ROW_ID + " timeuuid, " + + BODY_BLOB + " text, " + + "PRIMARY KEY ((" + PARTITION_ID + "), " + ROW_ID + ")) " + + "WITH CLUSTERING ORDER BY (" + ROW_ID + " DESC)"); + log.info("+ Table '{}' has been created (if needed).", tableName); + } + + /** {@inheritDoc} */ + @Override + public void put(@NonNull ClusteredRecord row) { + prepareStatements(); + cqlSession.execute(insertRowStatement.bind(row.getPartitionId(), row.getRowId(), row.getBody())); + } + + /** {@inheritDoc} */ + @Override + public ClusteredRecord mapRow(@NonNull Row row) { + return new ClusteredRecord( + row.getString(PARTITION_ID), + row.getUuid(ROW_ID), + row.getString(BODY_BLOB)); + } + + /** + * Find a partition. + * + * @param partitionDd + * partition id + * @return + * list of rows + */ + public List findPartition(@NonNull String partitionDd) { + prepareStatements(); + return cqlSession.execute(findPartitionStatement.bind(partitionDd)) + .all().stream() + .map(this::mapRow) + .collect(Collectors.toList()); + } + + /** + * Update the history in one go. + * + * @param rows + * current rows. + */ + public void upsertPartition(List rows) { + prepareStatements(); + if (rows != null && !rows.isEmpty()) { + BatchStatementBuilder batch = BatchStatement.builder(BatchType.LOGGED); + String currentPartitionId = null; + for (ClusteredRecord row : rows) { + if (currentPartitionId != null && !currentPartitionId.equals(row.getPartitionId())) { + log.warn("Not all rows are part of the same partition"); + } + currentPartitionId = row.getPartitionId(); + batch.addStatement(insertRowStatement.bind(row.getPartitionId(), row.getRowId(), row.getBody())); + } + cqlSession.execute(batch.build()); + } + } + + /** + * Find a row by its id. + * @param partition + * partition id + * @param rowId + * row id + * @return + * record if exists + */ + public Optional findById(String partition, UUID rowId) { + prepareStatements(); + return Optional.ofNullable(cqlSession + .execute(findRowStatement.bind(partition, rowId)) + .one()).map(this::mapRow); + } + + /** + * Delete Partition. + * + * @param partitionId + * delete the whole partition + */ + public void deletePartition(@NonNull String partitionId) { + prepareStatements(); + cqlSession.execute(deletePartitionStatement.bind(partitionId)); + } + + /** + * Delete one row. + * + * @param partitionId + * current session + * @param rowId + * message id + */ + public void delete(@NonNull String partitionId, @NonNull UUID rowId) { + prepareStatements(); + cqlSession.execute(deleteRowStatement.bind(partitionId, rowId)); + } + + /** + * Insert Row. + * + * @param partitionId + * partition id + * @param rowId + * rowId + * @param bodyBlob + * body + */ + public void insert(@NonNull String partitionId, @NonNull UUID rowId, @NonNull String bodyBlob) { + prepareStatements(); + cqlSession.execute(insertRowStatement.bind(partitionId,rowId, bodyBlob)); + } + +} diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/AstraDBReworkTest.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/AstraDBReworkTest.java new file mode 100644 index 00000000..fab719f9 --- /dev/null +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/AstraDBReworkTest.java @@ -0,0 +1,18 @@ +package com.dtsx.astra.sdk; + +import org.junit.jupiter.api.Test; + +public class AstraDBReworkTest { + + @Test + public void testReword() { + AstraDBAdmin client = AstraDBClients.create("token"); + AstraDB db = client.getDatabase("sample_database"); + + AstraDB db1 = new AstraDB("apiEnpoint", "token"); + AstraDBCollection collection = db.getCollection("sample_collection"); + + + //collection.find().all().forEach(System.out::println); + } +} diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/AstraDBTestSuiteIT.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/AstraDBTestSuiteIT.java index 5784b2df..37cd9208 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/AstraDBTestSuiteIT.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/AstraDBTestSuiteIT.java @@ -2,6 +2,7 @@ import com.dtsx.astra.sdk.db.domain.CloudProviderType; import com.dtsx.astra.sdk.db.domain.Database; +import com.dtsx.astra.sdk.utils.ApiLocator; import com.dtsx.astra.sdk.utils.AstraEnvironment; import com.fasterxml.jackson.annotation.JsonProperty; import io.stargate.sdk.data.domain.CollectionDefinition; @@ -13,9 +14,9 @@ import io.stargate.sdk.data.domain.SimilarityMetric; import io.stargate.sdk.data.domain.odm.Document; import io.stargate.sdk.data.domain.odm.DocumentResult; -import io.stargate.sdk.data.domain.query.DeleteQuery; import io.stargate.sdk.data.domain.query.Filter; import io.stargate.sdk.data.domain.query.SelectQuery; +import io.stargate.sdk.data.domain.query.UpdateQuery; import io.stargate.sdk.data.exception.DataApiDocumentAlreadyExistException; import io.stargate.sdk.data.exception.DataApiException; import io.stargate.sdk.data.exception.DataApiInvalidArgumentException; @@ -63,7 +64,7 @@ public class AstraDBTestSuiteIT { /** * Test Constants */ - public static final String TEST_DBNAME = "test_java_astra_db_client"; + public static final String TEST_DBNAME = "astra_db_client"; static final String TEST_COLLECTION_NAME = "collection_simple"; static final String TEST_COLLECTION_VECTOR = "collection_vector"; static final String TEST_COLLECTION_DENY = "collection_deny"; @@ -101,80 +102,73 @@ static class Product { private Double price; } - private static void setupTestSuiteForDevelopment() { - targetEnvironment = AstraEnvironment.DEV; - astraToken = "AstraCS:ZiWfNzYJtUGszRuGyyTjFIXU:2c5a21a4623c6ee688d4bca4b8e55a269aa3ee864fcd16b26b7f9a82ca57b999"; - //.orElseThrow(() -> new IllegalArgumentException("ASTRA_DB_APPLICATION_TOKEN_DEV is not set")); - targetCloud = CloudProviderType.GCP; - targetRegion = "europe-west4"; - log.info("Environment Setup for Development"); - } + // SELECT WHERE TO RUN TESTS + static boolean DEV = false; - private static void setupTestSuiteForProduction() { - log.info("Environment Setup for PRODUCTION"); - targetEnvironment = AstraEnvironment.PROD; - astraToken = Utils.readEnvVariable("ASTRA_DB_APPLICATION_TOKEN") - .orElseThrow(() -> new IllegalArgumentException("ASTRA_DB_APPLICATION_TOKEN is not set")); - targetCloud = CloudProviderType.GCP; - targetRegion = "us-east1"; - } + // ------------------------------------- + // ------- INITIALIZATION -------------- + // ------------------------------------- @BeforeAll @DisplayName("00. Connect to Astra") public static void setupAndConnectToAstra() { - // Given - setupTestSuiteForDevelopment(); - //setupTestSuiteForProduction(); - Assertions.assertNotNull(astraToken); - Assertions.assertNotNull(targetEnvironment); + if (DEV) { + targetEnvironment = AstraEnvironment.DEV; + astraToken = "AstraCS:ZiWfNzYJtUGszRuGyyTjFIXU:2c5a21a4623c6ee688d4bca4b8e55a269aa3ee864fcd16b26b7f9a82ca57b999"; + targetCloud = CloudProviderType.GCP; + targetRegion = "europe-west4"; + } else { + targetEnvironment = AstraEnvironment.PROD; + astraToken = Utils.readEnvVariable("ASTRA_DB_APPLICATION_TOKEN").get(); + targetCloud = CloudProviderType.GCP; + targetRegion = "us-east1"; + } // When astraDbAdmin = new AstraDBAdmin(astraToken, targetEnvironment); // When Assertions.assertNotNull(astraDbAdmin.getToken()); } - // ------------------------------------ - // ----------- Databases -------------- - // ------------------------------------ - @Test @Order(1) - @DisplayName("01. Create a database") public void shouldCreateDatabase() { // Given Assertions.assertNotNull(targetCloud); Assertions.assertNotNull(targetRegion); Assertions.assertNotNull(astraDbAdmin.getDevopsApiClient()); - // When databaseId = astraDbAdmin.createDatabase(TEST_DBNAME, targetCloud, targetRegion); // Then Assertions.assertNotNull(databaseId); Assertions.assertTrue(astraDbAdmin.isDatabaseExists(TEST_DBNAME)); + log.info("Api Endpoint {}", ApiLocator.getApiJsonEndpoint(targetEnvironment, databaseId.toString(), targetRegion)); } + // ------------------------------------- + // ----------- CONNECTION -------------- + // ------------------------------------- + @Test @Order(2) - @DisplayName("02. Connect to a database") public void shouldConnectToDatabase() { if (databaseId == null) shouldCreateDatabase(); - - // ---- Connect From Admin ---- - // Given Assertions.assertNotNull(databaseId); Assertions.assertTrue(astraDbAdmin.isDatabaseExists(TEST_DBNAME)); Assertions.assertNotNull(astraDbAdmin.getDataApiClient(databaseId)); // When - astraDb = astraDbAdmin.database(databaseId); + astraDb = astraDbAdmin.getDatabase(databaseId); Assertions.assertNotNull(astraDb.getNamespaceClient()); Assertions.assertNotNull(astraDb); // When - astraDb = astraDbAdmin.database(TEST_DBNAME); + astraDb = astraDbAdmin.getDatabase(TEST_DBNAME); Assertions.assertNotNull(astraDb); + } - // ---- Connect with constructor ---- - + @Test + @Order(3) + public void shouldConnectToDatabaseWithEndpoint() { + if (databaseId == null) shouldCreateDatabase(); // Given Assertions.assertNotNull(astraDb.getApiEndpoint()); Assertions.assertNotNull(astraDbAdmin.getToken()); @@ -184,6 +178,11 @@ public void shouldConnectToDatabase() { // Then Assertions.assertNotNull(astraDb2); Assertions.assertNotNull(astraDb2.findAllCollections()); + } + + @Test + @Order(4) + public void shouldConnectToDatabaseWithEndpointAndKeyspace() { // When initializing with a keyspace AstraDB astraDb3 = new AstraDB(astraDbAdmin.getToken(), astraDb.getApiEndpoint(), AstraDBAdmin.DEFAULT_KEYSPACE); // Then @@ -193,23 +192,30 @@ public void shouldConnectToDatabase() { Assertions.assertThrows(DataApiNamespaceNotFoundException.class, () -> new AstraDB(astraDbAdmin.getToken(), astraDb.getApiEndpoint(), "invalid_keyspace")); } + // ------------------------------------------ + // ----------- WORKING WITH DB -------------- + // ------------------------------------------ + @Test - @Order(3) - @DisplayName("03. Find a single database") - public void shouldFindSingleDatabase() { + @Order(5) + public void shouldFindDatabaseById() { if (databaseId == null) shouldCreateDatabase(); - // When - Optional opt = astraDbAdmin.findDatabaseById(databaseId); + Optional opt = astraDbAdmin.getDatabaseInformations(databaseId); // Then Assertions.assertNotNull(opt); Assertions.assertTrue(opt.isPresent()); Assertions.assertEquals(TEST_DBNAME, opt.get().getInfo().getName()); + } + @Test + @Order(6) + public void shouldFindDatabaseByName() { + if (databaseId == null) shouldCreateDatabase(); // Given Assertions.assertTrue(astraDbAdmin.isDatabaseExists(TEST_DBNAME)); // When - Stream dbs = astraDbAdmin.findDatabaseByName(TEST_DBNAME); + Stream dbs = astraDbAdmin.getDatabaseInformations(TEST_DBNAME); // Then Assertions.assertNotNull(dbs); dbs.findFirst().ifPresent(db -> { @@ -219,43 +225,47 @@ public void shouldFindSingleDatabase() { } @Test - @Order(4) + @Order(7) @DisplayName("04. Find all databases") public void shouldFindAllDatabases() { // Given Assertions.assertTrue(astraDbAdmin.isDatabaseExists(TEST_DBNAME)); // When Assertions.assertTrue(astraDbAdmin - .findAllDatabases() + .listDatabases() .anyMatch(db -> db.getInfo().getName().equals(TEST_DBNAME))); } @Test - @Order(5) - @DisplayName("05. Delete a Database by name") - @Disabled("This test is disabled because it is pretty lone") - public void shouldDeleteDatabase() throws InterruptedException { - String dbName = "test_delete_db"; + @Order(8) + @Disabled("slow") + public void shouldDeleteDatabaseByName() throws InterruptedException { + String dbName = "test_delete_db_by_name"; // Given Assertions.assertFalse(astraDbAdmin.isDatabaseExists(dbName)); // When UUID dbId = astraDbAdmin.createDatabase(dbName, targetCloud, targetRegion); Assertions.assertTrue(astraDbAdmin.isDatabaseExists(dbName)); // When - boolean isDeleted = astraDbAdmin.deleteDatabaseByName(dbName); + boolean isDeleted = astraDbAdmin.dropDatabase(dbName); // Then Thread.sleep(5000); Assertions.assertTrue(isDeleted); - Database db = astraDbAdmin - .findDatabaseById(dbId) - .orElseThrow(() -> new IllegalStateException("Should have found a database")); - Assertions.assertEquals("TERMINATING", db.getStatus().name()); - - UUID tmpDbId = astraDbAdmin.createDatabase("tmp_db_2", targetCloud, targetRegion); - Assertions.assertTrue(astraDbAdmin.isDatabaseExists("tmp_db_2")); - Assertions.assertTrue(astraDbAdmin.deleteDatabaseById(tmpDbId)); - Thread.sleep(5000); + } + @Test + @Order(8) + @Disabled("slow") + public void shouldDeleteDatabaseById() throws InterruptedException { + String dbName = "test_delete_db_by_id"; + // Given + Assertions.assertFalse(astraDbAdmin.isDatabaseExists(dbName)); + // When + UUID tmpDbId = astraDbAdmin.createDatabase(dbName, targetCloud, targetRegion); + Assertions.assertTrue(astraDbAdmin.isDatabaseExists(dbName)); + boolean isDeleted = astraDbAdmin.dropDatabase(tmpDbId); + Thread.sleep(5000); + Assertions.assertTrue(isDeleted); } // ------------------------------------ @@ -268,8 +278,8 @@ public void shouldDeleteDatabase() throws InterruptedException { public void shouldCreateCollectionSimple() { if (astraDb == null) shouldConnectToDatabase(); // Given - //astraDb.deleteCollection(TEST_COLLECTION_NAME); - //Assertions.assertFalse(astraDb.isCollectionExists(TEST_COLLECTION_NAME)); + astraDb.deleteCollection(TEST_COLLECTION_NAME); + Assertions.assertFalse(astraDb.isCollectionExists(TEST_COLLECTION_NAME)); // When collectionSimple = astraDb.createCollection(TEST_COLLECTION_NAME); // Then @@ -656,6 +666,31 @@ public void shouldUpsertOneWithJson() } + @Test + @Order(19) + @DisplayName("19. UpdateOne with a jsonDocument") + public void shouldUpdate() + throws ExecutionException, InterruptedException { + initializeCollectionSimple(); + + JsonDocument doc1 = new JsonDocument().id("1").put("a", "a").put("b", "c"); + JsonDocument doc2 = new JsonDocument().id("2").put("a", "a").put("b", "b"); + collectionSimple.insertMany(doc1, doc2); + + /* + collectionSimple.updateOne(UpdateQuery.builder() + .updateSet("a", "b") + .filter(f) + .withUpsert() + .build());*/ + + collectionSimple.updateMany(UpdateQuery.builder() + .updateSet("a", "b") + .filter(new Filter().where("a").isEqualsTo("a")) + .withUpsert() + .build()); + } + @Test @Order(19) @DisplayName("19. UpsertOne with a jsonDocument") @@ -828,18 +863,24 @@ public void shouldManyJsonDocuments() { @DisplayName("24. InsertMany too many items") public void shouldInsertTooMany() { initializeCollectionSimple(); - Assertions.assertThrows(DataApiInvalidArgumentException.class, - () -> collectionSimple.insertMany( List.of( - player1, player2, player3, player4, player5, player6, - player7, player8, player9, player10,player11, player12, - player13, player14, player15, player16, player17, player18, - player19, player20, player21, player22, player23, player24))); + //Assertions.assertThrows(DataApiInvalidArgumentException.class, + // () -> collectionSimple.insertMany( List.of( + // player1, player2, player3, player4, player5, player6, + // player7, player8, player9, player10,player11, player12, + // player13, player14, player15, player16, player17, player18, + // player19, player20, player21, player22, player23, player24))); + try { + collectionSimple.insertMany( List.of( + player1, player2, player3, player4, player5, player6, + player7, player8, player9, player10,player11, player12, + player13, player14, player15, player16, player17, player18, + player19, player20, player21, player22, player23, player24)); + } catch(DataApiInvalidArgumentException dai) { + dai.printStackTrace();; + } } - - - @Test @Order(25) @DisplayName("25. InsertMany order true, no replace") @@ -995,13 +1036,13 @@ public void shouldInsertManyChunkedParallel() { collectionSimple.countDocuments(); long top = System.currentTimeMillis(); - DeleteQuery query = DeleteQuery.builder() - .where("product_price", GREATER_THAN, 100) - .build(); + //DeleteQuery query = DeleteQuery.builder() + // .where("product_price", GREATER_THAN, 100) + // .build(); //collectionSimple.deleteMany(query); - collectionSimple.deleteManyChunked(query, 5); - System.out.println("Total time " + (System.currentTimeMillis() - top)); - collectionSimple.countDocuments(); + //collectionSimple.deleteManyChunked(query, 5); + //System.out.println("Total time " + (System.currentTimeMillis() - top)); + //collectionSimple.countDocuments(); /* collectionSimple.insertManyChunkedASync(documents, 20, 20).thenAccept(res -> { @@ -1340,11 +1381,51 @@ public void shouldCreateCollectionWithDenyOptions() { .build())); } + @Test + public void shouldDoSemanticSearch() { + if (astraDb == null) shouldConnectToDatabase(); + initializeCollectionVector(); + + // When + // Insert vectors + collectionVector.insertOne( + new JsonDocument() + .id("doc1") // generated if not set + .vector(new float[]{1f, 0f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}) + .put("product_name", "HealthyFresh - Beef raw dog food") + .put("product_price", 12.99)); + collectionVector.insertOne( + new JsonDocument() + .id("doc2") + .vector(new float[]{1f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}) + .put("product_name", "HealthyFresh - Chicken raw dog food") + .put("product_price", 9.99)); + collectionVector.insertOne( + new JsonDocument() + .id("doc3") + .vector(new float[]{1f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}) + .data(Map.of("product_name", "HealthyFresh - Chicken raw dog food"))); + collectionVector.insertOne( + new JsonDocument() + .id("doc4") + .vector(new float[]{1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}) + .put("product_name", "HealthyFresh - Chicken raw dog food") + .put("product_price", 9.99)); + + // Perform a similarity search + float[] embeddings = new float[] {1f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}; + //Filter metadataFilter = new Filter().where("product_price").isEqualsTo(9.99); + int maxRecord = 10; + long top = System.currentTimeMillis(); + Stream resultsSet = collectionVector.findVector(embeddings, null, maxRecord); + System.out.println(System.currentTimeMillis() - top); + } + @Test @Order(42) @DisplayName("42. Create Collections (with allow)") public void shouldCreateCollectionWithAllowOptions() { - + if (astraDb == null) shouldConnectToDatabase(); // ---- TESTING WITH ALLOW ----- // When @@ -1399,7 +1480,7 @@ public void testFindInArray() { public void shouldInsertRecords() { initializeCollectionVector(); - productRepositoryVector = astraDb.collectionRepository(TEST_COLLECTION_VECTOR, Product.class); + productRepositoryVector = astraDb.getCollection(TEST_COLLECTION_VECTOR, Product.class); productRepositoryVector.insert(new Document<>( "product1", new Product("something Good", 9.99), @@ -1420,7 +1501,7 @@ public void shouldInsertRecords() { @Order(51) @DisplayName("51. Insert with CollectionRepository") public void shouldInsertWithSimpleCollectionObjectMapping() { - productRepositorySimple = astraDb.collectionRepository(TEST_COLLECTION_NAME, Product.class); + productRepositorySimple = astraDb.getCollection(TEST_COLLECTION_NAME, Product.class); Assertions.assertNotNull(productRepositorySimple); productRepositorySimple.save(new Document().id("p1").data(new Product("Pupper Sausage Beef dog Treats", 9.99))); productRepositorySimple.save(new Document().id("p2").data(new Product("Dog Ring Chew Toy", 10.99))); @@ -1433,7 +1514,7 @@ public void shouldInsertWithSimpleCollectionObjectMapping() { private void initializeCollectionSimple() { if (astraDb == null) { databaseId = astraDbAdmin.createDatabase(TEST_DBNAME, targetCloud, targetRegion); - astraDb = astraDbAdmin.database(databaseId); + astraDb = astraDbAdmin.getDatabase(databaseId); } if (collectionSimple == null) { collectionSimple = astraDb.createCollection(TEST_COLLECTION_NAME); @@ -1444,7 +1525,7 @@ private void initializeCollectionSimple() { private void initializeCollectionVector() { if (astraDb == null) { databaseId = astraDbAdmin.createDatabase(TEST_DBNAME, targetCloud, targetRegion); - astraDb = astraDbAdmin.database(databaseId); + astraDb = astraDbAdmin.getDatabase(databaseId); } if (collectionVector == null) { collectionVector = astraDb.createCollection(TEST_COLLECTION_VECTOR, 14); diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/BreakAstraTest.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/BreakAstraTest.java new file mode 100644 index 00000000..0cbecff3 --- /dev/null +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/BreakAstraTest.java @@ -0,0 +1,54 @@ +package com.dtsx.astra.sdk; + +import com.dtsx.astra.sdk.db.domain.CloudProviderType; +import com.dtsx.astra.sdk.utils.AstraEnvironment; +import io.stargate.sdk.data.domain.odm.Document; +import io.stargate.sdk.utils.Utils; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.UUID; + +public class BreakAstraTest { + + public static final String TEST_DBNAME = "astra_db_client"; + + static CloudProviderType targetCloud = AstraDBAdmin.FREE_TIER_CLOUD; + static String targetRegion = AstraDBAdmin.FREE_TIER_CLOUD_REGION; + static String astraToken = Utils.readEnvVariable("ASTRA_DB_APPLICATION_TOKEN").get(); + + static AstraDBAdmin astraDbAdmin; + static AstraDB astraDb; + static UUID databaseId; + static AstraDBCollection collectionSimple; + + @Test + public void testQueryBust() { + astraDbAdmin = new AstraDBAdmin(astraToken, AstraEnvironment.PROD); + databaseId = astraDbAdmin.createDatabase(TEST_DBNAME, targetCloud, targetRegion); + astraDb = astraDbAdmin.getDatabase(databaseId); + collectionSimple = astraDb.createCollection("collection_vector", 1536); + collectionSimple.deleteAll(); + List> documents = new ArrayList<>(); + + // Create an instance of Random + Random random = new Random(); + int size = 1536; + float[] fakeEmbeddings = new float[size]; + for(int i = 0; i < size; i++) { + fakeEmbeddings[i] = random.nextFloat(); + } + + long start = System.currentTimeMillis(); + int nbDocs = 200000; + for (int i = 0; i < nbDocs; i++) { + documents.add(new Document() + .id(String.valueOf(i)) + .vector(fakeEmbeddings) + .data(new AstraDBTestSuiteIT.Product("Desc " + i, i * 1.0d))); + } + collectionSimple.insertManyChunked(documents, 20, 200); + } +} diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CassIOClusteredMetadataVectorTable.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CassIOClusteredMetadataVectorTable.java index 462fe1d3..5e94f025 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CassIOClusteredMetadataVectorTable.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CassIOClusteredMetadataVectorTable.java @@ -3,7 +3,6 @@ import com.datastax.oss.driver.api.core.CqlSession; import com.dtsx.astra.sdk.AstraDBAdmin; import com.dtsx.astra.sdk.cassio.AnnQuery; -import com.dtsx.astra.sdk.cassio.AnnResult; import com.dtsx.astra.sdk.cassio.CassIO; import com.dtsx.astra.sdk.cassio.ClusteredMetadataVectorRecord; import com.dtsx.astra.sdk.cassio.ClusteredMetadataVectorTable; @@ -14,7 +13,6 @@ import java.util.UUID; import static com.dtsx.astra.sdk.cassio.AbstractCassandraTable.PARTITION_ID; -import static com.dtsx.astra.sdk.utils.TestUtils.getAstraToken; public class CassIOClusteredMetadataVectorTable { public static void main(String[] args) { diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/Connecting.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/Connecting.java index 5ec44a38..0f047fba 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/Connecting.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/Connecting.java @@ -1,6 +1,7 @@ package com.dtsx.astra.sdk.documentation; import com.dtsx.astra.sdk.AstraDB; + import java.util.UUID; public class Connecting { diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CreateKeyspace.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CreateKeyspace.java index bbca88b8..bb1c6d57 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CreateKeyspace.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/CreateKeyspace.java @@ -1,9 +1,6 @@ package com.dtsx.astra.sdk.documentation; import com.dtsx.astra.sdk.AstraDBAdmin; -import com.dtsx.astra.sdk.db.domain.CloudProviderType; - -import java.util.UUID; public class CreateKeyspace { diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteDatabase.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteDatabase.java index 857afb99..8f3c1e1f 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteDatabase.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteDatabase.java @@ -9,10 +9,10 @@ public static void main(String[] args) { AstraDBAdmin client = new AstraDBAdmin("TOKEN"); // Delete an existing database - client.deleteDatabaseByName(""); + client.dropDatabase(""); // Delete an existing database by ID - client.deleteDatabaseById( + client.dropDatabase( UUID.fromString("")); } } diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteMany.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteMany.java index 5cabe611..bcbc8048 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteMany.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/DeleteMany.java @@ -4,8 +4,6 @@ import com.dtsx.astra.sdk.AstraDBCollection; import io.stargate.sdk.data.domain.query.DeleteQuery; import io.stargate.sdk.data.domain.query.DeleteResult; -import io.stargate.sdk.data.domain.query.Filter; -import io.stargate.sdk.http.domain.FilterOperator; import static io.stargate.sdk.http.domain.FilterOperator.EQUALS_TO; diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindAllDatabases.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindAllDatabases.java index 67747cc0..d4f1c220 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindAllDatabases.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindAllDatabases.java @@ -10,6 +10,6 @@ public static void main(String[] args) { boolean exists = client.isDatabaseExists(""); // List all available databases - Stream dbStream = client.findAllDatabases(); + Stream dbStream = client.listDatabases(); } } diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindById.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindById.java index 754f8fc9..f1eface9 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindById.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindById.java @@ -10,7 +10,7 @@ public class FindById { public static void main(String[] args) { AstraDB db = new AstraDB("TOKEN", "API_ENDPOINT"); - AstraDBCollection collection = db.collection("collection_vector1"); + AstraDBCollection collection = db.getCollection("collection_vector1"); // Fetch a document by ID and return it as JSON Optional res = collection.findById("doc1"); diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindByVector.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindByVector.java index 3d876c50..5d3bf8b9 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindByVector.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindByVector.java @@ -10,7 +10,7 @@ public class FindByVector { public static void main(String[] args) { AstraDB db = new AstraDB("TOKEN", "API_ENDPOINT"); - AstraDBCollection collection = db.collection("collection_vector1"); + AstraDBCollection collection = db.getCollection("collection_vector1"); // Fetch a row by vector and return JSON collection diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindDatabase.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindDatabase.java index 99ce5f66..30892663 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindDatabase.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindDatabase.java @@ -14,11 +14,11 @@ public static void main(String[] args) { boolean exists = client.isDatabaseExists(""); // Find a database by name (names may not be unique) - Stream dbStream = client.findDatabaseByName(""); + Stream dbStream = client.getDatabaseInformations(""); Optional dbByName = dbStream.findFirst(); // Find a database by ID Optional dbById = client - .findDatabaseById(UUID.fromString("")); + .getDatabaseInformations(UUID.fromString("")); } } diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindKeyspace.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindKeyspace.java index 6367c5f7..434cc87e 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindKeyspace.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindKeyspace.java @@ -1,7 +1,6 @@ package com.dtsx.astra.sdk.documentation; import com.dtsx.astra.sdk.AstraDB; -import com.dtsx.astra.sdk.AstraDBAdmin; public class FindKeyspace { diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindOne.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindOne.java index 1e2be6a0..7fc74bcf 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindOne.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/FindOne.java @@ -4,16 +4,8 @@ import com.dtsx.astra.sdk.AstraDBCollection; import io.stargate.sdk.data.domain.query.Filter; import io.stargate.sdk.data.domain.query.SelectQuery; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import static io.stargate.sdk.http.domain.FilterOperator.EQUALS_TO; -import static io.stargate.sdk.http.domain.FilterOperator.EXISTS; -import static io.stargate.sdk.http.domain.FilterOperator.GREATER_THAN; -import static io.stargate.sdk.http.domain.FilterOperator.GREATER_THAN_OR_EQUALS_TO; -import static io.stargate.sdk.http.domain.FilterOperator.LESS_THAN; public class FindOne { public static void main(String[] args) { diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/InsertOne.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/InsertOne.java index 01fc3d3e..e22d14cc 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/InsertOne.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/InsertOne.java @@ -11,7 +11,7 @@ public static void main(String[] args) { AstraDB db = new AstraDB("TOKEN", "API_ENDPOINT"); // Assumes a collection with a vector field of dimension 14 - AstraDBCollection collection = db.collection("collection_vector1"); + AstraDBCollection collection = db.getCollection("collection_vector1"); // You must delete any existing rows with the same IDs as the // rows you want to insert diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/ObjectMappingUpdateMany.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/ObjectMappingUpdateMany.java index f3419ef1..ed934457 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/ObjectMappingUpdateMany.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/ObjectMappingUpdateMany.java @@ -3,7 +3,6 @@ import com.dtsx.astra.sdk.AstraDB; import com.dtsx.astra.sdk.AstraDBRepository; import com.fasterxml.jackson.annotation.JsonProperty; -import dev.langchain4j.agent.tool.P; import io.stargate.sdk.data.domain.DocumentMutationResult; import io.stargate.sdk.data.domain.odm.Document; import java.util.List; diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStart.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStart.java index ee70f4c0..c78caaac 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStart.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStart.java @@ -47,6 +47,9 @@ public static void main(String[] args) { float[] embeddings = new float[] {1f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}; Filter metadataFilter = new Filter().where("product_price").isEqualsTo(9.99); int maxRecord = 10; + long top = System.currentTimeMillis(); Stream resultsSet = demoCollection.findVector(embeddings, metadataFilter, maxRecord); + System.out.println(System.currentTimeMillis() - top); + } } diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStartAA.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStartAA.java index 76bc431a..c3136ba4 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStartAA.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/QuickStartAA.java @@ -9,7 +9,6 @@ import io.stargate.sdk.data.domain.query.Filter; import java.util.List; -import java.util.Map; import java.util.stream.Stream; public class QuickStartAA { @@ -23,7 +22,7 @@ public static void main(String[] args) { astraDBAdmin.createDatabase("quickstart", CloudProviderType.GCP, "us-east-1"); // Accessing the database - AstraDB myDb = astraDBAdmin.database("quickstart"); + AstraDB myDb = astraDBAdmin.getDatabase("quickstart"); // Create a collection AstraDBCollection demoCollection = myDb.createCollection("demo",14); diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateMany.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateMany.java index f4259dfe..90928299 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateMany.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateMany.java @@ -9,7 +9,7 @@ public class UpdateMany { public static void main(String[] args) { AstraDB db = new AstraDB("TOKEN", "API_ENDPOINT"); - AstraDBCollection collection = db.collection("collection_vector1"); + AstraDBCollection collection = db.getCollection("collection_vector1"); // Update multiple documents based on a query collection.updateMany(UpdateQuery.builder() diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateOne.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateOne.java index 0a7274c6..41f4a92c 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateOne.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpdateOne.java @@ -10,7 +10,7 @@ public class UpdateOne { public static void main(String[] args) { AstraDB db = new AstraDB("TOKEN", "API_ENDPOINT"); - AstraDBCollection collection = db.collection("collection_vector1"); + AstraDBCollection collection = db.getCollection("collection_vector1"); // You must delete any existing rows with the same IDs as the // rows you want to insert diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpsertOne.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpsertOne.java index 59550e43..a70d23ec 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpsertOne.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/documentation/UpsertOne.java @@ -15,7 +15,7 @@ public static void main(String[] args) { AstraDB db = new AstraDB("TOKEN", "API_ENDPOINT"); // Assumes a collection with a vector field of dimension 14 - AstraDBCollection collection = db.collection("collection_vector1"); + AstraDBCollection collection = db.getCollection("collection_vector1"); // Insert rows defined by key/value JsonDocument doc1 = new JsonDocument() diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/AstraDBQuickStart.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/AstraDBQuickStart.java index 38b15cfb..c46bef61 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/AstraDBQuickStart.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/AstraDBQuickStart.java @@ -34,7 +34,7 @@ public void quickStartTest() { } // 2. Create a store (delete if exist) - AstraDB astraDB = astraDBAdmin.database(databaseName); + AstraDB astraDB = astraDBAdmin.getDatabase(databaseName); // 3. Insert data in the store astraDB.deleteCollection(collectionName); AstraDBCollection collection = astraDB.createCollection(collectionName, 14); @@ -73,7 +73,7 @@ public void quickStartTest() { // With ODM AstraDBRepository productRepository = - astraDB.collectionRepository(collectionName, Product.class); + astraDB.getCollection(collectionName, Product.class); // 3 fields: id, payload, vector productRepository.insert(new Document<>("doc5", diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientPhilosopherTest.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientPhilosopherTest.java index 2152eb87..7f8c6f58 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientPhilosopherTest.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientPhilosopherTest.java @@ -73,7 +73,7 @@ public static void setup() { @EnabledIfEnvironmentVariable(named = "ASTRA_DB_APPLICATION_TOKEN", matches = "Astra.*") public void shouldIngestCsv() { // Init the Store - AstraDB dbClient = new AstraDBAdmin().database(DBNAME_VECTOR_CLIENT); + AstraDB dbClient = new AstraDBAdmin().getDatabase(DBNAME_VECTOR_CLIENT); dbClient.deleteCollection(VECTOR_STORE_NAME); quoteRepository = dbClient.createCollection(VECTOR_STORE_NAME, 1536, Quote.class); log.info("store {} is created ", VECTOR_STORE_NAME); @@ -97,8 +97,8 @@ public void shouldIngestCsv() { public void shouldSimilaritySearch() { quoteRepository = new AstraDBAdmin() - .database(DBNAME_VECTOR_CLIENT) - .collectionRepository(VECTOR_STORE_NAME, Quote.class); + .getDatabase(DBNAME_VECTOR_CLIENT) + .getCollection(VECTOR_STORE_NAME, Quote.class); float[] embeddings = vectorize("We struggle all our life for nothing"); quoteRepository.findVector(embeddings,3) diff --git a/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientProductTest.java b/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientProductTest.java index e2394fef..630c47ce 100644 --- a/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientProductTest.java +++ b/astra-db-client/src/test/java/com/dtsx/astra/sdk/vector/VectorClientProductTest.java @@ -65,7 +65,7 @@ public static void setup() { @EnabledIfEnvironmentVariable(named = "ASTRA_DB_APPLICATION_TOKEN", matches = "Astra.*") public void shouldInsertStaticDocument() { // Recreating the store - AstraDB astraDB = new AstraDBAdmin().database(DBNAME_VECTOR_CLIENT); + AstraDB astraDB = new AstraDBAdmin().getDatabase(DBNAME_VECTOR_CLIENT); astraDB.deleteCollection(VECTOR_STORE_NAME); productRepository = astraDB.createCollection(VECTOR_STORE_NAME, 14, Product.class); log.info("store {} is created ", VECTOR_STORE_NAME); @@ -109,8 +109,8 @@ public void shouldInsertStaticDocument() { public void shouldSimilaritySearch() { productRepository = new AstraDBAdmin() - .database(DBNAME_VECTOR_CLIENT) - .collectionRepository(VECTOR_STORE_NAME, Product.class); + .getDatabase(DBNAME_VECTOR_CLIENT) + .getCollection(VECTOR_STORE_NAME, Product.class); float[] embeddings = new float[] {1f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}; for(DocumentResult result : productRepository.findVector(embeddings,null, 2)) { @@ -125,8 +125,8 @@ public void shouldSimilaritySearch() { @DisplayName("03. Search with Meta Data") public void shouldSimilaritySearchWithMetaData() { productRepository = new AstraDBAdmin() - .database(DBNAME_VECTOR_CLIENT) - .collectionRepository(VECTOR_STORE_NAME, Product.class); + .getDatabase(DBNAME_VECTOR_CLIENT) + .getCollection(VECTOR_STORE_NAME, Product.class); float[] embeddings = new float[] {1f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}; Filter metadataFilter = new Filter().where("product_price").isEqualsTo(9.99); @@ -145,8 +145,8 @@ public void shouldSimilaritySearchWithMetaData() { @DisplayName("04. Search with Meta Data") public void shouldSimilaritySearcAndNotReturnVector() { productRepository = new AstraDBAdmin() - .database(DBNAME_VECTOR_CLIENT) - .collectionRepository(VECTOR_STORE_NAME, Product.class); + .getDatabase(DBNAME_VECTOR_CLIENT) + .getCollection(VECTOR_STORE_NAME, Product.class); float[] embeddings = new float[] {1f, 1f, 1f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}; Filter metadataFilter = new Filter().where("product_price").isEqualsTo(9.99); diff --git a/astra-db-client/src/test/resources/logback-test.xml b/astra-db-client/src/test/resources/logback-test.xml index 39f21d5e..4d383586 100644 --- a/astra-db-client/src/test/resources/logback-test.xml +++ b/astra-db-client/src/test/resources/logback-test.xml @@ -16,11 +16,11 @@ - + + - diff --git a/astra-sdk/src/main/java/com/datastax/astra/sdk/AstraClient.java b/astra-sdk/src/main/java/com/datastax/astra/sdk/AstraClient.java index 5a51b680..e8a927a3 100644 --- a/astra-sdk/src/main/java/com/datastax/astra/sdk/AstraClient.java +++ b/astra-sdk/src/main/java/com/datastax/astra/sdk/AstraClient.java @@ -472,7 +472,7 @@ public AstraDB getAstraDB() { if (null == astraClientConfig.getDatabaseId()) { throw new IllegalStateException("No databaseId provided."); } - return getAstraDBAdmin().database(UUID.fromString(astraClientConfig.getDatabaseId())); + return getAstraDBAdmin().getDatabase(UUID.fromString(astraClientConfig.getDatabaseId())); } } diff --git a/astra-spring-boot-3x-autoconfigure/pom.xml b/astra-spring-boot-3x-autoconfigure/pom.xml index 80f415b4..f7c3e665 100644 --- a/astra-spring-boot-3x-autoconfigure/pom.xml +++ b/astra-spring-boot-3x-autoconfigure/pom.xml @@ -12,7 +12,7 @@ - 3.2.1 + 3.2.3 diff --git a/pom.xml b/pom.xml index 7cd50fbf..fcc321ba 100644 --- a/pom.xml +++ b/pom.xml @@ -29,19 +29,19 @@ UTF-8 4.17.0 2.0.9 - 1.4.14 + 1.5.0 2.16.1 1.9.4 - 20231013 + 20240205 1.5.1 5.3 2.11.1 1.18.30 - 2.3.6 - 2.1.0-BETA-8 - 1.61.1 + 2.3.7 + 2.1.0-BETA-9 + 1.62.2 5.10.2