3
# Drizzle Client & Protocol Library
5
# Copyright (C) 2008 Eric Day (eday@oddments.org)
8
# Use and distribution licensed under the BSD license. See
9
# the COPYING.BSD file in the root source directory for full text.
12
MySQL Protocol Command Objects
17
class CommandID(object):
42
STMT_SEND_LONG_DATA = 24
50
class Command(object):
51
'''This class represents a command packet sent from the client.'''
53
def __init__(self, packed=None, command=CommandID.SLEEP, payload=''):
55
self.command = command
56
self.payload = payload
58
self.command = ord(packed[0])
59
self.payload = packed[1:]
62
return chr(self.command) + self.payload
68
''' % (self.command, self.payload)
70
class TestCommand(unittest.TestCase):
72
def testDefaultInit(self):
74
self.assertEqual(command.command, CommandID.SLEEP)
75
self.assertEqual(command.payload, '')
77
def testKeywordInit(self):
78
command = Command(command=CommandID.QUERY, payload='abc')
79
self.assertEqual(command.command, CommandID.QUERY)
80
self.assertEqual(command.payload, 'abc')
82
def testUnpackInit(self):
83
command = Command('\x03abc')
84
self.assertEqual(command.command, CommandID.QUERY)
85
self.assertEqual(command.payload, 'abc')
88
command = Command(Command(command=CommandID.QUERY, payload='abc').pack())
89
self.assertEqual(command.command, CommandID.QUERY)
90
self.assertEqual(command.payload, 'abc')
92
class QueryCommand(Command):
93
def __init__(self, packed=None, query=''):
94
super(QueryCommand, self).__init__(packed=packed, command=CommandID.QUERY,
101
''' % (self.command, self.payload)
103
class TestQueryCommand(unittest.TestCase):
105
def testDefaultInit(self):
106
query = QueryCommand()
107
self.assertEqual(query.command, CommandID.QUERY)
108
self.assertEqual(query.payload, '')
110
def testKeywordInit(self):
111
query = QueryCommand(query='abc')
112
self.assertEqual(query.command, CommandID.QUERY)
113
self.assertEqual(query.payload, 'abc')
115
def testUnpackInit(self):
116
query = QueryCommand('\x03abc')
117
self.assertEqual(query.command, CommandID.QUERY)
118
self.assertEqual(query.payload, 'abc')
121
query = QueryCommand(QueryCommand(query='abc').pack())
122
self.assertEqual(query.command, CommandID.QUERY)
123
self.assertEqual(query.payload, 'abc')
125
if __name__ == '__main__':