AtOM/lib/database/InsertIfUnset
2026-03-13 05:15:02 +01:00

67 lines
1.6 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Copyright © 2012-2026 ScriptFanix
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# A copy of the GNU General Public License v3 is includded in the LICENSE file
# at the root of the project.
InsertIfUnset() {
#InsertIfUnset table [no_id] < key value \n key value
#
# If no_id is set to a non-zero value, the function will not return the
# auto-assigned row ID of the inserted row. 
local \
table="$1" \
no_id="${2:-0}" \
column \
key \
keys \
results \
value \
values
# Read all key-value pairs from stdin into parallel arrays
while read key value
do
keys+=( "$key" )
values+=( "$value" )
done
# Choose which column to return: first key column if no_id, else 'id'
if (( no_id ))
then
column="${keys[0]}"
else
column='id'
fi
# Check if a matching row already exists
if ! results=$(
Select "$table" "$column" < <(
for key in ${!keys[@]}
do
# Strip ::AtOM:FT:: for WHERE comparison
echo "${keys[$key]}" = \
"${values[$key]//::AtOM:FT::}"
done
)
)
then
# Row not found: insert it and return the new id
results=$(
Insert "$table" < <(
for key in ${!keys[@]}
do
echo "${keys[$key]}" "${values[$key]}"
done
)
)
fi
echo "$results"
}