Skip to content

Instantly share code, notes, and snippets.

@olymk2
Last active February 19, 2024 10:06
Show Gist options
  • Save olymk2/c2968f3b3bbe8dacb380af646ec4cf9d to your computer and use it in GitHub Desktop.
Save olymk2/c2968f3b3bbe8dacb380af646ec4cf9d to your computer and use it in GitHub Desktop.
Adding completing read to sqlite-mode-extras-edit-row-field
(defun sqlite-mode-extras-completing-read-field (table column)
"Do a grouped select to get some completion candidates"
(delq nil (flatten-tree (sqlite-execute
sqlite--db
(format "SELECT %s FROM %s GROUP BY %s limit 100"
column
table
column)))))
(defun sqlite-mode-extras-edit-row-field ()
"Edit current row's field."
(interactive)
(when-let* ((table (sqlite-mode-extras--type-property-at-point))
(row (sqlite-mode-extras--row-property-at-point))
(columns (sqlite-mode-extras--table-header-column-details
(sqlite-mode-extras--table-header-line)))
(column (sqlite-mode-extras--resolve-table-column))
(value (if (numberp (sqlite-mode-extras--row-field-value-at-point))
(read-number (format "%s: " column)
(sqlite-mode-extras--row-field-value-at-point))
(let ((completions (sqlite-mode-extras-completing-read-field (cdr table) column )))
(princ completions)
(completing-read (format "%s: " column)
completions
nil
nil
(sqlite-mode-extras--row-field-value-at-point))))))
(unless (string-equal (car (seq-first columns)) "id")
(error "First row must be 'id'"))
(sqlite-execute
sqlite--db
(format "UPDATE %s SET %s = ? WHERE rowid = ?"
(cdr table)
column)
(list value (car row)))
(sqlite-mode-extras-refresh)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment