Skip to content

Commit d6c91df

Browse files
committed
Move transactions.id to GENERATED IDENTITY
Now that the 'id' sequence is no longer shared between ar/ap/gl, the need to have a central 'id' sequence is gone. Convert to GENERATED IDENTITY like all other tables. See ledgersmb#8048
1 parent 850d20e commit d6c91df

File tree

9 files changed

+77
-65
lines changed

9 files changed

+77
-65
lines changed

old/lib/LedgerSMB/GL.pm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,14 @@ sub post_transaction {
106106
if ( !$form->{id} ) {
107107

108108
$query = q|
109-
INSERT INTO transactions (id, transdate, table_name, trans_type_code, approved)
110-
VALUES (nextval('id'), ?, 'gl', 'gl', true)
109+
INSERT INTO transactions (transdate, table_name, trans_type_code, approved)
110+
VALUES (?, 'gl', 'gl', true)
111111
|;
112112
$dbh->do($query, {}, $form->{transdate}) or $form->dberror($query);
113113

114114
$query = qq|
115115
INSERT INTO gl (id, reference, notes)
116-
VALUES (currval('id'), ?, ?)
116+
VALUES (currval('transactions_id_seq'), ?, ?)
117117
RETURNING id|;
118118

119119
$sth = $dbh->prepare($query) || $form->dberror($query);

old/lib/LedgerSMB/IR.pm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,12 @@ sub post_invoice {
133133
my $uid = localtime;
134134
$uid .= "$$";
135135

136-
$query = q{INSERT INTO transactions (id, table_name, trans_type_code, approved)
137-
VALUES (nextval('id'), 'ap', 'ap', false)};
136+
$query = q{INSERT INTO transactions (table_name, trans_type_code, approved)
137+
VALUES ('ap', 'ap', false)};
138138
$dbh->do($query) or $form->dberror($query);
139139
$query = qq|
140140
INSERT INTO ap (id, invnumber, person_id, entity_credit_account)
141-
VALUES (currval('id'), '$uid', ?, ?)|;
141+
VALUES (currval('transactions_id_seq'), '$uid', ?, ?)|;
142142
$sth = $dbh->prepare($query);
143143
$sth->execute( $form->{employee_id}, $form->{vendor_id}) || $form->dberror($query);
144144

old/lib/LedgerSMB/IS.pm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -787,14 +787,14 @@ sub post_invoice {
787787
$uid .= "$$";
788788

789789
$query = q|
790-
INSERT INTO transactions (id, table_name, trans_type_code, approved)
791-
VALUES (nextval('id'), 'ar', 'ar', false)
790+
INSERT INTO transactions (table_name, trans_type_code, approved)
791+
VALUES ('ar', 'ar', false)
792792
|;
793793
$dbh->do($query) or $form->dberror($query);
794794

795795
$query = qq|
796796
INSERT INTO ar (id, invnumber, person_id, entity_credit_account)
797-
VALUES (currval('id'), '$uid', ?, ?)|;
797+
VALUES (currval('transactions_id_seq'), '$uid', ?, ?)|;
798798
$sth = $dbh->prepare($query);
799799
$sth->execute( $form->{employee_id}, $form->{customer_id}) || $form->dberror($query);
800800

sql/changes/1.14/non-gl-transactions.sql

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ values ('ap', 'The transaction is a regular Accounts Payable item'),
44
('ar', 'The transaction is a regular Accounts Receivable item');
55

66
alter table transactions
7-
alter column id set default nextval('id'),
87
add column description text,
98
add column trans_type_code char(2) references trans_type(code),
109
add column entered_by int references entity(id),
@@ -73,6 +72,21 @@ alter table gl
7372
add constraint gl_id_fkey foreign key (id) references transactions (id) on delete cascade;
7473

7574

75+
do $$
76+
declare
77+
startval int;
78+
begin
79+
select nextval('id') into startval;
80+
-- drop sequence so that it doesn't get recreated as _seq1
81+
drop sequence id;
82+
execute format(
83+
'alter table transactions
84+
alter column id add generated by default as identity (start with %s)',
85+
startval);
86+
end;
87+
$$;
88+
89+
7690
alter table mfg_lot
7791
-- the on delete cascade prevents deletion of approved lots (= transactions)
7892
add column trans_id int references transactions(id) on delete cascade;

sql/modules/Assets.sql

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,9 @@ DECLARE
205205

206206
Begin
207207

208-
INSERT INTO transactions (id, reference, description, transdate,
208+
INSERT INTO transactions (reference, description, transdate,
209209
approved, trans_type_code, table_name)
210-
SELECT nextval('id'), setting_increment('asset_report_number'),
210+
SELECT setting_increment('asset_report_number'),
211211
'Asset Report ' || asset_report.id,
212212
report_date,
213213
coalesce((select value::boolean from defaults
@@ -228,26 +228,26 @@ Begin
228228

229229
INSERT INTO acc_trans (trans_id, chart_id, transdate, approved,
230230
amount_bc, curr, amount_tc)
231-
SELECT currval('id'), a.exp_account_id, r.report_date, true, sum(amount) * -1,
231+
SELECT currval('transactions_id_seq'), a.exp_account_id, r.report_date, true, sum(amount) * -1,
232232
defaults_get_defaultcurrency(), sum(amount) * -1
233233
FROM asset_report r
234234
JOIN asset_report_line l ON (r.id = l.report_id)
235235
JOIN asset_item a ON (l.asset_id = a.id)
236236
WHERE r.id = in_report_id
237-
GROUP BY currval('id'), r.report_date, a.exp_account_id;
237+
GROUP BY currval('transactions_id_seq'), r.report_date, a.exp_account_id;
238238

239239
INSERT INTO acc_trans (trans_id, chart_id, transdate, approved,
240240
amount_bc, curr, amount_tc)
241-
SELECT currval('id'), a.dep_account_id, r.report_date, true, sum(amount),
241+
SELECT currval('transactions_id_seq'), a.dep_account_id, r.report_date, true, sum(amount),
242242
defaults_get_defaultcurrency(), sum(amount)
243243
FROM asset_report r
244244
JOIN asset_report_line l ON (r.id = l.report_id)
245245
JOIN asset_item a ON (l.asset_id = a.id)
246246
WHERE r.id = in_report_id
247-
GROUP BY currval('id'), a.dep_account_id, r.report_date, a.tag, a.description;
247+
GROUP BY currval('transactions_id_seq'), a.dep_account_id, r.report_date, a.tag, a.description;
248248

249249
UPDATE asset_report
250-
SET trans_id = currval('id')
250+
SET trans_id = currval('transactions_id_seq')
251251
WHERE id = in_report_id;
252252

253253
RETURN in_report_id;
@@ -819,24 +819,24 @@ CREATE OR REPLACE FUNCTION asset_report__disposal_gl
819819
RETURNS bool AS
820820
$$
821821
INSERT INTO transactions (
822-
id, reference,
822+
reference,
823823
description,
824824
transdate, approved, trans_type_code, table_name)
825-
SELECT nextval('id'), setting_increment('asset_report_number'),
825+
SELECT setting_increment('asset_report_number'),
826826
'Asset Report ' || asset_report.id,
827827
report_date, false, 'fd', 'asset_report'
828828
FROM asset_report
829829
WHERE asset_report.id = in_id;
830830

831831
UPDATE asset_report
832-
SET trans_id = currval('id')
832+
SET trans_id = currval('transactions_id_seq')
833833
WHERE id = in_id;
834834

835835
-- Clear cumulative depreciation account
836836
INSERT
837837
INTO acc_trans (chart_id, trans_id, amount_bc, curr, amount_tc,
838838
approved, transdate)
839-
SELECT a.dep_account_id, currval('id')::int, sum(r.accum_depreciation) * -1,
839+
SELECT a.dep_account_id, currval('transactions_id_seq')::int, sum(r.accum_depreciation) * -1,
840840
defaults_get_defaultcurrency(), sum(r.accum_depreciation) * -1,
841841
TRUE, r.disposed_on
842842
FROM asset_report__get_disposal(in_id) r
@@ -848,7 +848,7 @@ $$
848848
INSERT
849849
INTO acc_trans (chart_id, trans_id, amount_bc, curr, amount_tc,
850850
approved, transdate)
851-
SELECT in_cash_acct, currval('id')::int, sum(r.disposal_amt) * -1,
851+
SELECT in_cash_acct, currval('transactions_id_seq')::int, sum(r.disposal_amt) * -1,
852852
defaults_get_defaultcurrency(), sum(r.disposal_amt) * -1,
853853
TRUE, r.disposed_on
854854
FROM asset_report__get_disposal(in_id) r
@@ -861,7 +861,7 @@ $$
861861
INTO acc_trans (chart_id, trans_id, amount_bc, curr, amount_tc,
862862
approved, transdate)
863863
SELECT case when sum(r.gain_loss) > 0 THEN in_loss_acct else in_gain_acct end,
864-
currval('id')::int, sum(r.gain_loss), defaults_get_defaultcurrency(),
864+
currval('transactions_id_seq')::int, sum(r.gain_loss), defaults_get_defaultcurrency(),
865865
sum(r.gain_loss),
866866
TRUE, r.disposed_on
867867
FROM asset_report__get_disposal(in_id) r
@@ -872,7 +872,7 @@ $$
872872
INSERT
873873
INTO acc_trans (chart_id, trans_id, amount_bc, curr, amount_tc,
874874
approved, transdate)
875-
SELECT a.asset_account_id, currval('id')::int, sum(r.purchase_value),
875+
SELECT a.asset_account_id, currval('transactions_id_seq')::int, sum(r.purchase_value),
876876
defaults_get_defaultcurrency(), sum(r.purchase_value),
877877
TRUE, r.disposed_on
878878
FROM asset_report__get_disposal(in_id) r
@@ -1228,19 +1228,19 @@ if retval.report_class = 2 then
12281228
end if;
12291229

12301230

1231-
INSERT INTO transactions (id, reference, description, approved, transdate, trans_type_code, table_name)
1232-
select nextval('id'), 'Asset Report ' || in_id, 'Asset Disposal Report for ' || report_date,
1231+
INSERT INTO transactions (reference, description, approved, transdate, trans_type_code, table_name)
1232+
select 'Asset Report ' || in_id, 'Asset Disposal Report for ' || report_date,
12331233
false, report_date, 'fd', 'asset_report'
12341234
FROM asset_report where id = in_id;
12351235

12361236
UPDATE asset_report
1237-
SET trans_id = currval('id')
1237+
SET trans_id = currval('transactions_id_seq')
12381238
WHERE id = in_id;
12391239

12401240
-- REMOVING ASSETS FROM ACCOUNT (Credit)
12411241
insert into acc_trans (trans_id, chart_id, amount_bc, curr, amount_tc,
12421242
approved, transdate)
1243-
SELECT currval('id'), a.asset_account_id,
1243+
SELECT currval('transactions_id_seq'), a.asset_account_id,
12441244
a.purchase_value
12451245
* (coalesce(t_disposed_percent, m.percent_disposed)/100),
12461246
defaults_get_defaultcurrency(),
@@ -1257,7 +1257,7 @@ SELECT currval('id'), a.asset_account_id,
12571257
-- REMOVING ACCUM DEP. (Debit)
12581258
INSERT into acc_trans (trans_id, chart_id, amount_bc, curr, amount_tc,
12591259
approved, transdate)
1260-
SELECT currval('id'), a.dep_account_id,
1260+
SELECT currval('transactions_id_seq'), a.dep_account_id,
12611261
sum(dl.amount) * -1
12621262
* (coalesce(t_disposed_percent, m.percent_disposed)/100),
12631263
defaults_get_defaultcurrency(),
@@ -1279,7 +1279,7 @@ group by a.dep_account_id, m.percent_disposed, r.report_date;
12791279
-- INSERT asset/proceeds (Debit, credit for negative values)
12801280
INSERT INTO acc_trans (trans_id, chart_id, amount_bc, curr, amount_tc,
12811281
approved, transdate)
1282-
SELECT currval('id'), in_asset_acct, coalesce(l.amount, 0) * -1,
1282+
SELECT currval('transactions_id_seq'), in_asset_acct, coalesce(l.amount, 0) * -1,
12831283
defaults_get_defaultcurrency(), coalesce(l.amount, 0) * -1,
12841284
true, r.report_date
12851285
FROM asset_item a
@@ -1292,15 +1292,15 @@ SELECT currval('id'), in_asset_acct, coalesce(l.amount, 0) * -1,
12921292
-- INSERT GAIN/LOSS (Credit for gain, debit for loss)
12931293
INSERT INTO acc_trans(trans_id, chart_id, amount_bc, curr, amount_tc,
12941294
approved, transdate)
1295-
select currval('id'),
1295+
select currval('transactions_id_seq'),
12961296
CASE WHEN sum(amount_bc) > 0 THEN in_loss_acct
12971297
else in_gain_acct
12981298
END,
12991299
sum(amount_bc) * -1, defaults_get_defaultcurrency(),
13001300
sum(amount_tc) * -1 , true,
13011301
retval.report_date
13021302
FROM acc_trans
1303-
WHERE trans_id = currval('id');
1303+
WHERE trans_id = currval('transactions_id_seq');
13041304

13051305
IF retval.report_class = 4 then
13061306
PERFORM asset__import_from_disposal(retval.id);

sql/modules/EndOfYear.sql

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,20 +96,20 @@ DECLARE
9696
ret_val int;
9797
cp_date date;
9898
BEGIN
99-
INSERT INTO transactions (id, transdate, reference, description, approved,
99+
INSERT INTO transactions (transdate, reference, description, approved,
100100
trans_type_code, table_name)
101-
VALUES (nextval('id'), in_end_date, in_reference, in_description, true, 'ye', 'yearend');
101+
VALUES (in_end_date, in_reference, in_description, true, 'ye', 'yearend');
102102

103103
INSERT INTO yearend (trans_id, transdate)
104-
VALUES (currval('id'), in_end_date);
104+
VALUES (currval('transactions_id_seq'), in_end_date);
105105

106106
SELECT coalesce(max(end_date),
107107
(SELECT min(transdate)-1 FROM acc_trans)) INTO cp_date
108108
FROM account_checkpoint;
109109

110110
INSERT INTO acc_trans (transdate, chart_id, trans_id,
111111
amount_bc, curr, amount_tc)
112-
SELECT in_end_date, a.chart_id, currval('id'),
112+
SELECT in_end_date, a.chart_id, currval('transactions_id_seq'),
113113
(coalesce(a.amount_bc, 0) + coalesce(cp.amount_bc, 0)) * -1,
114114
coalesce(a.curr,cp.curr),
115115
(coalesce(a.amount_tc, 0) + coalesce(cp.amount_tc, 0)) * -1
@@ -132,16 +132,16 @@ BEGIN
132132

133133
INSERT INTO acc_trans (transdate, trans_id, chart_id,
134134
amount_bc, curr, amount_tc)
135-
SELECT in_end_date, currval('id'), in_retention_acc_id,
135+
SELECT in_end_date, currval('transactions_id_seq'), in_retention_acc_id,
136136
coalesce(sum(amount_bc) * -1, 0),
137137
-- post only default currency in retained earnings
138138
defaults_get_defaultcurrency(),
139139
coalesce(sum(amount_tc) * -1, 0)
140-
FROM acc_trans WHERE trans_id = currval('id');
140+
FROM acc_trans WHERE trans_id = currval('transactions_id_seq');
141141

142142

143143
SELECT count(*) INTO ret_val from acc_trans
144-
where trans_id = currval('id');
144+
where trans_id = currval('transactions_id_seq');
145145

146146
RETURN ret_val;
147147
end;
@@ -201,10 +201,10 @@ BEGIN
201201
t_new_trans_id int;
202202
BEGIN
203203
INSERT INTO transactions (
204-
id, transdate, reference,
204+
transdate, reference,
205205
description, approved, reversing,
206206
trans_type_code, table_name)
207-
SELECT nextval('id'), in_end_date, 'Reversing ' || reference,
207+
SELECT in_end_date, 'Reversing ' || reference,
208208
'Reversing ' || description, true, id,
209209
'ye', 'yearend'
210210
FROM transactions

sql/modules/Goods.sql

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,35 +31,35 @@ BEGIN
3131
UPDATE parts SET onhand = onhand + t_mfg_lot.qty
3232
where id = t_mfg_lot.parts_id;
3333

34-
INSERT INTO transactions (id, reference, description, transdate, approved,
34+
INSERT INTO transactions (reference, description, transdate, approved,
3535
trans_type_code, table_name)
36-
values (nextval('id'), 'mfg-' || $1::TEXT, 'Manufacturing lot',
36+
values ('mfg-' || $1::TEXT, 'Manufacturing lot',
3737
now(), true, 'as', 'mfg_lot');
3838

3939
UPDATE mfg_lot
40-
SET trans_id = currval('id')
40+
SET trans_id = currval('transactions_id_seq')
4141
WHERE id = in_id;
4242

4343
INSERT INTO invoice (trans_id, parts_id, qty, allocated)
44-
SELECT currval('id')::int, parts_id, qty, 0
44+
SELECT currval('transactions_id_seq')::int, parts_id, qty, 0
4545
FROM mfg_lot_item WHERE mfg_lot_id = $1;
4646

4747
PERFORM cogs__add_for_ar_line(id) FROM invoice
48-
WHERE trans_id = currval('id')::int;
48+
WHERE trans_id = currval('transactions_id_seq')::int;
4949

5050

5151
PERFORM * FROM invoice
52-
WHERE qty + allocated <> 0 AND trans_id = currval('id')::int;
52+
WHERE qty + allocated <> 0 AND trans_id = currval('transactions_id_seq')::int;
5353

5454
IF FOUND THEN
5555
RAISE EXCEPTION 'Not enough parts in stock';
5656
END IF;
5757

5858
INSERT INTO invoice (trans_id, parts_id, qty, allocated, sellprice)
59-
SELECT currval('id')::int, t_mfg_lot.parts_id, t_mfg_lot.qty * -1, 0,
59+
SELECT currval('transactions_id_seq')::int, t_mfg_lot.parts_id, t_mfg_lot.qty * -1, 0,
6060
-1*sum(amount_bc) / t_mfg_lot.qty
6161
FROM acc_trans
62-
WHERE amount_bc < 0 and trans_id = currval('id')::int;
62+
WHERE amount_bc < 0 and trans_id = currval('transactions_id_seq')::int;
6363

6464
PERFORM cogs__add_for_ap_line(currval('invoice_id_seq')::int);
6565

@@ -71,7 +71,7 @@ BEGIN
7171
amount_bc * -1, curr, amount_tc * -1,
7272
currval('invoice_id_seq')::int, 'Collect assembly parts costs from COGS'
7373
FROM acc_trans
74-
WHERE amount_bc < 0 and trans_id = currval('id')::int;
74+
WHERE amount_bc < 0 and trans_id = currval('transactions_id_seq')::int;
7575

7676
-- difference goes into inventory
7777
INSERT INTO acc_trans(trans_id, transdate, chart_id,
@@ -83,7 +83,7 @@ BEGIN
8383
sum(amount_bc) * -1, curr, sum(amount_tc) * -1,
8484
currval('invoice_id_seq')::int, 'Post assembly parts cost in inventory'
8585
FROM acc_trans
86-
WHERE trans_id = currval('id')::int
86+
WHERE trans_id = currval('transactions_id_seq')::int
8787
GROUP BY trans_id, curr;
8888

8989

@@ -388,12 +388,10 @@ IF inv.trans_id IS NOT NULL THEN
388388
END IF;
389389

390390
INSERT INTO transactions (
391-
id,
392391
description,
393392
transdate, reference, approved,
394393
trans_type_code, table_name)
395-
VALUES (nextval('id'),
396-
'Transaction due to approval of inventory adjustment',
394+
VALUES ('Transaction due to approval of inventory adjustment',
397395
inv.report_date, 'invadj-' || in_id, true,
398396
'ia', 'inventory_report')
399397
RETURNING id INTO t_trans_id;

0 commit comments

Comments
 (0)