diff mbox series

[v2] sqlhist: Add bash completion for the sqlhist utility

Message ID 20250410212353.2ab84d07@gandalf.local.home (mailing list archive)
State Accepted
Commit e2e0b4d3d9bc2ab4d4508cb8bab6cdddf6d78a0e
Headers show
Series [v2] sqlhist: Add bash completion for the sqlhist utility | expand

Commit Message

Steven Rostedt April 11, 2025, 1:23 a.m. UTC
From: "Steven Rostedt (Google)" <rostedt@goodmis.org>

Add a bash completion script for the sqlhist utility that utilizes the
tracefs_sql.bash completion script to fill out the sql lines.

Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
Changes since v1: https://lore.kernel.org/all/20250410114837.144cec8e@gandalf.local.home/

- Updated to call the renamed tracefs_sql_completion()

 samples/sqlhist.bash | 61 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 samples/sqlhist.bash
diff mbox series

Patch

diff --git a/samples/sqlhist.bash b/samples/sqlhist.bash
new file mode 100644
index 0000000..f5d7d5c
--- /dev/null
+++ b/samples/sqlhist.bash
@@ -0,0 +1,61 @@ 
+# sqlhist completion
+
+# use the library tracefs_sql() completion
+
+thisdir=`dirname $BASH_SOURCE`
+if [ -e $thisdir/tracefs_sql.bash ]; then
+. $thisdir/tracefs_sql.bash
+elif [ -e $thisdir/../src/tracefs_sql.bash ]; then
+. $thisdir/../src/tracefs_sql.bash
+else
+tracefs_sql_completion()
+{
+    return
+}
+fi
+
+found_select()
+{
+    local words=("$@")
+    local i=$COMP_CWORD
+
+    while [ $i -gt 0 ]; do
+	let i=$i-1
+	local w=$(echo ${words[$i]} | tr A-Z a-z)
+	if [ $w == "select" ]; then
+	    return 0
+	fi
+    done
+    return 1
+}
+
+_sqlhist_complete()
+{
+    local cur=""
+    local prev=""
+    local words=()
+
+    # Not to use COMP_WORDS to avoid buggy behavior of Bash when
+    # handling with words including ":", like:
+    #
+    # prev="${COMP_WORDS[COMP_CWORD-1]}"
+    # cur="${COMP_WORDS[COMP_CWORD]}"
+    #
+    # Instead, we use _get_comp_words_by_ref() magic.
+    _get_comp_words_by_ref -n : cur prev words
+
+    if `found_select ${words[@]}` ; then
+	tracefs_sql_completion "$prev" "$cur" ${words[@]}
+	return
+    fi
+    local cmds=$(sqlhist -h 2>&1 | \
+                     grep '^ *-' | sed -e 's/^ *\(-[^ ]*\).*/\1/')
+    COMPREPLY=( $(compgen -W "${cmds} SELECT" -- "${cur}") )
+    if [ ${#COMPREPLY[@]} -eq 0 ]; then
+	local w="select"
+	if [ "$w" != "${w##$cur}" ]; then
+	    COMPREPLY=("$w")
+	fi
+    fi
+}
+complete -F _sqlhist_complete sqlhist