@@ -952,10 +952,14 @@ def insert_upsert_implementation(
952952 functions = None ,
953953 strict = False ,
954954):
955+ convert = _value_or_none (convert )
956+ delimiter = _value_or_none (delimiter )
957+ quotechar = _value_or_none (quotechar )
958+ encoding = _value_or_none (encoding )
959+ bulk_sql = _value_or_none (bulk_sql )
955960 db = sqlite_utils .Database (path )
956961 _load_extensions (db , load_extension )
957- if functions :
958- _register_functions (db , functions )
962+ _maybe_register_functions (db , functions )
959963 if (delimiter or quotechar or sniff or no_headers ) and not tsv :
960964 csv = True
961965 if (nl + csv + tsv ) >= 2 :
@@ -1790,8 +1794,7 @@ def query(
17901794 _load_extensions (db , load_extension )
17911795 db .register_fts4_bm25 ()
17921796
1793- if functions :
1794- _register_functions (db , functions )
1797+ _maybe_register_functions (db , functions )
17951798
17961799 _execute_query (
17971800 db ,
@@ -1917,6 +1920,9 @@ def memory(
19171920 \b
19181921 sqlite-utils memory animals.csv --schema
19191922 """
1923+ sql = _value_or_none (sql )
1924+ save = _value_or_none (save )
1925+ encoding = _value_or_none (encoding )
19201926 db = sqlite_utils .Database (memory = True )
19211927
19221928 # If --dump or --save or --analyze used but no paths detected, assume SQL query is a path:
@@ -1990,8 +1996,7 @@ def memory(
19901996 _load_extensions (db , load_extension )
19911997 db .register_fts4_bm25 ()
19921998
1993- if functions :
1994- _register_functions (db , functions )
1999+ _maybe_register_functions (db , functions )
19952000
19962001 if return_db :
19972002 return db
@@ -3286,3 +3291,17 @@ def _register_functions(db, functions):
32863291 for name , value in globals .items ():
32873292 if callable (value ) and not name .startswith ("_" ):
32883293 db .register_function (value , name = name )
3294+
3295+
3296+ def _value_or_none (value ):
3297+ if getattr (value , "__class__" , None ).__name__ == "Sentinel" :
3298+ return None
3299+ return value
3300+
3301+
3302+ def _maybe_register_functions (db , functions ):
3303+ functions = _value_or_none (functions )
3304+ if isinstance (functions , (bytes , bytearray )):
3305+ functions = functions .decode ("utf-8" )
3306+ if isinstance (functions , str ) and functions .strip ():
3307+ _register_functions (db , functions )
0 commit comments