def execute()

in tpipelinegeofinder/textractgeofinder/ocrdb.py [0:0]


    def execute(self,
                query: str,
                params: Iterable[Any],
                textract_doc_uuid,
                area_selection: AreaSelection = None,
                page_number: int = 1,
                exclude_ids: List[str] = None) -> "list[TWord]":

        cursor: sqlite3.Cursor = self.conn.cursor()

        query_composed = "select * from ocrdb where textract_doc_uuid=? and page_number=? "
        params_composed = list()
        params_composed.append(textract_doc_uuid)
        if page_number and area_selection and area_selection.page_number != page_number:
            raise ValueError("page_number and area_selection.page_number are not equal")
        params_composed.append(page_number)
        if area_selection:
            area_xmin = area_selection.top_left.x
            area_ymin = area_selection.top_left.y
            area_xmax = area_selection.lower_right.x
            area_ymax = area_selection.lower_right.y
            query_composed += "  and (ymin + ymax) / 2 > ? \
                        and (ymin + ymax) / 2 < ? \
                        and (xmin + xmax) / 2 > ? \
                        and (xmin + xmax) / 2 < ? \
                        and (page_number) = ?"

            params_composed.extend([area_ymin, area_ymax, area_xmin, area_xmax, area_selection.page_number])
        if exclude_ids:
            query_composed += f" and id not in ({','.join(['?']*len(exclude_ids))}) "
            params_composed.extend(exclude_ids)
        params_composed.extend(params)
        query_composed += query
        logger.debug(f"query: {query_composed}\nparams_initial: {params_composed}")

        return [TWord(ocrdb_row=x) for x in cursor.execute(query_composed, params_composed)]