Skip to content

Commit 2e1e192

Browse files
Add integration tests for named/unnamed bind markers
Some of them are moved from session.rs file. Some are inspired by https://github.com/scylladb/java-driver/blob/48a9ea0496e5fe6c75eb481789490731c8e33050/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/SimpleStatementCcmIT.java
1 parent 9687553 commit 2e1e192

File tree

2 files changed

+762
-120
lines changed

2 files changed

+762
-120
lines changed

scylla/tests/integration/session.rs

Lines changed: 2 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
use crate::utils::DeserializeOwnedValue;
21
use crate::utils::{
32
create_new_session_builder, scylla_supports_tablets, setup_tracing, supports_feature,
4-
unique_keyspace_name, PerformDDL,
3+
unique_keyspace_name, DeserializeOwnedValue, PerformDDL,
54
};
65
use assert_matches::assert_matches;
76
use futures::{FutureExt, StreamExt as _, TryStreamExt};
@@ -28,7 +27,7 @@ use scylla_cql::frame::request::query::{PagingState, PagingStateResponse};
2827
use scylla_cql::serialize::row::{SerializeRow, SerializedValues};
2928
use scylla_cql::serialize::value::SerializeValue;
3029
use scylla_cql::value::{CqlVarint, Row};
31-
use std::collections::{BTreeMap, HashMap};
30+
use std::collections::HashMap;
3231
use std::collections::{BTreeSet, HashSet};
3332
use std::sync::atomic::{AtomicBool, Ordering};
3433
use std::sync::Arc;
@@ -1514,62 +1513,6 @@ async fn test_turning_off_schema_fetching() {
15141513
assert_eq!(keyspace.user_defined_types.len(), 0);
15151514
}
15161515

1517-
#[tokio::test]
1518-
async fn test_named_bind_markers() {
1519-
let session = create_new_session_builder().build().await.unwrap();
1520-
let ks = unique_keyspace_name();
1521-
1522-
session
1523-
.ddl(format!("CREATE KEYSPACE {} WITH REPLICATION = {{'class' : 'NetworkTopologyStrategy', 'replication_factor' : 1}}", ks))
1524-
.await
1525-
.unwrap();
1526-
1527-
session
1528-
.query_unpaged(format!("USE {}", ks), &[])
1529-
.await
1530-
.unwrap();
1531-
1532-
session
1533-
.ddl("CREATE TABLE t (pk int, ck int, v int, PRIMARY KEY (pk, ck, v))")
1534-
.await
1535-
.unwrap();
1536-
1537-
session.await_schema_agreement().await.unwrap();
1538-
1539-
let prepared = session
1540-
.prepare("INSERT INTO t (pk, ck, v) VALUES (:pk, :ck, :v)")
1541-
.await
1542-
.unwrap();
1543-
let hashmap: HashMap<&str, i32> = HashMap::from([("pk", 7), ("v", 42), ("ck", 13)]);
1544-
session.execute_unpaged(&prepared, &hashmap).await.unwrap();
1545-
1546-
let btreemap: BTreeMap<&str, i32> = BTreeMap::from([("ck", 113), ("v", 142), ("pk", 17)]);
1547-
session.execute_unpaged(&prepared, &btreemap).await.unwrap();
1548-
1549-
let rows: Vec<(i32, i32, i32)> = session
1550-
.query_unpaged("SELECT pk, ck, v FROM t", &[])
1551-
.await
1552-
.unwrap()
1553-
.into_rows_result()
1554-
.unwrap()
1555-
.rows::<(i32, i32, i32)>()
1556-
.unwrap()
1557-
.map(|res| res.unwrap())
1558-
.collect();
1559-
1560-
assert_eq!(rows, vec![(7, 13, 42), (17, 113, 142)]);
1561-
1562-
let wrongmaps: Vec<HashMap<&str, i32>> = vec![
1563-
HashMap::from([("pk", 7), ("fefe", 42), ("ck", 13)]),
1564-
HashMap::from([("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 7)]),
1565-
HashMap::new(),
1566-
HashMap::from([("ck", 9)]),
1567-
];
1568-
for wrongmap in wrongmaps {
1569-
assert!(session.execute_unpaged(&prepared, &wrongmap).await.is_err());
1570-
}
1571-
}
1572-
15731516
#[tokio::test]
15741517
async fn test_prepared_partitioner() {
15751518
let session = create_new_session_builder().build().await.unwrap();
@@ -1707,66 +1650,6 @@ async fn test_unprepared_reprepare_in_execute() {
17071650
assert_eq!(all_rows, vec![(1, 2, 3), (1, 3, 2)]);
17081651
}
17091652

1710-
#[tokio::test]
1711-
async fn test_unusual_valuelists() {
1712-
let _ = tracing_subscriber::fmt::try_init();
1713-
1714-
let session = create_new_session_builder().build().await.unwrap();
1715-
let ks = unique_keyspace_name();
1716-
1717-
session.ddl(format!("CREATE KEYSPACE IF NOT EXISTS {} WITH REPLICATION = {{'class' : 'NetworkTopologyStrategy', 'replication_factor' : 1}}", ks)).await.unwrap();
1718-
session.use_keyspace(ks, false).await.unwrap();
1719-
1720-
session
1721-
.ddl("CREATE TABLE IF NOT EXISTS tab (a int, b int, c varchar, primary key (a, b, c))")
1722-
.await
1723-
.unwrap();
1724-
1725-
let insert_a_b_c = session
1726-
.prepare("INSERT INTO tab (a, b, c) VALUES (?, ?, ?)")
1727-
.await
1728-
.unwrap();
1729-
1730-
let values_dyn: Vec<&dyn SerializeValue> = vec![
1731-
&1 as &dyn SerializeValue,
1732-
&2 as &dyn SerializeValue,
1733-
&"&dyn" as &dyn SerializeValue,
1734-
];
1735-
session
1736-
.execute_unpaged(&insert_a_b_c, values_dyn)
1737-
.await
1738-
.unwrap();
1739-
1740-
let values_box_dyn: Vec<Box<dyn SerializeValue>> = vec![
1741-
Box::new(1) as Box<dyn SerializeValue>,
1742-
Box::new(3) as Box<dyn SerializeValue>,
1743-
Box::new("Box dyn") as Box<dyn SerializeValue>,
1744-
];
1745-
session
1746-
.execute_unpaged(&insert_a_b_c, values_box_dyn)
1747-
.await
1748-
.unwrap();
1749-
1750-
let mut all_rows: Vec<(i32, i32, String)> = session
1751-
.query_unpaged("SELECT a, b, c FROM tab", ())
1752-
.await
1753-
.unwrap()
1754-
.into_rows_result()
1755-
.unwrap()
1756-
.rows::<(i32, i32, String)>()
1757-
.unwrap()
1758-
.map(|r| r.unwrap())
1759-
.collect();
1760-
all_rows.sort();
1761-
assert_eq!(
1762-
all_rows,
1763-
vec![
1764-
(1i32, 2i32, "&dyn".to_owned()),
1765-
(1, 3, "Box dyn".to_owned())
1766-
]
1767-
);
1768-
}
1769-
17701653
// A tests which checks that Session::batch automatically reprepares PreparedStatemtns if they become unprepared.
17711654
// Doing an ALTER TABLE statement clears prepared statement cache and all prepared statements need
17721655
// to be prepared again.

0 commit comments

Comments
 (0)