@@ -10,7 +10,7 @@ use crate::utils::test_utils::unique_keyspace_name;
1010use bigdecimal:: BigDecimal ;
1111use itertools:: Itertools ;
1212use num_bigint:: BigInt ;
13- use scylla_cql:: frame:: value:: CqlTimeuuid ;
13+ use scylla_cql:: frame:: value:: { CqlTimeuuid , CqlVarint } ;
1414use scylla_cql:: types:: serialize:: value:: SerializeCql ;
1515use scylla_macros:: SerializeCql ;
1616use std:: cmp:: PartialEq ;
@@ -122,6 +122,88 @@ async fn test_varint() {
122122 run_tests :: < BigInt > ( & tests, "varint" ) . await ;
123123}
124124
125+ #[ tokio:: test]
126+ async fn test_cql_varint ( ) {
127+ let tests = [
128+ vec ! [ 0x00 ] , // 0
129+ vec ! [ 0x01 ] , // 1
130+ vec ! [ 0x00 , 0x01 ] , // 1 (with leading zeros)
131+ vec ! [ 0x7F ] , // 127
132+ vec ! [ 0x00 , 0x80 ] , // 128
133+ vec ! [ 0x00 , 0x81 ] , // 129
134+ vec ! [ 0xFF ] , // -1
135+ vec ! [ 0x80 ] , // -128
136+ vec ! [ 0xFF , 0x7F ] , // -129
137+ vec ! [
138+ 0x01 , 0x8E , 0xE9 , 0x0F , 0xF6 , 0xC3 , 0x73 , 0xE0 , 0xEE , 0x4E , 0x3F , 0x0A , 0xD2 ,
139+ ] , // 123456789012345678901234567890
140+ vec ! [
141+ 0xFE , 0x71 , 0x16 , 0xF0 , 0x09 , 0x3C , 0x8C , 0x1F , 0x11 , 0xB1 , 0xC0 , 0xF5 , 0x2E ,
142+ ] , // -123456789012345678901234567890
143+ ] ;
144+
145+ let table_name = "cql_varint_tests" ;
146+ let session: Session = create_new_session_builder ( ) . build ( ) . await . unwrap ( ) ;
147+ let ks = unique_keyspace_name ( ) ;
148+
149+ session
150+ . query (
151+ format ! (
152+ "CREATE KEYSPACE IF NOT EXISTS {} WITH REPLICATION = \
153+ {{'class' : 'NetworkTopologyStrategy', 'replication_factor' : 1}}",
154+ ks
155+ ) ,
156+ & [ ] ,
157+ )
158+ . await
159+ . unwrap ( ) ;
160+ session. use_keyspace ( ks, false ) . await . unwrap ( ) ;
161+
162+ session
163+ . query (
164+ format ! (
165+ "CREATE TABLE IF NOT EXISTS {} (id int PRIMARY KEY, val varint)" ,
166+ table_name
167+ ) ,
168+ & [ ] ,
169+ )
170+ . await
171+ . unwrap ( ) ;
172+
173+ let prepared_insert = session
174+ . prepare ( format ! (
175+ "INSERT INTO {} (id, val) VALUES (0, ?)" ,
176+ table_name
177+ ) )
178+ . await
179+ . unwrap ( ) ;
180+ let prepared_select = session
181+ . prepare ( format ! ( "SELECT val FROM {} WHERE id = 0" , table_name) )
182+ . await
183+ . unwrap ( ) ;
184+
185+ for test in tests {
186+ let cql_varint = CqlVarint :: from_signed_bytes_be_slice ( & test) ;
187+ session
188+ . execute ( & prepared_insert, ( & cql_varint, ) )
189+ . await
190+ . unwrap ( ) ;
191+
192+ let read_values: Vec < CqlVarint > = session
193+ . execute ( & prepared_select, & [ ] )
194+ . await
195+ . unwrap ( )
196+ . rows
197+ . unwrap ( )
198+ . into_typed :: < ( CqlVarint , ) > ( )
199+ . map ( Result :: unwrap)
200+ . map ( |row| row. 0 )
201+ . collect :: < Vec < _ > > ( ) ;
202+
203+ assert_eq ! ( read_values, vec![ cql_varint] )
204+ }
205+ }
206+
125207#[ tokio:: test]
126208async fn test_decimal ( ) {
127209 let tests = [
0 commit comments