source: trunk/third/moira/db/doschema.awk @ 24319

Revision 24319, 1.8 KB checked in by broder, 15 years ago (diff)
New Moira snapshot from SVN.
Line 
1# $Id: doschema.awk 3956 2010-01-05 20:56:56Z zacheiss $
2#
3# Build moira_schema.c and .h from the schema.sql file
4# It knows which one to build cased on whether or not its input is
5# in all caps.
6
7BEGIN {
8        print "/* This file automatically generated */";
9        print "/* Do not edit */\n";
10
11        ntables = 0;
12        maxsize = 0;
13}
14
15$1 == "#" { next; }
16
17/^create/ {
18  cfile = 1;
19  tablename[ntables] = $3;
20  count = 0;
21  next;
22}
23
24/^CREATE/ {
25  hfile = 1;
26  tablename[ntables] = $3;
27  count = 0;
28  next;
29}
30
31NF >= 2 {
32  if ($2 ~ /CHAR\([0-9]*\)/) {
33    t = split($2, temp, "(");
34    if (t != 2) printf "Can't parse %s\n", $2;
35    t = split(temp[2], temp2, ")");
36    if (t != 2) printf "Can't parse %s\n", temp[2];
37    width[count] = temp2[1];
38  } else if ($2 ~ /DATE/)
39    width[count] = 21;
40  else if ($2 ~ /INT/)
41    width[count] = 10;
42  else
43    width[count] = 0;
44
45  if (hfile && width[count]) {
46    printf "#define %s_%s_SIZE %d\n", tablename[ntables], $1, width[count] + 1;
47    if (width[count] > maxsize)
48      maxsize = width[count];
49  }
50
51  count++;
52}
53
54/^\);$/ {
55  if (cfile) {
56    printf "int %s_widths[] = { ", tablename[ntables];
57    for (i = 0; i < count; i++) {
58      printf "%d", width[i];
59      if (i < count-1)
60        printf ", ";
61    }
62    printf "};\n";
63  }
64  ntables++;
65}
66
67END {
68  if (hfile) {
69    printf "\n#define MAX_FIELD_WIDTH %d\n", maxsize + 1;
70    printf "\nenum tables { NO_TABLE,";
71    len = 22;
72  } else {
73    printf "\nint num_tables = %d;\n", ntables;
74    printf "\nchar *table_name[] = { \"none\",";
75    len = 29;
76  }
77
78  for (i = 0; i < ntables; i++) {
79    if (hfile)
80      str = sprintf(" %s_TABLE", tablename[i]);
81    else
82      str = sprintf(" \"%s\"", tablename[i]);
83    if (len + length(str) > 75) {
84      printf "\n ";
85      len = 1;
86    }
87    printf str;
88    if (i != ntables - 1)
89      printf ",";
90    len += length(str);
91  }
92  print "\n};\n";
93}
Note: See TracBrowser for help on using the repository browser.