@@ -214,88 +214,74 @@ class Statement(object):
214214 An abstract class representing a single query. There are three subclasses:
215215 :class:`.SimpleStatement`, :class:`.BoundStatement`, and :class:`.BatchStatement`.
216216 These can be passed to :meth:`.Session.execute()`.
217- """
218217
219- retry_policy = None
220- """
221- An instance of a :class:`cassandra.policies. RetryPolicy` or one of its
222- subclasses. This controls when a query will be retried and how it
223- will be retried.
224- """
218+ Attributes
219+ ----------
220+ retry_policy : RetryPolicy or None
221+ An instance of a :class:`cassandra.policies.RetryPolicy` or one of its
222+ subclasses. This controls when a query will be retried and how it
223+ will be retried.
225224
226- consistency_level = None
227- """
228- The :class:`.ConsistencyLevel` to be used for this operation. Defaults
229- to :const:`None`, which means that the default consistency level for
230- the Session this is executed in will be used.
231- """
225+ consistency_level : ConsistencyLevel or None
226+ The :class:`.ConsistencyLevel` to be used for this operation. Defaults
227+ to :const:`None`, which means that the default consistency level for
228+ the Session this is executed in will be used.
232229
233- fetch_size = FETCH_SIZE_UNSET
234- """
235- How many rows will be fetched at a time. This overrides the default
236- of :attr:`.Session.default_fetch_size`
230+ fetch_size : int
231+ How many rows will be fetched at a time. This overrides the default
232+ of :attr:`.Session.default_fetch_size`
237233
238- This only takes effect when protocol version 2 or higher is used.
239- See :attr:`.Cluster.protocol_version` for details.
234+ This only takes effect when protocol version 2 or higher is used.
235+ See :attr:`.Cluster.protocol_version` for details.
240236
241- .. versionadded:: 2.0.0
242- """
237+ .. versionadded:: 2.0.0
243238
244- keyspace = None
245- """
246- The string name of the keyspace this query acts on. This is used when
247- :class:`~.TokenAwarePolicy` is configured in the profile load balancing policy.
239+ keyspace : str or None
240+ The string name of the keyspace this query acts on. This is used when
241+ :class:`~.TokenAwarePolicy` is configured in the profile load balancing policy.
248242
249- It is set implicitly on :class:`.BoundStatement`, and :class:`.BatchStatement`,
250- but must be set explicitly on :class:`.SimpleStatement`.
243+ It is set implicitly on :class:`.BoundStatement`, and :class:`.BatchStatement`,
244+ but must be set explicitly on :class:`.SimpleStatement`.
251245
252- .. versionadded:: 2.1.3
253- """
246+ .. versionadded:: 2.1.3
254247
255- table = None
256- """
257- The string name of the table this query acts on. This is used when the tablet
258- feature is enabled and in the same time :class`~.TokenAwarePolicy` is configured
259- in the profile load balancing policy.
260- """
248+ table : str or None
249+ The string name of the table this query acts on. This is used when the tablet
250+ feature is enabled and in the same time :class`~.TokenAwarePolicy` is configured
251+ in the profile load balancing policy.
261252
262- custom_payload = None
263- """
264- :ref:`custom_payload` to be passed to the server.
253+ custom_payload : dict or None
254+ :ref:`custom_payload` to be passed to the server.
265255
266- These are only allowed when using protocol version 4 or higher.
256+ These are only allowed when using protocol version 4 or higher.
267257
268- .. versionadded:: 2.6.0
269- """
258+ .. versionadded:: 2.6.0
270259
271- is_idempotent = False
272- """
273- Flag indicating whether this statement is safe to run multiple times in speculative execution.
260+ is_idempotent : bool
261+ Flag indicating whether this statement is safe to run multiple times in speculative execution.
274262 """
275263
276- _serial_consistency_level = None
277- _routing_key = None
264+ __slots__ = (
265+ 'retry_policy' , 'consistency_level' , 'fetch_size' , 'keyspace' , 'table' ,
266+ 'custom_payload' , 'is_idempotent' , '_serial_consistency_level' , '_routing_key'
267+ )
278268
279269 def __init__ (self , retry_policy = None , consistency_level = None , routing_key = None ,
280270 serial_consistency_level = None , fetch_size = FETCH_SIZE_UNSET , keyspace = None , custom_payload = None ,
281271 is_idempotent = False , table = None ):
282272 if retry_policy and not hasattr (retry_policy , 'on_read_timeout' ): # just checking one method to detect positional parameter errors
283273 raise ValueError ('retry_policy should implement cassandra.policies.RetryPolicy' )
284- if retry_policy is not None :
285- self .retry_policy = retry_policy
286- if consistency_level is not None :
287- self .consistency_level = consistency_level
274+ # Initialize all attributes (required for __slots__)
275+ self .retry_policy = retry_policy
276+ self .consistency_level = consistency_level
288277 self ._routing_key = routing_key
278+ self ._serial_consistency_level = None
289279 if serial_consistency_level is not None :
290280 self .serial_consistency_level = serial_consistency_level
291- if fetch_size is not FETCH_SIZE_UNSET :
292- self .fetch_size = fetch_size
293- if keyspace is not None :
294- self .keyspace = keyspace
295- if table is not None :
296- self .table = table
297- if custom_payload is not None :
298- self .custom_payload = custom_payload
281+ self .fetch_size = fetch_size
282+ self .keyspace = keyspace
283+ self .table = table
284+ self .custom_payload = custom_payload
299285 self .is_idempotent = is_idempotent
300286
301287 def _key_parts_packed (self , parts ):
@@ -392,6 +378,8 @@ class SimpleStatement(Statement):
392378 A simple, un-prepared query.
393379 """
394380
381+ __slots__ = ('_query_string' ,)
382+
395383 def __init__ (self , query_string , retry_policy = None , consistency_level = None , routing_key = None ,
396384 serial_consistency_level = None , fetch_size = FETCH_SIZE_UNSET , keyspace = None ,
397385 custom_payload = None , is_idempotent = False ):
@@ -536,18 +524,18 @@ class BoundStatement(Statement):
536524 """
537525 A prepared statement that has been bound to a particular set of values.
538526 These may be created directly or through :meth:`.PreparedStatement.bind()`.
539- """
540527
541- prepared_statement = None
542- """
543- The :class:` PreparedStatement` instance that this was created from.
544- """
528+ Attributes
529+ ----------
530+ prepared_statement : PreparedStatement or None
531+ The :class:`PreparedStatement` instance that this was created from.
545532
546- values = None
547- """
548- The sequence of values that were bound to the prepared statement.
533+ values : list or None
534+ The sequence of values that were bound to the prepared statement.
549535 """
550536
537+ __slots__ = ('prepared_statement' , 'values' , 'raw_values' )
538+
551539 def __init__ (self , prepared_statement , retry_policy = None , consistency_level = None , routing_key = None ,
552540 serial_consistency_level = None , fetch_size = FETCH_SIZE_UNSET , keyspace = None ,
553541 custom_payload = None ):
@@ -557,23 +545,32 @@ def __init__(self, prepared_statement, retry_policy=None, consistency_level=None
557545 See :class:`Statement` attributes for a description of the other parameters.
558546 """
559547 self .prepared_statement = prepared_statement
560-
561- self .retry_policy = prepared_statement .retry_policy
562- self .consistency_level = prepared_statement .consistency_level
563- self .serial_consistency_level = prepared_statement .serial_consistency_level
564- self .fetch_size = prepared_statement .fetch_size
565- self .custom_payload = prepared_statement .custom_payload
566- self .is_idempotent = prepared_statement .is_idempotent
567548 self .values = []
568549
550+ # Use prepared statement values as defaults if parameters not provided
551+ if retry_policy is None :
552+ retry_policy = prepared_statement .retry_policy
553+ if consistency_level is None :
554+ consistency_level = prepared_statement .consistency_level
555+ if serial_consistency_level is None :
556+ serial_consistency_level = prepared_statement .serial_consistency_level
557+ if fetch_size is FETCH_SIZE_UNSET :
558+ fetch_size = prepared_statement .fetch_size
559+ if custom_payload is None :
560+ custom_payload = prepared_statement .custom_payload
561+
562+ # Get keyspace and table from metadata if available
569563 meta = prepared_statement .column_metadata
564+ table = None
570565 if meta :
571- self .keyspace = meta [0 ].keyspace_name
572- self .table = meta [0 ].table_name
566+ if keyspace is None :
567+ keyspace = meta [0 ].keyspace_name
568+ table = meta [0 ].table_name
573569
570+ # Call parent __init__ with merged parameters
574571 Statement .__init__ (self , retry_policy , consistency_level , routing_key ,
575572 serial_consistency_level , fetch_size , keyspace , custom_payload ,
576- prepared_statement .is_idempotent )
573+ prepared_statement .is_idempotent , table )
577574
578575 def bind (self , values ):
579576 """
@@ -745,23 +742,19 @@ class BatchStatement(Statement):
745742 by default.
746743
747744 .. versionadded:: 2.0.0
748- """
749745
750- batch_type = None
751- """
752- The :class:`.BatchType` for the batch operation. Defaults to
753- :attr :`.BatchType.LOGGED`.
754- """
746+ Attributes
747+ ----------
748+ batch_type : BatchType
749+ The :class :`.BatchType` for the batch operation. Defaults to
750+ :attr:`.BatchType.LOGGED`.
755751
756- serial_consistency_level = None
757- """
758- The same as :attr:`.Statement.serial_consistency_level`, but is only
759- supported when using protocol version 3 or higher.
752+ serial_consistency_level : ConsistencyLevel or None
753+ The same as :attr:`.Statement.serial_consistency_level`, but is only
754+ supported when using protocol version 3 or higher.
760755 """
761756
762- _statements_and_parameters = None
763- _session = None
764- _is_lwt = False
757+ __slots__ = ('batch_type' , '_statements_and_parameters' , '_session' , '_is_lwt' )
765758
766759 def __init__ (self , batch_type = BatchType .LOGGED , retry_policy = None ,
767760 consistency_level = None , serial_consistency_level = None ,
@@ -813,6 +806,7 @@ def __init__(self, batch_type=BatchType.LOGGED, retry_policy=None,
813806 self .batch_type = batch_type
814807 self ._statements_and_parameters = []
815808 self ._session = session
809+ self ._is_lwt = False
816810 Statement .__init__ (self , retry_policy = retry_policy , consistency_level = consistency_level ,
817811 serial_consistency_level = serial_consistency_level , custom_payload = custom_payload )
818812
0 commit comments