blob: 92858f9da04795d5ea7c718e3b137d8543ce474b [file] [log] [blame] [view]
# Keyspaces
## Setting the Keyspace at Connection Time
A session can be initially connected using a supplied keyspace.
**Performance Tip:** An application should create a single session object per keyspace as a session object is designed to be created once, reused, and shared by multiple threads within the application.
```c
CassSession* session = cass_session_new();
CassCluster* cluster = cass_cluster_new();
/* Configure cluster */
CassFuture* connect_future
= cass_session_connect_keyspace(session, cluster, "keyspace1");
/* Handle connect future */
cass_future_free(connect_future);
cass_session_free(session);
cass_cluster_free(cluster);
```
## Changing Keyspaces
You can specify a keyspace to change to by executing a `USE` statement on a connection session object.
```c
void use_keyspace(CassSession* session) {
CassStatement* use_statement
= cass_statement_new("USE keyspace1", 0);
CassFuture* use_future
= cass_session_execute(session, use_statement);
/* Check future result... */
cass_statement_free(use_statement);
cass_future_free(use_future);
}
```
Be very careful though: if the session is shared by multiple threads, switching the keyspace at runtime could easily cause unexpected query failures.
## Single Session and Multiple Keyspaces
It is possible to interact with multiple keyspaces using a single session object by fully qualifying the table names in your queries e.g. `keyspace_name.table_name`.
### Examples
```cql
SELECT * FROM keyspace_name.table_name WHERE ...;
INSERT INTO keyspace_name.table_name (...) VALUES (...);
```
## Creating Keyspaces and Tables
It is also possible to create keyspaces and tables by executing CQL using a session object.
### Examples
```cql
CREATE KEYSPACE cpp_driver
WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
CREATE TABLE cpp_driver.contributers (
lastname text,
firstname test,
company text,
website text,
since timestamp,
last_activity timestamp
PRIMARY KEY(lastname));
```