Howdy. I've recently started using monetdb and was testing out the
python3-monetdb module with the 'quick start' voc dataset. I'm not
grokking the purpose of cursor.scroll() if it's working as
intended. I am getting weird (to me) results, which I'm including
below.
Running 11.17.17-20140514 of the server, client, and python module
under Ubuntu 14.04 LTS.
My example starts at this point in the quick start guide (but in python):
sql>SELECT type, COUNT(*) AS total
I loaded this snippet into the python3 interpreter:
from monetdb import sql
def p(c):
print('.rowcnt={}, .__offset={}, .rownumber={}'.format (
c.rowcount, c._Cursor__offset, c.rownumber))
print ('.__rows={}'.format (c._Cursor__rows))
db = sql.connect(database='voc', user='voc', password='voc')
cursor = db.cursor()
# Set the arraysize small so it traverses result sets,
# though it doesn't matter for the problem I'm seeing.
cursor.arraysize = 2
cursor.execute("SELECT type, COUNT(*) AS total FROM onboard_people GROUP BY
type ORDER BY type;")
Then proceeded with this interactive session. Consecutive
fetchone()'s seem to work properly; it traverses to the second
result set. Where I get confused is when I .scroll():
>>> p(cursor)
.rowcnt=6, .__offset=0, .rownumber=0
.__rows=[('craftsmen', 2349), ('impotenten', 938)]
>>> cursor.fetchone()
('craftsmen', 2349)
>>> p(cursor)
.rowcnt=6, .__offset=0, .rownumber=1
.__rows=[('craftsmen', 2349), ('impotenten', 938)]
>>> cursor.fetchone()
('impotenten', 938)
>>> p(cursor)
.rowcnt=6, .__offset=0, .rownumber=2
.__rows=[('craftsmen', 2349), ('impotenten', 938)]
>>> cursor.fetchone()
('passengers', 2813)
>>> p(cursor)
.rowcnt=6, .__offset=2, .rownumber=3
.__rows=[('passengers', 2813), ('seafarers', 4468)]
# Here's where I scroll back to the beginning. The
# offset changes, but the rownumber doesn't.
>>> cursor.scroll (0, mode='absolute')
>>> p(cursor)
.rowcnt=6, .__offset=0, .rownumber=3
.__rows=[('craftsmen', 2349), ('impotenten', 938), ('passengers', 2813),
('seafarers', 4468), ('soldiers', 4177)]
# My expectation was that this would be ('craftsmen', 2349),
# but it continues as if I didn't scroll.
>>> cursor.fetchone()
('seafarers', 4468)
# I try to back to the last item with no luck, it instead
# marches forward to the next item as if I didn't scroll.
>>> cursor.scroll (-1, mode='relative')
>>> p(cursor)
.rowcnt=6, .__offset=3, .rownumber=4
.__rows=[('seafarers', 4468), ('soldiers', 4177), ('total', 2467)]
>>> cursor.fetchone()
('soldiers', 4177)
Am I using the .scroll() wrong? Is this a bug?
Thanks,
Chris