示例#1
0
    def pack_unpack(self, ddf, input):

        type_class = getattr(tdcli, "type_{0}".format(ddf["Type"].lower()))(ddf)

        rph = tdcli.row_pack_handler()

        type_class.pack(rph, input)

        rph.define_null(False)

        data = rph.pack_row(1)

        # format is
        # 2 bytes - row length
        # .. bytes - row data

        row_length = struct.unpack("H", data[:2])[0]
        ruh = tdcli.row_unpack_handler(data[2:], 1)

        td_types = []
        unpack_type = getattr(tdcli, "type_{0}".format(ddf["Type"].lower()))(ddf)
        td_types.append(unpack_type)

        row_items = ruh.unpack_row(td_types, data[2:], row_length)

        self.assertEqual(len(row_items), 1)
        output = row_items[0]
        self.assertNotEqual(output, None)
        self.assertEqual(input, output)
示例#2
0
	def pack_unpack(self,ddf,input):
		
		type_class = getattr(tdcli,'type_{0}'.format(ddf['Type'].lower()))(ddf)
		
		rph = tdcli.row_pack_handler()
		
		type_class.pack(rph,input)
		
		rph.define_null(False)
		
		data = rph.pack_row(1)
		
		# format is
		# 2 bytes - row length
		# .. bytes - row data
		
		row_length = struct.unpack('H',data[:2])[0]
		ruh = tdcli.row_unpack_handler(data[2:],1)
		
		td_types = []
		unpack_type = getattr(tdcli,'type_{0}'.format(ddf['Type'].lower()))(ddf)
		td_types.append(unpack_type)
		
		row_items = ruh.unpack_row(td_types,data[2:],row_length)
		
		self.assertEqual(len(row_items),1)
		output = row_items[0]
		self.assertNotEqual(output,None)
		self.assertEqual(input,output)
示例#3
0
    def test_multirow(self):
        """pack/unpack multiple rows and columns"""

        n_rows = random.randint(1, 10)
        n_columns = random.randint(1, 100)
        i = 0
        cols = []
        prev_type = type = None

        for c in range(0, n_columns):

            while type == prev_type:
                type = random.choice(tdcli.SUPPORTED_TYPES)

            cols.append(type)
            prev_type = type

        while i < n_rows:

            rph = tdcli.row_pack_handler()
            td_types = []
            items = []
            row_size = 0

            for c in range(0, n_columns):

                ddf, data = getattr(self, "gen_{0}".format(cols[c].lower()))()

                td_type = getattr(tdcli, "type_{0}".format(cols[c].lower()))
                null = bool(random.randint(0, 1))
                instance = td_type(ddf)

                if ddf["Type"] in ["CHAR", "VARCHAR"]:
                    l = len(data)
                else:
                    l = 10

                if rph.row_len + l + instance.data_length + len(items) > 65534:
                    self.assertRaises(OverflowError, rph.pack, instance, data)
                else:
                    rph.pack(instance, data)
                    td_types.append(instance)
                    rph.define_null(null)

                    if null is True:
                        items.append(None)
                    else:
                        items.append(data)

            row_data = rph.pack_row(len(items))

            row_length = struct.unpack("H", row_data[:2])[0]

            self.assertTrue(row_length < 65535)

            ruh = tdcli.row_unpack_handler(row_data[2:], len(items))
            row_items = ruh.unpack_row(td_types, row_data[2:], row_length)

            for input in items:
                output = row_items.pop(0)
                self.assertEqual(input, output)

            i += 1
示例#4
0
	def test_multirow(self):
		"""pack/unpack multiple rows and columns"""
		
		n_rows = random.randint(1,10)
		n_columns = random.randint(1,100)
		i=0
		cols=[]
		prev_type= type=None
		
		for c in range(0,n_columns):
			
			while type == prev_type:
				type = random.choice(tdcli.SUPPORTED_TYPES)
			
			cols.append(type)
			prev_type = type
			
		
		while i < n_rows:
			
			rph = tdcli.row_pack_handler()
			td_types=[]
			items=[]
			row_size = 0
			
			for c in range(0,n_columns):
				
				ddf,data = getattr(self,'gen_{0}'.format(cols[c].lower()))()
				
				td_type = getattr(tdcli,'type_{0}'.format(cols[c].lower()))
				null = bool(random.randint(0,1))
				instance = td_type(ddf)
				
				if ddf['Type'] in ['CHAR','VARCHAR']:
					l = len(data)
				else:
					l = 10
				
				if rph.row_len + l + instance.data_length + len(items) > 65534:
					self.assertRaises(OverflowError,rph.pack,instance,data)
				else:
					rph.pack(instance,data)
					td_types.append(instance)
					rph.define_null(null)
					
					if null is True:
						items.append(None)
					else:
						items.append(data)
				
			row_data = rph.pack_row(len(items))
				
			row_length = struct.unpack('H',row_data[:2])[0]
			
			self.assertTrue(row_length < 65535)
			
			ruh = tdcli.row_unpack_handler(row_data[2:],len(items))
			row_items = ruh.unpack_row(td_types,row_data[2:],row_length)
			
			for input in items:
				output = row_items.pop(0)
				self.assertEqual(input,output)
				
			i += 1