#32935: Test suite fails with sqlite 3.36 and spatialite 5.
-----------------------------+--------------------------------------
     Reporter:  David Smith  |                    Owner:  nobody
         Type:  Bug          |                   Status:  closed
    Component:  GIS          |                  Version:  3.2
     Severity:  Normal       |               Resolution:  needsinfo
     Keywords:               |             Triage Stage:  Unreviewed
    Has patch:  0            |      Needs documentation:  0
  Needs tests:  0            |  Patch needs improvement:  0
Easy pickings:  0            |                    UI/UX:  0
-----------------------------+--------------------------------------

Comment (by S. Andrew Sheppard):

 Yes, InitSpatialMetaDataFull would remain as the preferred option.  The
 fallback would be only for systems like Ubuntu 22.04 where using
 InitSpatialMetaDataFull per the docs is not an option, because the
 implementation in spatialite 5.0.1 (the latest released version) is
 incompatible with sqlite 3.36 (and newer versions).  In spite of the stern
 warning on the PROJ.6 page, other parts of the documentation explain that
 InitSpatialMetaDataFull and InitSpatialMetaData are highly compatible:

 https://www.gaia-gis.it/fossil/libspatialite/wiki?name=Upgrading+existing
 +DB-files+to+5.0.0

 Basically, it seems that the 5.0 schema created by InitSpatialMetaDataFull
 is the same as the 4.0 schema created by InitSpatialMetaData, but with
 additional tables needed to support librasterlite2.  Many GeoDjango users
 will probably be fine without raster support, so falling back to
 InitSpatialMetaData seems like it should be reasonable for most cases.

 That said, it is fair to argue that initializing a database with Django
 and spatialite 5.0 should result in a full 5.0-compatible schema.
 Fortunately, it appears that the CreateMissingSystemTables method also
 described in that documentation does not break, so it could be used as
 part of the fallback.  Perhaps something like this would be appropriate:

 {{{
             cursor.execute("PRAGMA table_info(geometry_columns);")
             if cursor.fetchall() == []:
                 if self.ops.spatial_version < (5,):
                     cursor.execute("SELECT InitSpatialMetaData(1)")
                 else:
                     try:
                         cursor.execute("SELECT
 InitSpatialMetaDataFull(1)")
                     except OperationalError as e:
                         if "ISO_metadata_reference_row_id_value_insert" in
 e.args[0]:
                            # Workaround for sqlite 3.36 and spatialite
 5.0.1
                            cursor.execute("SELECT InitSpatialMetaData(1)")
                            cursor.execute("SELECT
 CreateMissingSystemTables(1)")
                         else:
                             raise
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/32935#comment:8>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/010701849a42e763-a0622498-c097-48e8-952b-f49279052c79-000000%40eu-central-1.amazonses.com.

Reply via email to