Advertisement
freswinn

GDScript: 2shady4u GODOT SQLite, update_rows workaround

Jan 7th, 2023 (edited)
2,380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ## The purpose of this method is to replace the GODOT SQLite [method update_rows] method.[br]
  2. ## It allows for NULL entries into the database by leaving strings empty or by making values [code]null[/code].
  3. ## And unlike the [method update_rows] method, you do not have to wrap anything in quotation marks yourself.
  4. func update_values(table : String, criteria : Dictionary, values_to_change : Dictionary, verbose : bool = true):
  5.     var _wrap := func(a : Array, allow_null : bool = false) -> Array:
  6.         for i in range(a.size()):
  7.             if a[i] is String:
  8.                 a[i] = "\"%s\"" % a[i]
  9.             if allow_null and ((a[i] is String and a[i] == "") or a[i] == null):
  10.                 a[i] = "NULL" # This intentionally leaves off escaped quotation marks to make the value actually NULL in the database.
  11.         return a
  12.    
  13.     var _string := func(keys : Array, vals : Array, separator : String) -> String:
  14.         var out : String = ""
  15.         for i in range(keys.size()):
  16.             out += "%s = %s" % [keys[i], str(vals[i]) + separator]
  17.         out = out.rstrip(separator)
  18.         return out
  19.    
  20.     if " " in table:    table = "'%s'" % table
  21.    
  22.     var criteria_keys : Array = criteria.keys()
  23.     var criteria_vals : Array
  24.     for i in criteria_keys:     criteria_vals.append(criteria[i])
  25.     criteria_keys = _wrap.call(criteria_keys)
  26.     criteria_vals = _wrap.call(criteria_vals)
  27.    
  28.     var changes_keys : Array = values_to_change.keys()
  29.     var changes_vals : Array
  30.     for i in changes_keys:      changes_vals.append(values_to_change[i])
  31.     changes_keys = _wrap.call(changes_keys)
  32.     changes_vals = _wrap.call(changes_vals, true)
  33.    
  34.     var criteria_string : String = _string.call(criteria_keys, criteria_vals, " AND ")
  35.     var valchange_string : String = _string.call(changes_keys, changes_vals, ", ")
  36.    
  37.     var q = "UPDATE %s SET %s WHERE %s;" % [table, valchange_string, criteria_string]
  38.     if verbose:     I.say(q)
  39.     db.query(q)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement