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 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