Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 20 additions & 19 deletions Mergin/diff.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,22 +75,19 @@ def get_row_from_db(db_conn, schema_table, entry_changes):
Fetches a single row from DB's table based on the values of pkeys
in changeset entry
"""
with db_conn.cursor() as c:
where_clauses = []
query_params = []
where_clauses = []
query_params = []

for i, col in enumerate(schema_table.columns):
if col.pkey:
where_clauses.append('"{}" = %s'.format(col.name))
val = old_value_for_column_by_index(entry_changes, i)
query_params.append(val)
for i, col in enumerate(schema_table.columns):
if col.pkey:
where_clauses.append('"{}" = ?'.format(col.name))
val = old_value_for_column_by_index(entry_changes, i)
query_params.append(val)

# We parameterize values securely; table/column names are trusted internal schema objects.
query = 'SELECT * FROM "{}" WHERE {}'.format(schema_table.name, " AND ".join(where_clauses)) # nosec B608
# We parameterize values securely; table/column names are trusted internal schema objects.
query = 'SELECT * FROM "{}" WHERE {}'.format(schema_table.name, " AND ".join(where_clauses)) # nosec B608

c.execute(query, tuple(query_params))

return c.fetchone()
return db_conn.execute(query, tuple(query_params)).fetchone()


def parse_gpkg_geom_encoding(wkb_with_gpkg_hdr):
Expand Down Expand Up @@ -348,10 +345,11 @@ def make_local_changes_layer(mp, layer):

fields, cols_to_fields = create_field_list(db_schema[table_name])

db_conn = None # no ref. db
db_conn = sqlite3.connect(base_file)

features = diff_table_to_features(diff[table_name], db_schema[table_name], fields, cols_to_fields, db_conn)
try:
features = diff_table_to_features(diff[table_name], db_schema[table_name], fields, cols_to_fields, db_conn)
finally:
db_conn.close()

# create diff layer
vl = QgsVectorLayer(
Expand Down Expand Up @@ -400,10 +398,13 @@ def make_version_changes_layers(project_path, version):
fields, cols_to_fields = create_field_list(db_schema[table_name])
geom_type, geom_crs = get_layer_geometry_info(schema_json, table_name)

db_conn = None # no ref. db
db_conn = sqlite3.connect(gpkg_file)

features = diff_table_to_features(diff[table_name], db_schema[table_name], fields, cols_to_fields, db_conn)
try:
features = diff_table_to_features(
diff[table_name], db_schema[table_name], fields, cols_to_fields, db_conn
)
finally:
db_conn.close()

# create diff layer
if geom_type is None:
Expand Down
8 changes: 6 additions & 2 deletions Mergin/processing/algs/create_diff.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,13 @@ def processAlgorithm(self, parameters, context, feedback):
feedback.setProgress(30)

if diff and table_name in diff.keys():
db_conn = None # no ref. db
db_conn = sqlite3.connect(layer_path)
features = diff_table_to_features(diff[table_name], db_schema[table_name], fields, fields_mapping, db_conn)
try:
features = diff_table_to_features(
diff[table_name], db_schema[table_name], fields, fields_mapping, db_conn
)
finally:
db_conn.close()
feedback.setProgress(40)

step = 60.0 / len(features) if features else 0
Expand Down
9 changes: 3 additions & 6 deletions Mergin/processing/algs/download_vector_tiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,26 +56,23 @@ def create(self):
"CREATE UNIQUE INDEX tile_index on tiles (zoom_level, tile_column, tile_row);"
"COMMIT;"
)
cur = self.conn.cursor()
cur.executescript(sql)
self.conn.executescript(sql)
return True

def set_metadata_value(self, key, value):
if self.conn is None:
return

params = (key, value)
cur = self.conn.cursor()
cur.execute("insert into metadata values (?, ?)", params)
self.conn.execute("insert into metadata values (?, ?)", params)
self.conn.commit()

def set_tile_data(self, z, x, y, data):
if self.conn is None:
return

params = (z, x, y, data)
cur = self.conn.cursor()
cur.execute("insert into tiles values (?, ?, ?, ?)", params)
self.conn.execute("insert into tiles values (?, ?, ?, ?)", params)
self.conn.commit()

def close(self):
Expand Down
8 changes: 6 additions & 2 deletions Mergin/processing/algs/extract_local_changes.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,13 @@ def processAlgorithm(self, parameters, context, feedback):
feedback.setProgress(15)

if diff and table_name in diff.keys():
db_conn = None # no ref. db
db_conn = sqlite3.connect(layer_path)
features = diff_table_to_features(diff[table_name], db_schema[table_name], fields, fields_mapping, db_conn)
try:
features = diff_table_to_features(
diff[table_name], db_schema[table_name], fields, fields_mapping, db_conn
)
finally:
db_conn.close()
feedback.setProgress(20)

step = 80.0 / len(features) if features else 0
Expand Down
Loading