Version: [3544] Snowflake Connector for QGIS 1.0.28

1.0.28 - Packaging re-release of 1.0.27: ship the plugin as a
properly packaged ZIP whose top-level folder is
"qgis-snowflake-connector"
(no version suffix), so installing via Plugins > Install from ZIP no
longer
fails with "ModuleNotFoundError: No module named
'qgis-snowflake-connector-1'"
that occurs when QGIS is pointed at GitHub's auto-generated source
archive.
No functional code change since 1.0.27.
1.0.27 - Security-scan fix: replace the three remaining silent
best-effort try/except/pass blocks (remove_connection's auth-config
removal
and cached-session purge in helpers/utils.py, and the connection close
in
SFConnectionManager.purge_connection) with QgsMessageLog warning
diagnostics,
so the Python security scanner's "Try, Except, Pass" (bandit B110)
findings
are resolved without suppressions and cleanup failures are no longer
silent.
No user-visible behaviour change.
1.0.26 - Fixes from end-to-end testing:
* Filtering/subset-querying a layer by its primary-key column no
longer fails
with "ambiguous column name": the feature iterator was projecting the
primary key twice (once in the field list and again as a trailing
column).
* Export to Snowflake no longer creates the target table during
parameter
validation; all table/schema creation now happens after the user
consents,
so a cancelled export leaves no table behind.
* Spatial Join with the ST_DWITHIN predicate now exposes a validated
Distance
parameter and generates valid SQL (ST_DWITHIN requires a distance
argument).
* After an in-place upgrade, the plugin detects that a previous
version's
vector provider is still registered (QGIS cannot replace it while
running)
and logs a warning asking the user to restart QGIS to finish the
upgrade.
1.0.25 - Fix the Qt6 compatibility issues reported by the QGIS
Plugin Repository scan. Every flagged enum member is now accessed
through
its enum scope (QgsWkbTypes.Type, QgsTask.Flag,
QgsFeatureRequest.FilterType,
QgsVectorDataProvider.Capability, QgsProcessingParameterNumber.Type,
QgsProcessingAlgorithm.Flag, QDialogButtonBox.StandardButton), the
provider's
defaultValue() returns qgis.core NULL instead of a bare QVariant(),
and the
QGIS < 3.38 QVariant.Type fallback in create_qgs_field is resolved
dynamically because that attribute only exists on PyQt5. Scoped access
is
value-identical on Qt5, so there is no behaviour change on QGIS
3.34-3.44.
1.0.24 - Packaging/security fixes for the QGIS Plugin Repository
validation scan: annotate two best-effort cleanup try/except blocks
(the
Buffer algorithm's temp-table teardown and the feature iterator's
cursor
close) with documented bandit B110 suppressions, matching the
convention
already used elsewhere, and remove the Sphinx help/make.bat Windows
helper
so it no longer trips the suspicious-file check. No user-visible
behaviour
change.
1.0.23 - Fix plugin load failure ("AttributeError: module 'lib'
has no attribute 'GEN_EMAIL'"): this is a cryptography/pyOpenSSL
version
mismatch in the QGIS Python environment (cryptography 49+ removed
OpenSSL
bindings that older pyOpenSSL still references), not a QGIS version
issue.
classFactory now catches any load-time exception (not just
ImportError) so
the plugin degrades to a no-op stub with an actionable message instead
of a
raw traceback dialog, and logs the resolved versions and paths of
snowflake-connector-python, cryptography and pyOpenSSL to help
diagnose
per-user site-packages shadowing.
1.0.22 - Fix from end-to-end feature testing: editing a feature on a
Snowflake layer crashed with "TypeError: list indices must be integers
or
slices, not str" because FilterFid/FilterFids requests were pushed
down to SQL
using a column name as a list index. Feature ids are fetch-order
positions, not
primary keys, so these requests are now resolved from the in-memory
feature
cache instead, fixing the identify/attribute-table edit workflow.
1.0.21 - Fix from end-to-end feature testing: the custom Snowflake
expression functions (sf_h3_resolution, sf_h3_is_valid,
sf_h3_to_string) were
declared with an extra "node" parameter that QGIS never injects, so
every call
raised a TypeError and returned NULL in the field calculator,
labeling, and
symbology. The unused parameter was removed so the functions evaluate
correctly.
1.0.20 - Fix from end-to-end processing testing: Import from
Snowflake now stores TIMESTAMP/DATE/TIME columns correctly instead of
silently dropping every feature. Snowflake returns temporal values as
Python datetime objects, which the memory/OGR sink cannot store
directly;
they are now coerced to QDateTime/QDate/QTime, mirroring the existing
NUMBER (Decimal) handling.
1.0.19 - Fixes from end-to-end processing testing:
* Buffer (server-side) on GEOGRAPHY no longer freezes QGIS.
Snowflake's
optimizer produced a never-returning plan when ST_TRANSFORM and
ST_BUFFER
were fused in one expression; the reproject/buffer/reproject steps are
now
materialized into separate temporary tables.
* Import from Snowflake now stores numeric (NUMBER) values correctly
instead
of silently dropping every feature (Decimal values are coerced to
float).
* Connections set a bounded STATEMENT_TIMEOUT_IN_SECONDS so a stuck
query can
no longer block the UI indefinitely.
1.0.18 - Processing algorithms (Buffer, H3 index, Spatial join,
Execute SQL) now reuse the existing Snowflake connection instead of
force-closing and rebuilding it, fixing a UI freeze and the disruption
of
already-loaded layers when running an algorithm.
1.0.17 - Correctness and performance fixes from end-to-end testing:
integer/NUMBER columns (including primary keys) now display as
integers instead
of decimals; table layers reference their fully-qualified
database.schema.table
so counts/extent/queries no longer depend on the session's current
schema;
single-geometry layers use a cheaper feature count; field type names
now show
the Snowflake source type; and custom SQL-query layers no longer log a
misleading "primary key not verified" read-only reason.
1.0.16 - Packaging/metadata cleanup for the QGIS plugin repository:
remove the deprecated supportsQt6 flag (QGIS 4 compatibility is set
via
qgisMaximumVersion) and exclude the Sphinx help/make.bat from the
package so
it no longer trips the repository's suspicious-file scan.
1.0.15 - Fix layer load/rendering error at its root: remove a stray
sys.path entry that let the plugin modules import under two names,
causing a
ModuleNotFoundError in SFFeatureSource. Restores the canonical package
folder
name for the QGIS plugin repository.
1.0.14 - Packaging change (superseded by 1.0.15).
1.0.13 - Fix SNOW-3712094 auth-config reuse: load the stored config
with full=True so the connection alias is matched and the existing
authcfg id
is reused, instead of leaking a new QGIS auth config on every layer
creation.
1.0.12 - Fix plugin load failure ("cannot import name
'QgsSqlExpressionCompiler' from 'qgis.core'"): reimplement the
filter/subset
expression compiler as a pure-Python QgsExpression AST walker, since
QgsSqlExpressionCompiler is not exposed in the PyQGIS bindings.
Injection
protection and fail-safe fallback behaviour are preserved.
1.0.11 - Security hardening for QGIS plugin portal scan:
route all remaining raw identifier interpolation in
helpers/layer_creation.py
and tasks/sf_connect_task.py through quote_identifier / quote_literal
/
qualified_table_name; validate URL scheme and host before the GitHub
update
check in qgis_snowflake_connector.py; replace silent exception
swallowing in
the feature iterator and export algorithm with QgsMessageLog
diagnostics;
annotate already-sanitized SQL construction sites with documented
bandit
suppressions. No user-visible behaviour change.
1.0.10 - Refresh attribute table after edits without reopening the
layer;
advertise auto-increment default for numeric primary keys via
defaultValueClause();
add "Load all rows" option for tables exceeding the 50,000-row
visualization limit.

yes

snow

2026-10-21T18:31:44.338427+00:00

3.34.1

4.99.0

None

no

Version management

Plugin details