PRAGMA foreign_keys=ON by default
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.7.4-stable+timestamp.2013.10.19.17.40.27
|
Version 2.7.4-stable+timestamp.2013.10.20.15.42.03
|
||||||
|
|||||||
@@ -186,6 +186,10 @@ def select():
|
|||||||
import re
|
import re
|
||||||
db = get_database(request)
|
db = get_database(request)
|
||||||
dbname = request.args[0]
|
dbname = request.args[0]
|
||||||
|
try:
|
||||||
|
is_imap = db._uri.startswith("imap://")
|
||||||
|
except (KeyError, AttributeError, TypeError):
|
||||||
|
is_imap = False
|
||||||
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>\d+)')
|
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>\d+)')
|
||||||
if len(request.args) > 1 and hasattr(db[request.args[1]], '_primarykey'):
|
if len(request.args) > 1 and hasattr(db[request.args[1]], '_primarykey'):
|
||||||
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>.+)')
|
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>.+)')
|
||||||
@@ -203,7 +207,15 @@ def select():
|
|||||||
else:
|
else:
|
||||||
start = 0
|
start = 0
|
||||||
nrows = 0
|
nrows = 0
|
||||||
stop = start + 100
|
|
||||||
|
step = 100
|
||||||
|
fields = []
|
||||||
|
|
||||||
|
if is_imap:
|
||||||
|
step = 3
|
||||||
|
|
||||||
|
stop = start + step
|
||||||
|
|
||||||
table = None
|
table = None
|
||||||
rows = []
|
rows = []
|
||||||
orderby = request.vars.orderby
|
orderby = request.vars.orderby
|
||||||
@@ -244,12 +256,18 @@ def select():
|
|||||||
db(query, ignore_common_filters=True).delete()
|
db(query, ignore_common_filters=True).delete()
|
||||||
response.flash = T('%s %%{row} deleted', nrows)
|
response.flash = T('%s %%{row} deleted', nrows)
|
||||||
nrows = db(query, ignore_common_filters=True).count()
|
nrows = db(query, ignore_common_filters=True).count()
|
||||||
|
|
||||||
|
if is_imap:
|
||||||
|
fields = [db[table][name] for name in
|
||||||
|
("id", "uid", "created", "to",
|
||||||
|
"sender", "subject")]
|
||||||
if orderby:
|
if orderby:
|
||||||
rows = db(query, ignore_common_filters=True).select(limitby=(
|
rows = db(query, ignore_common_filters=True).select(
|
||||||
start, stop), orderby=eval_in_global_env(orderby))
|
*fields, limitby=(start, stop),
|
||||||
|
orderby=eval_in_global_env(orderby))
|
||||||
else:
|
else:
|
||||||
rows = db(query, ignore_common_filters=True).select(
|
rows = db(query, ignore_common_filters=True).select(
|
||||||
limitby=(start, stop))
|
*fields, limitby=(start, stop))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
import traceback
|
import traceback
|
||||||
tb = traceback.format_exc()
|
tb = traceback.format_exc()
|
||||||
@@ -278,11 +296,12 @@ def select():
|
|||||||
table=table,
|
table=table,
|
||||||
start=start,
|
start=start,
|
||||||
stop=stop,
|
stop=stop,
|
||||||
|
step=step,
|
||||||
nrows=nrows,
|
nrows=nrows,
|
||||||
rows=rows,
|
rows=rows,
|
||||||
query=request.vars.query,
|
query=request.vars.query,
|
||||||
formcsv=formcsv,
|
formcsv=formcsv,
|
||||||
tb=tb,
|
tb=tb
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,8 +62,8 @@
|
|||||||
{{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}</p>
|
{{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}</p>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<h4>{{=T("%s selected", nrows)}}</h4>
|
<h4>{{=T("%s selected", nrows)}}</h4>
|
||||||
{{if start>0:}}{{=A(T('previous 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start-100)),_class="btn")}}{{pass}}
|
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
||||||
{{if stop<nrows:}}{{=A(T('next 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start+100)),_class="btn")}}{{pass}}
|
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
||||||
{{if rows:}}
|
{{if rows:}}
|
||||||
<div style="overflow: auto;" width="80%">
|
<div style="overflow: auto;" width="80%">
|
||||||
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
||||||
|
|||||||
@@ -186,6 +186,10 @@ def select():
|
|||||||
import re
|
import re
|
||||||
db = get_database(request)
|
db = get_database(request)
|
||||||
dbname = request.args[0]
|
dbname = request.args[0]
|
||||||
|
try:
|
||||||
|
is_imap = db._uri.startswith("imap://")
|
||||||
|
except (KeyError, AttributeError, TypeError):
|
||||||
|
is_imap = False
|
||||||
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>\d+)')
|
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>\d+)')
|
||||||
if len(request.args) > 1 and hasattr(db[request.args[1]], '_primarykey'):
|
if len(request.args) > 1 and hasattr(db[request.args[1]], '_primarykey'):
|
||||||
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>.+)')
|
regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>.+)')
|
||||||
@@ -203,7 +207,15 @@ def select():
|
|||||||
else:
|
else:
|
||||||
start = 0
|
start = 0
|
||||||
nrows = 0
|
nrows = 0
|
||||||
stop = start + 100
|
|
||||||
|
step = 100
|
||||||
|
fields = []
|
||||||
|
|
||||||
|
if is_imap:
|
||||||
|
step = 3
|
||||||
|
|
||||||
|
stop = start + step
|
||||||
|
|
||||||
table = None
|
table = None
|
||||||
rows = []
|
rows = []
|
||||||
orderby = request.vars.orderby
|
orderby = request.vars.orderby
|
||||||
@@ -244,12 +256,18 @@ def select():
|
|||||||
db(query, ignore_common_filters=True).delete()
|
db(query, ignore_common_filters=True).delete()
|
||||||
response.flash = T('%s %%{row} deleted', nrows)
|
response.flash = T('%s %%{row} deleted', nrows)
|
||||||
nrows = db(query, ignore_common_filters=True).count()
|
nrows = db(query, ignore_common_filters=True).count()
|
||||||
|
|
||||||
|
if is_imap:
|
||||||
|
fields = [db[table][name] for name in
|
||||||
|
("id", "uid", "created", "to",
|
||||||
|
"sender", "subject")]
|
||||||
if orderby:
|
if orderby:
|
||||||
rows = db(query, ignore_common_filters=True).select(limitby=(
|
rows = db(query, ignore_common_filters=True).select(
|
||||||
start, stop), orderby=eval_in_global_env(orderby))
|
*fields, limitby=(start, stop),
|
||||||
|
orderby=eval_in_global_env(orderby))
|
||||||
else:
|
else:
|
||||||
rows = db(query, ignore_common_filters=True).select(
|
rows = db(query, ignore_common_filters=True).select(
|
||||||
limitby=(start, stop))
|
*fields, limitby=(start, stop))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
import traceback
|
import traceback
|
||||||
tb = traceback.format_exc()
|
tb = traceback.format_exc()
|
||||||
@@ -278,11 +296,12 @@ def select():
|
|||||||
table=table,
|
table=table,
|
||||||
start=start,
|
start=start,
|
||||||
stop=stop,
|
stop=stop,
|
||||||
|
step=step,
|
||||||
nrows=nrows,
|
nrows=nrows,
|
||||||
rows=rows,
|
rows=rows,
|
||||||
query=request.vars.query,
|
query=request.vars.query,
|
||||||
formcsv=formcsv,
|
formcsv=formcsv,
|
||||||
tb=tb,
|
tb=tb
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,8 +62,8 @@
|
|||||||
{{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}</p>
|
{{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}</p>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<h4>{{=T("%s selected", nrows)}}</h4>
|
<h4>{{=T("%s selected", nrows)}}</h4>
|
||||||
{{if start>0:}}{{=A(T('previous 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start-100)),_class="btn")}}{{pass}}
|
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
||||||
{{if stop<nrows:}}{{=A(T('next 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start+100)),_class="btn")}}{{pass}}
|
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
||||||
{{if rows:}}
|
{{if rows:}}
|
||||||
<div style="overflow: auto;" width="80%">
|
<div style="overflow: auto;" width="80%">
|
||||||
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ response.generic_patterns = ['*'] if request.is_local else []
|
|||||||
## (optional) optimize handling of static files
|
## (optional) optimize handling of static files
|
||||||
# response.optimize_css = 'concat,minify,inline'
|
# response.optimize_css = 'concat,minify,inline'
|
||||||
# response.optimize_js = 'concat,minify,inline'
|
# response.optimize_js = 'concat,minify,inline'
|
||||||
|
## (optional) static assets folder versioning
|
||||||
|
# response.static_version = '0.0.0'
|
||||||
#########################################################################
|
#########################################################################
|
||||||
## Here is sample code if you need for
|
## Here is sample code if you need for
|
||||||
## - email capabilities
|
## - email capabilities
|
||||||
|
|||||||
+3
-1
@@ -2248,6 +2248,8 @@ class SQLiteAdapter(BaseAdapter):
|
|||||||
self.db = db
|
self.db = db
|
||||||
self.dbengine = "sqlite"
|
self.dbengine = "sqlite"
|
||||||
self.uri = uri
|
self.uri = uri
|
||||||
|
if adapter_args.get('foreign_keys',True) and not after_connection:
|
||||||
|
after_connection = lambda db: db.execute('PRAGMA foreign_keys=ON;')
|
||||||
if do_connect: self.find_driver(adapter_args)
|
if do_connect: self.find_driver(adapter_args)
|
||||||
self.pool_size = 0
|
self.pool_size = 0
|
||||||
self.folder = folder
|
self.folder = folder
|
||||||
@@ -2271,7 +2273,7 @@ class SQLiteAdapter(BaseAdapter):
|
|||||||
if not 'detect_types' in driver_args and do_connect:
|
if not 'detect_types' in driver_args and do_connect:
|
||||||
driver_args['detect_types'] = self.driver.PARSE_DECLTYPES
|
driver_args['detect_types'] = self.driver.PARSE_DECLTYPES
|
||||||
def connector(dbpath=self.dbpath, driver_args=driver_args):
|
def connector(dbpath=self.dbpath, driver_args=driver_args):
|
||||||
return self.driver.Connection(dbpath, **driver_args)
|
return self.driver.Connection(dbpath, **driver_args)
|
||||||
self.connector = connector
|
self.connector = connector
|
||||||
if do_connect: self.reconnect()
|
if do_connect: self.reconnect()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user