def test_rq14_with_gpkg_geometry_type_valid_check():
    dataset = open_dataset("tests/data/test_allcorrect.gpkg")
    geometry_type_names = dataset_geometry_tables(dataset)
    result = GpkgGeometryTypeNameValidator(dataset).gpkg_geometry_valid_check(
        geometry_type_names
    )
    assert len(result) == 0
Beispiel #2
0
def query_geometry_valid(dataset) -> Iterable[Tuple[str, str, str, int]]:
    columns = utils.dataset_geometry_tables(dataset)

    for table_name, column_name, _ in columns:
        validations = dataset.ExecuteSQL(
            SQL_TEMPLATE.format(table_name=table_name,
                                column_name=column_name))
        for reason, count, row_id in validations:
            yield table_name, column_name, reason, count, row_id
        dataset.ReleaseResultSet(validations)
Beispiel #3
0
def test_with_gpkg():
    dataset = open_dataset("tests/data/test_geom_columnname.gpkg")
    checks = list(dataset_geometry_tables(dataset))
    assert len(checks) == 3
    assert checks[0][0] == "test_columnname"
    assert checks[0][1] == "geom"
    assert checks[1][0] == "test_columnname2"
    assert checks[1][1] == "geometry"
    assert checks[2][0] == "test_columnname3"
    assert checks[2][1] == "geometry"
def query_columnames(dataset) -> Iterable[Tuple[str, str]]:
    tables = utils.dataset_geometry_tables(dataset)

    for table, _, _ in tables:
        columns = dataset.ExecuteSQL(
            "PRAGMA TABLE_INFO('{table_name}');".format(table_name=table))

        for _, column, *_ in columns:
            yield table, column

        dataset.ReleaseResultSet(columns)
def test_rq14_with_gpkg_geometry_type_invalid_check():
    dataset = open_dataset("tests/data/test_geometry_type.gpkg")
    geometry_type_names = dataset_geometry_tables(dataset)
    result = GpkgGeometryTypeNameValidator(dataset).gpkg_geometry_valid_check(
        geometry_type_names
    )
    assert len(result) == 1
    assert (
        result[0]
        == "Found geometry_type_name: COMPOUNDCURVE for table test_geometry_type (from the gpkg_geometry_columns table)."
    )
def query_feature_id(dataset) -> Iterable[Tuple[str, int]]:
    tables = utils.dataset_geometry_tables(dataset)

    for table, _, _ in tables:
        validations = dataset.ExecuteSQL(
            "SELECT '{table_name}' as table_name, count(*) as pk_present FROM pragma_table_info('{table_name}') where pk > 0"
            .format(table_name=table))
        for table_name, count in validations:
            yield table_name, count

        dataset.ReleaseResultSet(validations)
Beispiel #7
0
def query_unexpected_geometry_types(dataset) -> Iterable[Tuple[str, str]]:
    geometry_types = utils.dataset_geometry_tables(dataset)

    for table_name, column_name, expected_geometry in geometry_types:
        sql = SQL_TEMPLATE_TABLE_GEOMETRY_TYPES.format(
            table_name=table_name,
            column_name=column_name,
            expected_geometry=expected_geometry,
        )

        validations = dataset.ExecuteSQL(sql)

        if validations is not None:
            for (geometry_type, count, row_id) in validations:
                yield table_name, geometry_type, count, row_id, expected_geometry

        dataset.ReleaseResultSet(validations)
Beispiel #8
0
def generate_table_definitions(dataset: DataSource) -> TableDefinition:
    projections = set()
    table_geometry_types = {
        table_name: geometry_type_name
        for table_name, _, geometry_type_name in utils.dataset_geometry_tables(dataset)
    }

    table_list = []
    for table in dataset:
        geo_column_name = table.GetGeometryColumn()
        if geo_column_name == "":
            continue

        table_name = table.GetName()
        geometry_column = {
            "name": geo_column_name,
            "type": table_geometry_types[table_name],
        }
        table_list.append(
            OrderedDict(
                [
                    ("name", table_name),
                    ("geometry_column", geo_column_name),
                    ("columns", columns_definition(table, geometry_column)),
                ]
            )
        )

        projections.add(table.GetSpatialRef().GetAuthorityCode(None))

    assert len(projections) == 1, "Expected one projection per geopackage."

    result = OrderedDict(
        [
            ("geopackage_validator_version", __version__),
            ("projection", int(projections.pop())),
            ("tables", table_list),
        ]
    )

    return result
Beispiel #9
0
def query_dimensions(dataset) -> Iterable[Tuple[str, str]]:
    tables = utils.dataset_geometry_tables(dataset)

    for table_name, column_name, _ in tables:
        validations = dataset.ExecuteSQL(
            DIMENSION_QUERY.format(table_name=table_name, geom_column_name=column_name)
        )

        if validations is not None:
            validation_list = [(z, m, ndims) for z, m, ndims in validations]
            four_dimensions = all(ndims == 4 for z, m, ndims in validation_list)
            m_coordinates_all_0 = all(m for z, m, ndims in validation_list)
            z_coordinates_all_0 = all(z for z, m, ndims in validation_list)
            if len(validation_list):
                yield table_name, MULTI_DIMENSION_MESSAGE
            if four_dimensions and m_coordinates_all_0:
                yield table_name, MEASUREMENT_COORDINATE_MESSAGE
            if z_coordinates_all_0:
                if not m_coordinates_all_0 and four_dimensions:
                    continue
                yield table_name, ELEVATION_COORDINATE_MESSAGE

        dataset.ReleaseResultSet(validations)
Beispiel #10
0
 def check(self) -> Iterable[str]:
     geometry_types = utils.dataset_geometry_tables(self.dataset)
     return self.gpkg_geometry_valid_check(geometry_types)
Beispiel #11
0
 def check(self) -> Iterable[str]:
     columns = utils.dataset_geometry_tables(self.dataset)
     return self.geom_equal_columnname_check(columns)