1 /*
2   Copyright (c) DataStax, Inc.
3 
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7 
8   http://www.apache.org/licenses/LICENSE-2.0
9 
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15 */
16 
17 #ifndef DATASTAX_INTERNAL_CONSTANTS_HPP
18 #define DATASTAX_INTERNAL_CONSTANTS_HPP
19 
20 #define CASS_UINT32_MAX 4294967295UL
21 
22 #define CASS_INT64_MAX 9223372036854775807LL
23 #define CASS_INT64_MIN (-CASS_INT64_MAX - 1)
24 
25 #define CASS_INT32_MAX 2147483647
26 #define CASS_INT32_MIN (-CASS_INT32_MAX - 1)
27 
28 #define CQL_OPCODE_ERROR 0x00
29 #define CQL_OPCODE_STARTUP 0x01
30 #define CQL_OPCODE_READY 0x02
31 #define CQL_OPCODE_AUTHENTICATE 0x03
32 #define CQL_OPCODE_CREDENTIALS 0x04
33 #define CQL_OPCODE_OPTIONS 0x05
34 #define CQL_OPCODE_SUPPORTED 0x06
35 #define CQL_OPCODE_QUERY 0x07
36 #define CQL_OPCODE_RESULT 0x08
37 #define CQL_OPCODE_PREPARE 0x09
38 #define CQL_OPCODE_EXECUTE 0x0A
39 #define CQL_OPCODE_REGISTER 0x0B
40 #define CQL_OPCODE_EVENT 0x0C
41 #define CQL_OPCODE_BATCH 0x0D
42 #define CQL_OPCODE_AUTH_CHALLENGE 0x0E
43 #define CQL_OPCODE_AUTH_RESPONSE 0x0F
44 #define CQL_OPCODE_AUTH_SUCCESS 0x10
45 #define CQL_OPCODE_CANCEL 0xFF
46 
47 // TODO(mpenick): We need to expose these (not as "CQL")
48 #define CQL_ERROR_SERVER_ERROR 0x0000
49 #define CQL_ERROR_PROTOCOL_ERROR 0x000A
50 #define CQL_ERROR_BAD_CREDENTIALS 0x0100
51 #define CQL_ERROR_UNAVAILABLE 0x1000
52 #define CQL_ERROR_OVERLOADED 0x1001
53 #define CQL_ERROR_IS_BOOTSTRAPPING 0x1002
54 #define CQL_ERROR_TRUNCATE_ERROR 0x1003
55 #define CQL_ERROR_WRITE_TIMEOUT 0x1100
56 #define CQL_ERROR_READ_TIMEOUT 0x1200
57 #define CQL_ERROR_READ_FAILURE 0x1300
58 #define CQL_ERROR_FUNCTION_FAILURE 0x1400
59 #define CQL_ERROR_WRITE_FAILURE 0x1500
60 #define CQL_ERROR_SYNTAX_ERROR 0x2000
61 #define CQL_ERROR_UNAUTHORIZED 0x2100
62 #define CQL_ERROR_INVALID_QUERY 0x2200
63 #define CQL_ERROR_CONFIG_ERROR 0x2300
64 #define CQL_ERROR_ALREADY_EXISTS 0x2400
65 #define CQL_ERROR_UNPREPARED 0x2500
66 #define CQL_ERROR_CLIENT_WRITE_FAILURE 0x8000
67 
68 #define CASS_FLAG_COMPRESSION 0x01
69 #define CASS_FLAG_TRACING 0x02
70 #define CASS_FLAG_CUSTOM_PAYLOAD 0x04
71 #define CASS_FLAG_WARNING 0x08
72 #define CASS_FLAG_BETA 0x10
73 
74 #define CASS_QUERY_FLAG_VALUES 0x00000001
75 #define CASS_QUERY_FLAG_SKIP_METADATA 0x00000002
76 #define CASS_QUERY_FLAG_PAGE_SIZE 0x00000004
77 #define CASS_QUERY_FLAG_PAGING_STATE 0x00000008
78 #define CASS_QUERY_FLAG_SERIAL_CONSISTENCY 0x00000010
79 #define CASS_QUERY_FLAG_DEFAULT_TIMESTAMP 0x00000020
80 #define CASS_QUERY_FLAG_NAMES_FOR_VALUES 0x00000040
81 #define CASS_QUERY_FLAG_WITH_KEYSPACE 0x00000080
82 #define CASS_QUERY_FLAG_PAGE_SIZE_BYTES 0x40000000
83 #define CASS_QUERY_FLAG_CONTINUOUS_PAGING 0x80000000
84 
85 #define CASS_PREPARE_FLAG_WITH_KEYSPACE 0x00000001
86 
87 #define CASS_BATCH_KIND_QUERY 0
88 #define CASS_BATCH_KIND_PREPARED 1
89 
90 #define CASS_RESULT_KIND_VOID 1
91 #define CASS_RESULT_KIND_ROWS 2
92 #define CASS_RESULT_KIND_SET_KEYSPACE 3
93 #define CASS_RESULT_KIND_PREPARED 4
94 #define CASS_RESULT_KIND_SCHEMA_CHANGE 5
95 
96 #define CASS_RESULT_FLAG_GLOBAL_TABLESPEC 0x00000001
97 #define CASS_RESULT_FLAG_HAS_MORE_PAGES 0x00000002
98 #define CASS_RESULT_FLAG_NO_METADATA 0x00000004
99 #define CASS_RESULT_FLAG_METADATA_CHANGED 0x00000008
100 #define CASS_RESULT_FLAG_CONTINUOUS_PAGING 0x40000000
101 #define CASS_RESULT_FLAG_LAST_CONTINUOUS_PAGE 0x80000000
102 
103 #define CASS_EVENT_TOPOLOGY_CHANGE 1
104 #define CASS_EVENT_STATUS_CHANGE 2
105 #define CASS_EVENT_SCHEMA_CHANGE 4
106 
107 #define CASS_HEADER_SIZE_V1_AND_V2 8
108 #define CASS_HEADER_SIZE_V3 9
109 
110 // Cluster-level defaults
111 #define CASS_DEFAULT_CONNECT_TIMEOUT_MS 5000
112 #define CASS_DEFAULT_HEARTBEAT_INTERVAL_SECS 30
113 #define CASS_DEFAULT_HOSTNAME_RESOLUTION_ENABLED false
114 #define CASS_DEFAULT_IDLE_TIMEOUT_SECS 60
115 #define CASS_DEFAULT_LOG_LEVEL CASS_LOG_WARN
116 #define CASS_DEFAULT_MAX_PREPARES_PER_FLUSH 128
117 #define CASS_DEFAULT_MAX_REUSABLE_WRITE_OBJECTS UINT_MAX
118 #define CASS_DEFAULT_MAX_SCHEMA_WAIT_TIME_MS 10000
119 #define CASS_DEFAULT_NUM_CONNECTIONS_PER_HOST 1
120 #define CASS_DEFAULT_PREPARE_ON_ALL_HOSTS true
121 #define CASS_DEFAULT_PREPARE_ON_UP_OR_ADD_HOST true
122 #define CASS_DEFAULT_PORT 9042
123 #define CASS_DEFAULT_QUEUE_SIZE_IO 8192
124 #define CASS_DEFAULT_CONSTANT_RECONNECT_WAIT_TIME_MS 2000u
125 #define CASS_DEFAULT_EXPONENTIAL_RECONNECT_BASE_DELAY_MS \
126   CASS_DEFAULT_CONSTANT_RECONNECT_WAIT_TIME_MS
127 #define CASS_DEFAULT_EXPONENTIAL_RECONNECT_MAX_DELAY_MS 600000u // 10 minutes
128 #define CASS_DEFAULT_RESOLVE_TIMEOUT_MS 5000
129 #define CASS_DEFAULT_TCP_KEEPALIVE_DELAY_SECS 0
130 #define CASS_DEFAULT_TCP_KEEPALIVE_ENABLED true
131 #define CASS_DEFAULT_TCP_NO_DELAY_ENABLED true
132 #define CASS_DEFAULT_THREAD_COUNT_IO 1
133 #define CASS_DEFAULT_USE_TOKEN_AWARE_ROUTING true
134 #define CASS_DEFAULT_USE_SNI_ROUTING false
135 #define CASS_DEFAULT_USE_BETA_PROTOCOL_VERSION false
136 #define CASS_DEFAULT_USE_RANDOMIZED_CONTACT_POINTS true
137 #define CASS_DEFAULT_USE_SCHEMA true
138 #define CASS_DEFAULT_COALESCE_DELAY 200
139 #define CASS_DEFAULT_NEW_REQUEST_RATIO 50
140 #define CASS_DEFAULT_NO_COMPACT false
141 #define CASS_DEFAULT_CQL_VERSION "3.0.0"
142 #define CASS_DEFAULT_MAX_TRACING_DATA_WAIT_TIME_MS 15
143 #define CASS_DEFAULT_RETRY_TRACING_DATA_WAIT_TIME_MS 3
144 #define CASS_DEFAULT_TRACING_CONSISTENCY CASS_CONSISTENCY_ONE
145 
146 // Request-level defaults
147 #define CASS_DEFAULT_CONSISTENCY CASS_CONSISTENCY_LOCAL_ONE
148 #define CASS_DEFAULT_REQUEST_TIMEOUT_MS 12000u
149 #define CASS_DEFAULT_SERIAL_CONSISTENCY CASS_CONSISTENCY_ANY
150 
151 // Client monitoring defaults
152 #define CASS_DEFAULT_CLIENT_MONITOR_EVENTS_INTERVAL_SECS 300
153 
154 // DBaaS product type identification
155 #define CASS_DBAAS_PRODUCT_TYPE "DATASTAX_APOLLO"
156 
157 // DBaaS defaults
158 #define CASS_DEFAULT_DBAAS_CONSISTENCY CASS_CONSISTENCY_LOCAL_QUORUM
159 
160 #define CASS_MAX_STREAMS 32768 // Protocol v3+: 2 ^ (16 - 1) (2 bytes)
161 
162 #endif
163