Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SQLError - too many SQL variables on table with 1000 columns #466

Open
leocasarsa opened this issue Jul 19, 2016 · 5 comments
Open

SQLError - too many SQL variables on table with 1000 columns #466

leocasarsa opened this issue Jul 19, 2016 · 5 comments

Comments

@leocasarsa
Copy link
Contributor

leocasarsa commented Jul 19, 2016

Ran on casarsa@probcomp2
venv: ~/venv/20160706-july
Max sqlite columns on the machine: 2000 with this script
Script bayeslite_bug.py:

import bayeslite
import pandas as pd
import numpy as np

from bdbcontrib import bql_utils
from bdbcontrib import Population

data = pd.DataFrame(np.random.rand(180,1000))
temp_bdb_path = 'foo.bdb'
with bayeslite.bayesdb_open(temp_bdb_path)  as bdb:
    bql_utils.query(bdb,'''drop generator if exists temp_cc''')
    bql_utils.query(bdb,'''drop table if exists temp''')

    bayeslite.read_pandas.bayesdb_read_pandas_df(bdb, "temp", data, create=True)
    population = Population(name='temp', bdb_path=temp_bdb_path,
                            session_capture_name=False)
(20160706-july) casarsa@probcomp-2:~/Share/populations$ python bayeslite_bug.py --pdb 
/scratch/home/casarsa/venv/20160706-july/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
  SNIMissingWarning
/scratch/home/casarsa/venv/20160706-july/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Traceback (most recent call last):
  File "bayeslite_bug.py", line 14, in <module>
    bayeslite.read_pandas.bayesdb_read_pandas_df(bdb, "temp", data, create=True)
  File "/scratch/home/casarsa/venv/20160706-july/local/lib/python2.7/site-packages/bayeslite/read_pandas.py", line 86, in bayesdb_read_pandas_df
    bdb.sql_execute(sql, (key,) + tuple(df.ix[i]))
  File "/scratch/home/casarsa/venv/20160706-july/local/lib/python2.7/site-packages/bayeslite/bayesdb.py", line 281, in sql_execute
    self.sql_tracer, self._do_sql_execute, string, bindings)
  File "/scratch/home/casarsa/venv/20160706-july/local/lib/python2.7/site-packages/bayeslite/bayesdb.py", line 223, in _maybe_trace
    return meth(string, bindings)
  File "/scratch/home/casarsa/venv/20160706-july/local/lib/python2.7/site-packages/bayeslite/bayesdb.py", line 285, in _do_sql_execute
    cursor.execute(string, bindings)
  File "src/cursor.c", line 1019, in APSWCursor_execute.sqlite3_prepare
  File "src/statementcache.c", line 386, in sqlite3_prepare
apsw.SQLError: SQLError: too many SQL variables
@riastradh-probcomp
Copy link
Contributor

If we recompile sqlite3 ourselves, we can increase this up to 32767 by defining SQLITE_MAX_COLUMN at compile-time. But I'm not sure bayeslite is ready to handle even 2000 variables at the moment!

@Schaechtle
Copy link
Collaborator

I have been bitten by this too - having only 1680 columns. I ran the script that Leo attached above and it also indicated max columns to be 2000 (probcomp3). I also searched the bayeslite repo for code that sets the SQLITE_MAX_COLUMN parameter - but I didn't find anything.

@Schaechtle
Copy link
Collaborator

same is true 1500 columns.

@riastradh-probcomp
Copy link
Contributor

I'm a little surprised you see a problem with 2000 variables -- though perhaps there is some intermediate table that has 2n columns or something. Can you get a SQL trace to find the query that caused sqlite3 to choke? Something like:

import sys
def trace(q, p): print >>sys.stderr, q, p
bdb.sql_trace(trace)
...whatever you were doing before...
bdb.sql_untrace(trace)

@arpit1997
Copy link

hey i got the same error as @leocasarsa

  File "/usr/local/lib/python2.7/site-packages/bayeslite/bayesdb.py", line 281, in sql_execute
    self.sql_tracer, self._do_sql_execute, string, bindings)
  File "/usr/local/lib/python2.7/site-packages/bayeslite/bayesdb.py", line 223, in _maybe_trace
    return meth(string, bindings)
  File "/usr/local/lib/python2.7/site-packages/bayeslite/bayesdb.py", line 285, in _do_sql_execute
    cursor.execute(string, bindings)
  File "src/cursor.c", line 1019, in APSWCursor_execute.sqlite3_prepare
  File "src/statementcache.c", line 386, in sqlite3_prepare
apsw.SQLError: SQLError: too many SQL variables

Actually i tried to reproduce it and it is there so if anyone can suggest the changes that would be nice.
😸

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants