def fetchmany(self, *arg): """Fetch next row of a query result set. arg sets the arraysize The number of rows to fetch per call is specified by the parameter. If it is not given, the cursor's arraysize determines the number of rows to be fetched. The method should try to fetch as many rows as indicated by the size parameter. If this is not possible due to the specified number of rows not being available, fewer rows may be returned. Arraysize is retained after each call to fetchmany. """ values = [] return_tuple = () self.__check_if_open() self.__check_for_transaction() if (not self.__mimcursor): self.__raise_exception(-25014) # If arg is provided, arraysize is set if (len(arg) > 0): self.arraysize = arg[0] fetch_length = self.arraysize rc_value = mimerapi.mimerFetch(self.__statement) fetch_value = rc_value while (fetch_value != 100 and fetch_length > 0): self.__check_mimerapi_error(fetch_value, self.__statement) return_tuple = () # Column number starts a 1 for cur_column in range(1, self._number_of_columns + 1): func_tuple = get_funcs[self._column_type[cur_column - 1] ](self.__statement, cur_column) self.__check_mimerapi_error(func_tuple[0], self.__statement) # Conversion from C int to Python boolean if (rc_value == 42 and not func_tuple[1] == None): if (func_tuple[1] == 0): return_tuple = return_tuple + (False,) else: return_tuple = return_tuple + (True,) else: return_tuple = return_tuple + (func_tuple[1],) values.append(return_tuple) fetch_length = fetch_length - 1 if(fetch_length > 0): fetch_value = mimerapi.mimerFetch(self.__statement) return values
def fetchall(self): """ Fetch all (remaining) row of a query result set. The rows are returned as a list of tuples. If no more data is available, an empty list is returned. If fetchall is called and the previous call to execute did not produce a result set, a ProgrammingError is raised. """ self.__check_if_open() self.__check_for_transaction() if (not self.__mimcursor): self.__raise_exception(-25014) values = [] rc_value = mimerapi.mimerFetch(self.__statement) fetch_value = rc_value while (fetch_value != 100): self.__check_mimerapi_error(fetch_value, self.__statement) return_tuple = () # Column number starts a 1 for cur_column in range(1, self._number_of_columns + 1): rc_value = mimerapi.mimerColumnType(self.__statement, cur_column) self.__check_mimerapi_error(rc_value, self.__statement) func_tuple = get_funcs[rc_value](self.__statement, cur_column) self.__check_mimerapi_error(func_tuple[0], self.__statement) # Conversion from C int to Python boolean if (rc_value == 42 and not func_tuple[1] == None): if (func_tuple[1] == 0): return_tuple = return_tuple + (False, ) else: return_tuple = return_tuple + (True, ) else: return_tuple = return_tuple + (func_tuple[1], ) values.append(return_tuple) fetch_value = mimerapi.mimerFetch(self.__statement) return values
def fetchone(self): """ Fetch next row of a query result set. The row is returned as a tuple. If no more data is available, None is returned. If fetchone is called and the previous call to execute did not produce a result set, a ProgrammingError is raised. """ self.__check_if_open() self.__check_for_transaction() if (not self.__mimcursor): self.__raise_exception(-25014) rc_value = mimerapi.mimerFetch(self.__statement) self.__check_mimerapi_error(rc_value, self.__statement) return_tuple = () # Return value of mimerFetch == 100 implies end of result set if (rc_value == 100): return [] for cur_column in range(1, self._number_of_columns + 1): rc_value = mimerapi.mimerColumnType(self.__statement, cur_column) self.__check_mimerapi_error(rc_value, self.__statement) func_tuple = get_funcs[rc_value](self.__statement, cur_column) self.__check_mimerapi_error(func_tuple[0], self.__statement) # Conversion from C int to Python boolean if (rc_value == 42 and not func_tuple[1] == None): if (func_tuple[1] == 0): return_tuple = return_tuple + (False, ) else: return_tuple = return_tuple + (True, ) else: return_tuple = return_tuple + (func_tuple[1], ) return return_tuple