INSERT INTO CashFlow
(date, income, expense)
VALUES
(:date, :income, 0)
Get balance: SELECT sum(income)-sum(expense) AS balance
FROM CashFlow
What modern js still has to reinvent is in-client synchronizing storage which naturally resolves who waits on what (if at all). This is partially simulated by reactjs now by trading in a developer’s comfort at near zero price.All this “await/promise has clear semantics and we think async” is pointless hope because code should never race with itself. Data should, and the storage must be there to kill associated problems once and forever.
>What modern js still has to reinvent is in-client synchronizing storage which naturally resolves who waits on what (if at all)
I don't understand what this means but it makes me curious. What would be an example of this in one of the languages that have already "reinvented" it?
>it comes with a number of performance and memory/storage consumption implications.
Instead of selecting sum(), CREATE TRIGGER then and update a singleton on insert. You can even create a view with N recent transactions and catch inserts into it to maintain that N, if you don’t want a full history.
async function deduct(amt) {
await updateBalance(balance => {
if (balance >= amt) {
return balance - amt;
} else {
throw new Error("not enough balance");
})
}