mirror of
				https://github.com/yrzam/findb.git
				synced 2025-10-31 00:09:06 +00:00 
			
		
		
		
	auto-choose binary, implement add.sh script
This commit is contained in:
		
							
								
								
									
										66
									
								
								scripts/add.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								scripts/add.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | DB_PATH=$(realpath "$1") | ||||||
|  |  | ||||||
|  | print_help() { | ||||||
|  | 	echo -e "add.sh - convenience script to quickly add some things without details. Usage:\n" | ||||||
|  | 	echo -e "tx\t<amt> <asset type name> <asset code> <storage name> <category name> [<datetime>]" | ||||||
|  | 	echo -e "bal\t<amt> <asset type name> <asset code> <storage name>" | ||||||
|  | 	echo -e "rate\t<amt> <asset type name> <asset code>\n" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | num_arg() { | ||||||
|  | 	ARG="${1//[^A-Za-z0-9-\.]/}" | ||||||
|  | 	if [ -z "$ARG" ]; then | ||||||
|  | 		echo NULL | ||||||
|  | 	else | ||||||
|  | 		echo "$ARG" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  | text_arg() { | ||||||
|  | 	ARG="${1//\'/\'\'}" | ||||||
|  | 	if [ -z "$ARG" ]; then | ||||||
|  | 		echo NULL | ||||||
|  | 	else | ||||||
|  | 		echo "'$ARG'" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  | make_query() { | ||||||
|  | 	TARGET="$1" | ||||||
|  | 	shift 1 | ||||||
|  |  | ||||||
|  | 	case "$TARGET" in | ||||||
|  |     	"tx") | ||||||
|  |     	    echo "insert into latest_fin_transactions(amount,asset_type,asset_code,storage,category,datetime)	values($(num_arg "$1"),$(text_arg "$2"),$(text_arg "$3"),$(text_arg "$4"),$(text_arg "$5"),$(text_arg "$6"));";; | ||||||
|  |     	"bal") | ||||||
|  | 			echo "insert into current_balances(balance,asset_type,asset_code,storage) 							values($(num_arg "$1"),$(text_arg "$2"),$(text_arg "$3"),$(text_arg "$4"));";; | ||||||
|  | 		"rate") | ||||||
|  | 			echo "insert into current_fin_asset_rates(rate,asset_type,asset)									values($(num_arg "$1"),$(text_arg "$2"),$(text_arg "$3"))";; | ||||||
|  | 	esac | ||||||
|  | } | ||||||
|  |  | ||||||
|  | print_help | ||||||
|  | MIME=$(file -b --mime-type "$DB_PATH") | ||||||
|  | if [ "$MIME" = "application/vnd.sqlite3" ]; then  | ||||||
|  | 	BIN_PATH=sqlite3 | ||||||
|  | else | ||||||
|  | 	BIN_PATH=sqlcipher | ||||||
|  | 	read -srp "Password: " PASS; echo ''; | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | while read -rp '> ' ARGS_STR; do | ||||||
|  | 	eval "ARGS=($ARGS_STR)" | ||||||
|  | 	SQL=$(make_query "${ARGS[@]}") | ||||||
|  | 	if [ -z "$SQL" ]; then | ||||||
|  | 		echo -e "Error: unknown command\n"  | ||||||
|  | 		print_help | ||||||
|  | 		continue | ||||||
|  | 	fi | ||||||
|  | 	$BIN_PATH "$DB_PATH" <<EOF | ||||||
|  | .output '/dev/null' | ||||||
|  | pragma key='$PASS'; | ||||||
|  | pragma foreign_keys=ON; | ||||||
|  | .output 'stdout' | ||||||
|  | $SQL | ||||||
|  | EOF | ||||||
|  | done | ||||||
| @@ -1,4 +1,5 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | set -e | ||||||
|  |  | ||||||
| DB_PATH=$(realpath "$1") | DB_PATH=$(realpath "$1") | ||||||
| DUMP_PATH=$(realpath "$2") | DUMP_PATH=$(realpath "$2") | ||||||
| @@ -21,11 +22,12 @@ order by | |||||||
| SQL | SQL | ||||||
| ) | ) | ||||||
|  |  | ||||||
| read -s -p "Password (if any): " PASS; echo ''; | MIME=$(file -b --mime-type "$DB_PATH") | ||||||
| if [ -z "$PASS" ]; then  | if [ "$MIME" = "application/vnd.sqlite3" ]; then  | ||||||
| 	BIN_PATH=sqlite3 | 	BIN_PATH=sqlite3 | ||||||
| else | else | ||||||
| 	BIN_PATH=sqlcipher | 	BIN_PATH=sqlcipher | ||||||
|  | 	read -srp "Password: " PASS; echo ''; | ||||||
| fi | fi | ||||||
|  |  | ||||||
| # dump | # dump | ||||||
| @@ -39,6 +41,6 @@ EOF | |||||||
| # test | # test | ||||||
| TEST_DB_PATH="$DUMP_PATH.test.db" | TEST_DB_PATH="$DUMP_PATH.test.db" | ||||||
| rm -f "$TEST_DB_PATH" | rm -f "$TEST_DB_PATH" | ||||||
| cat "$DUMP_PATH" | sqlite3 "$TEST_DB_PATH" | sqlite3 "$TEST_DB_PATH" < "$DUMP_PATH" | ||||||
| echo 'pragma foreign_key_check;' | sqlite3 "$TEST_DB_PATH" | echo 'pragma foreign_key_check;' | sqlite3 "$TEST_DB_PATH" | ||||||
| rm -f "$TEST_DB_PATH" | rm -f "$TEST_DB_PATH" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user