Subject: bug#73412: 31.0.50; Improve sql-read-product

From: Stephen Berman <[email-masked]>
Date: Sat, 21 Sep 2024 16:32:16 +0200

0. emacs -Q
1. C-u M-x sql-product-interactive RET

Now the minbuffer displays the following:

SQL product: ansi

so it you want to change the product, e.g. to postgres, you first have
to delete "ansi".

Likewise, `M-x sql-set-product RET' produces the same minbuffer display,
requiring deletion to change the product.

The reason "ansi" is displayed after the prompt is that the definition
of sql-read-product uses the same non-nil value of the deprecated
argument INITIAL-INPUT as is used for the argument DEF.  The attached
patch makes INITIAL-INPUT nil, thus using only DEF, and also wraps the
prompt argument of sql-read-product in format-prompt, so the default
value is shown as part of the prompt and changing it does not require
deletion.  The patch also adjusts the two callers of sql-read-product
accordingly.

In GNU Emacs 31.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version
 3.24.43, cairo version 1.18.2) of 2024-09-12 built on strobelfssd
Repository revision: 31e8500b061b6963708e66468fc89db1006226d7
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101013
System Description: Linux From Scratch r12.2-5-systemd

Configured using:
 'configure -C 'CFLAGS=-Og -g3''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG
RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index 5273ba2bee1..a0b350ce54f 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -2666,11 +2666,11 @@ sql-read-product
   "Read a valid SQL product."
   (let ((init (or (and initial (symbol-name initial)) "ansi")))
     (intern (completing-read
-             prompt
+             (format-prompt prompt init)
              (mapcar (lambda (info) (symbol-name (car info)))
                      sql-product-alist)
              nil 'require-match
-             init 'sql-product-history init))))
+             nil 'sql-product-history init))))

 (defun sql-add-product (product display &rest plist)
   "Add support for a database product in `sql-mode'.
@@ -2912,7 +2912,7 @@ sql-highlight-product
 (defun sql-set-product (product)
   "Set `sql-product' to PRODUCT and enable appropriate highlighting."
   (interactive
-   (list (sql-read-product "SQL product: ")))
+   (list (sql-read-product "SQL product")))
   (if (stringp product) (setq product (intern product)))
   (when (not (assoc product sql-product-alist))
     (user-error "SQL product %s is not supported; treated as ANSI" product)
@@ -4546,7 +4546,7 @@ sql-product-interactive
   (setq product
         (cond
          ((= (prefix-numeric-value product) 4) ; C-u, prompt for product
-          (sql-read-product "SQL product: " sql-product))
+          (sql-read-product "SQL product" sql-product))
          ((assoc product sql-product-alist) ; Product specified
           product)
          (t sql-product)))              ; Default to sql-product