basic SQL functions
This commit is contained in:
parent
eaff01d689
commit
d285884090
184
atom
184
atom
@ -229,6 +229,190 @@ closeDatabase() {
|
|||||||
rm "$tempdir"/sqlite.{in,out}
|
rm "$tempdir"/sqlite.{in,out}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Select() {
|
||||||
|
#Select table [col1 [col2 [..]]] < WHERE_key WHERE_value
|
||||||
|
# [WHERE_key WHERE_value
|
||||||
|
# […]]
|
||||||
|
local \
|
||||||
|
table="$1" \
|
||||||
|
col \
|
||||||
|
columns \
|
||||||
|
results \
|
||||||
|
where_statement
|
||||||
|
shift
|
||||||
|
for col
|
||||||
|
do
|
||||||
|
(( ${#columns} )) && columns+=','
|
||||||
|
columns+="$col"
|
||||||
|
done
|
||||||
|
while read key value
|
||||||
|
do
|
||||||
|
(( ${#where_statement} )) && where_statement+=( "AND" )
|
||||||
|
if [[ $value == NULL ]]
|
||||||
|
then
|
||||||
|
where_statement+=( "$key is NULL" )
|
||||||
|
else
|
||||||
|
where_statement+=( "$key='$value'" )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "SELECT IFNULL(" \
|
||||||
|
"(SELECT $columns FROM $table" \
|
||||||
|
"WHERE ${where_statement[@]})" \
|
||||||
|
",'SQL::Select:not found'" \
|
||||||
|
");" >&3
|
||||||
|
read -u 4 results
|
||||||
|
if ! [[ $results == "SQL::Select:not found" ]]
|
||||||
|
then
|
||||||
|
echo "$results"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
Insert() {
|
||||||
|
#Insert table [no_id] < key value
|
||||||
|
# [key value
|
||||||
|
# […]]
|
||||||
|
local \
|
||||||
|
table="$1" \
|
||||||
|
no_id="${2:-0}" \
|
||||||
|
insert_keys \
|
||||||
|
insert_values \
|
||||||
|
results
|
||||||
|
while read key value
|
||||||
|
do
|
||||||
|
(( ${#insert_keys} )) && insert_keys+=","
|
||||||
|
insert_keys+='`'"$key"'`'
|
||||||
|
(( ${#insert_values} )) && insert_values+=","
|
||||||
|
if [[ $value == NULL ]]
|
||||||
|
then
|
||||||
|
insert_values+="NULL"
|
||||||
|
else
|
||||||
|
insert_values+='"'"${value//\"/\\\"}"'"'
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "INSERT INTO $table" \
|
||||||
|
"( $insert_keys )" \
|
||||||
|
"VALUES" \
|
||||||
|
"( $insert_values );" >&3
|
||||||
|
(( no_id )) || {
|
||||||
|
echo 'SELECT LAST_INSERT_ID();' >&3
|
||||||
|
read -u 4 results
|
||||||
|
echo "$results"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Update(){
|
||||||
|
#Update table set_key set_value [set_key set_value […]] < where_key where_value
|
||||||
|
# [where_key where_value
|
||||||
|
# […]]
|
||||||
|
local \
|
||||||
|
table="$1" \
|
||||||
|
key \
|
||||||
|
argument \
|
||||||
|
value \
|
||||||
|
set_statement \
|
||||||
|
where_keys \
|
||||||
|
where_values \
|
||||||
|
what \
|
||||||
|
where_statement \
|
||||||
|
results
|
||||||
|
shift
|
||||||
|
what=key
|
||||||
|
for argument
|
||||||
|
do
|
||||||
|
case $what in
|
||||||
|
key)
|
||||||
|
set_statement="${set_statement:+${set_statement+,}}\`$argument\`"
|
||||||
|
what=value
|
||||||
|
;;
|
||||||
|
value)
|
||||||
|
set_statement="${set_statement}='$argument'"
|
||||||
|
what=key
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
while read key value
|
||||||
|
do
|
||||||
|
(( ${#where_statement} )) && where_statement+=( "AND" )
|
||||||
|
if [[ $value == NULL ]]
|
||||||
|
then
|
||||||
|
where_statement+=( "$key is NULL" )
|
||||||
|
else
|
||||||
|
where_statement+=( "$key='$value'" )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "UPDATE '$table' SET" \
|
||||||
|
"$set_statement" \
|
||||||
|
"WHERE" \
|
||||||
|
"${where_statement[@]}" \
|
||||||
|
";" >&3
|
||||||
|
}
|
||||||
|
InsertOrUpdate() {
|
||||||
|
#InsertOrUpdate table set_key set_value [set_key set_value […]] < where_key where_value
|
||||||
|
# [where_key where_value
|
||||||
|
# […]]
|
||||||
|
local \
|
||||||
|
table="$1" \
|
||||||
|
argument \
|
||||||
|
key \
|
||||||
|
keys \
|
||||||
|
set_keys \
|
||||||
|
set_values \
|
||||||
|
value \
|
||||||
|
values \
|
||||||
|
what \
|
||||||
|
results
|
||||||
|
shift
|
||||||
|
what=key
|
||||||
|
for argument
|
||||||
|
do
|
||||||
|
case $what in
|
||||||
|
key)
|
||||||
|
set_keys+=( "$argument" )
|
||||||
|
what=value
|
||||||
|
;;
|
||||||
|
value)
|
||||||
|
set_values+=( "$argument" )
|
||||||
|
what=key
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
while read key value
|
||||||
|
do
|
||||||
|
keys+=( "$key" )
|
||||||
|
values+=( "$value" )
|
||||||
|
done
|
||||||
|
if results=$(
|
||||||
|
Select "$table" id < <(
|
||||||
|
for key in ${!keys[@]}
|
||||||
|
do
|
||||||
|
echo "${keys[$key]}" "${values[$key]}"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
)
|
||||||
|
then
|
||||||
|
Update "$table" "$@" < <(
|
||||||
|
for key in ${!keys[@]}
|
||||||
|
do
|
||||||
|
echo "${keys[$key]}" "${values[$key]}"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
else
|
||||||
|
results=$(
|
||||||
|
Insert "$table" < <(
|
||||||
|
for key in ${!set_keys[@]}
|
||||||
|
do
|
||||||
|
echo "${set_keys[$key]}" "${set_values[$key]}"
|
||||||
|
done
|
||||||
|
for key in ${!keys[@]}
|
||||||
|
do
|
||||||
|
echo "${keys[$key]}" "${values[$key]}"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
echo "$results"
|
||||||
|
}
|
||||||
|
|
||||||
getFiles() {
|
getFiles() {
|
||||||
:
|
:
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user