Flexible WHERE clauses

This commit is contained in:
Vincent Riquer 2013-02-26 12:12:05 +01:00
parent 48716f3251
commit 38d248af42

41
atom
View File

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