yield from cur._start_query(query)
pgq = cur._convert_query(query, params)
- cur._execute_send(pgq)
+ cur._execute_send(pgq, no_pqexec=True)
results = yield from execute(conn.pgconn)
- cur._execute_results(results)
+ if results[-1].status != pq.ExecStatus.COMMAND_OK:
+ cur._raise_from_results(results)
- # The above result is an COMMAND_OK. Get the cursor result shape
+ # The above result only returned COMMAND_OK. Get the cursor shape
yield from self._describe_gen(cur)
def _describe_gen(self, cur: BaseCursor[ConnectionType]) -> PQGen[None]:
def test_row_factory(conn):
+ n = 0
+
def my_row_factory(cur):
- return lambda values: [-v for v in values]
+ nonlocal n
+ n += 1
+ return lambda values: [n] + [-v for v in values]
cur = conn.cursor("foo", row_factory=my_row_factory)
- cur.execute("select generate_series(1, 3)")
- r = cur.fetchall()
- assert r == [[-1], [-2], [-3]]
+ cur.execute("select generate_series(1, 3)", scrollable=True)
+ rows = cur.fetchall()
+ cur.scroll(0, "absolute")
+ while 1:
+ row = cur.fetchone()
+ if not row:
+ break
+ rows.append(row)
+ assert rows == [[1, -1], [1, -2], [1, -3]] * 2
def test_rownumber(conn):
async def test_row_factory(aconn):
+ n = 0
+
def my_row_factory(cur):
- return lambda values: [-v for v in values]
+ nonlocal n
+ n += 1
+ return lambda values: [n] + [-v for v in values]
cur = aconn.cursor("foo", row_factory=my_row_factory)
- await cur.execute("select generate_series(1, 3)")
- r = await cur.fetchall()
- assert r == [[-1], [-2], [-3]]
+ await cur.execute("select generate_series(1, 3)", scrollable=True)
+ rows = await cur.fetchall()
+ await cur.scroll(0, "absolute")
+ while 1:
+ row = await cur.fetchone()
+ if not row:
+ break
+ rows.append(row)
+ assert rows == [[1, -1], [1, -2], [1, -3]] * 2
async def test_rownumber(aconn):