Flexible WHERE clauses
This commit is contained in:
parent
48716f3251
commit
38d248af42
41
atom
41
atom
@ -231,13 +231,14 @@ closeDatabase() {
|
||||
}
|
||||
|
||||
Select() {
|
||||
#Select table [col1 [col2 [..]]] < WHERE_key WHERE_value
|
||||
# [WHERE_key WHERE_value
|
||||
#Select table [col1 [col2 [..]]] < WHERE_key WHERE_operator WHERE_value
|
||||
# [WHERE_key WHERE_operator WHERE_value
|
||||
# […]]
|
||||
local \
|
||||
table="$1" \
|
||||
col \
|
||||
columns \
|
||||
operator \
|
||||
results \
|
||||
where_statement
|
||||
shift
|
||||
@ -246,15 +247,10 @@ Select() {
|
||||
(( ${#columns} )) && columns+=','
|
||||
columns+="$col"
|
||||
done
|
||||
while read key value
|
||||
while read key operator value
|
||||
do
|
||||
(( ${#where_statement} )) && where_statement+=( "AND" )
|
||||
if [[ $value == NULL ]]
|
||||
then
|
||||
where_statement+=( "$key is NULL" )
|
||||
else
|
||||
where_statement+=( "$key="'"'"${value//\"/\\\"}"'"' )
|
||||
fi
|
||||
where_statement+=( "$key $operator "'"'"${value//\"/\\\"}"'"' )
|
||||
done
|
||||
echo "SELECT IFNULL(" \
|
||||
"(SELECT $columns FROM $table" \
|
||||
@ -262,7 +258,6 @@ Select() {
|
||||
",'SQL::Select:not found'" \
|
||||
");" >&3
|
||||
read -u 4 results
|
||||
results="${results#* = }"
|
||||
if ! [[ $results == "SQL::Select:not found" ]]
|
||||
then
|
||||
echo "$results"
|
||||
@ -299,18 +294,18 @@ Insert() {
|
||||
(( no_id )) || {
|
||||
echo 'SELECT LAST_INSERT_ROWID();' >&3
|
||||
read -u 4 results
|
||||
results="${results#* = }"
|
||||
echo "$results"
|
||||
}
|
||||
}
|
||||
Update(){
|
||||
#Update table set_key set_value [set_key set_value […]] < where_key where_value
|
||||
# [where_key where_value
|
||||
#Update table set_key set_value [set_key set_value […]] < where_key where_operator where_value
|
||||
# [where_key where_operator where_value
|
||||
# […]]
|
||||
local \
|
||||
table="$1" \
|
||||
key \
|
||||
argument \
|
||||
operator \
|
||||
value \
|
||||
set_statement \
|
||||
where_keys \
|
||||
@ -333,14 +328,14 @@ Update(){
|
||||
;;
|
||||
esac
|
||||
done
|
||||
while read key value
|
||||
while read key operator value
|
||||
do
|
||||
(( ${#where_statement} )) && where_statement+=( "AND" )
|
||||
if [[ $value == NULL ]]
|
||||
then
|
||||
where_statement+=( "$key is NULL" )
|
||||
else
|
||||
where_statement+=( "$key="'"'"${value//\"/\\\"}"'"' )
|
||||
where_statement+=( "$key $operator "'"'"${value//\"/\\\"}"'"' )
|
||||
fi
|
||||
done
|
||||
echo "UPDATE '$table' SET" \
|
||||
@ -375,7 +370,7 @@ InsertIfUnset() {
|
||||
Select "$table" "$column" < <(
|
||||
for key in ${!keys[@]}
|
||||
do
|
||||
echo "${keys[$key]}" "${values[$key]}"
|
||||
echo "${keys[$key]}" = "${values[$key]}"
|
||||
done
|
||||
)
|
||||
)
|
||||
@ -430,7 +425,7 @@ InsertOrUpdate() {
|
||||
Select "$table" id < <(
|
||||
for key in ${!keys[@]}
|
||||
do
|
||||
echo "${keys[$key]}" "${values[$key]}"
|
||||
echo "${keys[$key]}" = "${values[$key]}"
|
||||
done
|
||||
)
|
||||
)
|
||||
@ -438,7 +433,7 @@ InsertOrUpdate() {
|
||||
Update "$table" "$@" < <(
|
||||
for key in ${!keys[@]}
|
||||
do
|
||||
echo "${keys[$key]}" "${values[$key]}"
|
||||
echo "${keys[$key]}" = "${values[$key]}"
|
||||
done
|
||||
)
|
||||
else
|
||||
@ -455,27 +450,27 @@ InsertOrUpdate() {
|
||||
)
|
||||
)
|
||||
fi
|
||||
results="${results#* = }"
|
||||
echo "$results"
|
||||
}
|
||||
Delete() {
|
||||
#Delete table < where_key where_value
|
||||
# [where_key where_value
|
||||
#Delete table < where_key where_operator where_value
|
||||
# [where_key where_operator where_value
|
||||
# […]]
|
||||
local \
|
||||
table="$1" \
|
||||
key \
|
||||
operator \
|
||||
value \
|
||||
where_statement \
|
||||
results
|
||||
while read key value
|
||||
while read key operator value
|
||||
do
|
||||
(( ${#where_statement} )) && where_statement+=( "AND" )
|
||||
if [[ $value == NULL ]]
|
||||
then
|
||||
where_statement+=( "$key is NULL" )
|
||||
else
|
||||
where_statement+=( "$key="'"'"${value//\"/\\\"}"'"' )
|
||||
where_statement+=( "$key $operator "'"'"${value//\"/\\\"}"'"' )
|
||||
fi
|
||||
done
|
||||
echo "DELETE from $table WHERE ${where_statement[@]};" >&3
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user