Opened 6 years ago

Last modified 5 years ago

#3490 new defect

pygrass: improve error messages for table handling

Reported by: sbl Owned by: grass-dev@…
Priority: normal Milestone: 7.6.2
Component: Python Version: unspecified
Keywords: pygrass, vector, SQLite Cc:
CPU: All Platform: All

Description

When I try to create a new vector map in pygrass where columns in the attribute table (SQLite) contain "." (e.g. "landsatIm.5") new.open() fails saying first that table exisits and then that it does not exist:

Traceback (most recent call last):
  File "/home/NINA.NO/stefan.blumentrath/.grass7/addons/scripts/i.pysptools.unmix", line 329, in <module>
    sys.exit(main())
  File "/home/NINA.NO/stefan.blumentrath/.grass7/addons/scripts/i.pysptools.unmix", line 272, in main
    new.open('w', tab_name=endmembers, tab_cols=cols)
  File "/home/NINA.NO/stefan.blumentrath/grass-7.4.0svn/etc/python/grass/pygrass/vector/abstract.py", line 381, in open
    self.n_lines = self.table.n_rows()
  File "/home/NINA.NO/stefan.blumentrath/grass-7.4.0svn/etc/python/grass/pygrass/vector/table.py", line 1053, in n_rows
    cur.execute(sql.SELECT.format(cols='Count(*)', tname=self.name))
sqlite3.OperationalError: no such table: test_end

However, after a bit of troubleshooting, I realized that the dots were causing the issue. Would be helpful if pygrass could check for "GRASS compliant" column names and give more specific error messages. An alternative could be to support quoted identifiers throughout the code, but that is probably a too big effort (or something for GRASS 8?)...

Change History (3)

comment:1 by sbl, 6 years ago

See also: #3071 regarding effects of not quoting SQL identifiers...

comment:2 by martinl, 6 years ago

Milestone: 7.2.4

comment:3 by sbl, 5 years ago

Milestone: 7.2.47.6.2
Note: See TracTickets for help on using tickets.