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}
|
||||
}
|
||||
|
||||
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() {
|
||||
:
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user