File: dbname.awk

package info (click to toggle)
db5.3 5.3.28%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 158,500 kB
  • sloc: ansic: 448,411; java: 111,824; tcl: 80,544; sh: 44,264; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; javascript: 1,998; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (83 lines) | stat: -rw-r--r-- 1,449 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# $Id$
#
# Take a comma-separated list of database names and spit out all the
# log records that affect those databases. 
# Note: this will not start printing records until a dbreg_register
#	record for that file is found.

NR == 1 {
	nfiles = 0
	while ((ndx = index(DBNAME, ",")) != 0) {
		filenames[nfiles] = substr(DBNAME, 1, ndx - 1) "\\0";
		DBNAME = substr(DBNAME, ndx + 1, length(DBNAME) - ndx);
		files[nfiles] = -1
		nfiles++
	}
	filenames[nfiles] = DBNAME "\\0";
	files[nfiles] = -1
	myfile = -1;
	nreg = 0;
}

/^\[.*dbreg_register/ {
	register = 1;
}
/opcode:/ {
	if (register == 1) {
		if ($2 == "CHKPNT" || $2 == "OPEN" || $2 == "PREOPEN" || $2 == "REOPEN")
			register = 3;
	}
}
/name:/ {
	if (register >= 2) {
		myfile = -2;
		for (i = 0; i <= nfiles; i++) {
			if ($5 == filenames[i]) {
				if (register == 2) {
					printme = 0;
					myfile = -2;
				} else {
					myfile = i;
				}
				break;
			}
		}
	}
	register = 0;
}
/fileid:/{
	if (myfile == -2)
		files[$2] = 0;
	else if (myfile != -1) {
		files[$2] = 1;
		if ($2 > nreg)
			nreg = $2;
		printme = 1;
		register = 0;
		myfile = -1;
	} else if ($2 <= nreg && files[$2] == 1) {
		printme = 1
	}
	myfile = -1;
}

/^\[/{
	if (printme == 1) {
		printf("%s\n", rec);
		printme = 0
	}
	rec = "";

	rec = $0
}

TXN == 1 && /txn_regop/ {printme = 1}
/^	/{
	if (length(rec) + length($0) < 2040)
		rec = sprintf("%s\n%s", rec, $0);
}

END {
	if (printme == 1)
		printf("%s\n", rec);
}