/ Hex Artifact Content
Login

Artifact c2ff431854d702cdd2d779c9c0d1f58fa16fa4ea:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 61 77 6b 20 2d  #!/usr/bin/awk -
0010: 66 0a 23 0a 23 20 54 68 69 73 20 41 57 4b 20 73  f.#.# This AWK s
0020: 63 72 69 70 74 20 73 63 61 6e 73 20 74 68 65 20  cript scans the 
0030: 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 20 28  opcodes.h file (
0040: 77 68 69 63 68 20 69 73 20 69 74 73 65 6c 66 20  which is itself 
0050: 67 65 6e 65 72 61 74 65 64 20 62 79 0a 23 20 61  generated by.# a
0060: 6e 6f 74 68 65 72 20 61 77 6b 20 73 63 72 69 70  nother awk scrip
0070: 74 29 20 61 6e 64 20 75 73 65 73 20 74 68 65 20  t) and uses the 
0080: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6c 65 61  information glea
0090: 6e 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  ned to create th
00a0: 65 0a 23 20 6f 70 63 6f 64 65 73 2e 63 20 73 6f  e.# opcodes.c so
00b0: 75 72 63 65 20 66 69 6c 65 2e 0a 23 0a 23 20 4f  urce file..#.# O
00c0: 70 63 6f 64 65 73 2e 63 20 63 6f 6e 74 61 69 6e  pcodes.c contain
00d0: 73 20 73 74 72 69 6e 67 73 20 77 68 69 63 68 20  s strings which 
00e0: 61 72 65 20 74 68 65 20 73 79 6d 62 6f 6c 69 63  are the symbolic
00f0: 20 6e 61 6d 65 73 20 66 6f 72 20 74 68 65 20 76   names for the v
0100: 61 72 69 6f 75 73 0a 23 20 6f 70 63 6f 64 65 73  arious.# opcodes
0110: 20 75 73 65 64 20 62 79 20 74 68 65 20 56 44 42   used by the VDB
0120: 45 2e 20 20 54 68 65 73 65 20 73 74 72 69 6e 67  E.  These string
0130: 73 20 61 72 65 20 75 73 65 64 20 77 68 65 6e 20  s are used when 
0140: 64 69 73 61 73 73 65 6d 62 6c 69 6e 67 20 61 0a  disassembling a.
0150: 23 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 64  # VDBE program d
0160: 75 72 69 6e 67 20 74 72 61 63 69 6e 67 20 6f 72  uring tracing or
0170: 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
0180: 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
0190: 6f 72 64 2e 0a 23 0a 42 45 47 49 4e 20 7b 0a 20  ord..#.BEGIN {. 
01a0: 20 70 72 69 6e 74 20 22 2f 2a 20 41 75 74 6f 6d   print "/* Autom
01b0: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
01c0: 65 64 2e 20 20 44 6f 20 6e 6f 74 20 65 64 69 74  ed.  Do not edit
01d0: 20 2a 2f 22 0a 20 20 70 72 69 6e 74 20 22 2f 2a   */".  print "/*
01e0: 20 53 65 65 20 74 68 65 20 6d 6b 6f 70 63 6f 64   See the mkopcod
01f0: 65 63 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  ec.awk script fo
0200: 72 20 64 65 74 61 69 6c 73 2e 20 2a 2f 22 0a 20  r details. */". 
0210: 20 70 72 69 6e 74 66 20 22 23 69 66 20 21 64 65   printf "#if !de
0220: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0230: 54 5f 45 58 50 4c 41 49 4e 29 22 0a 20 20 70 72  T_EXPLAIN)".  pr
0240: 69 6e 74 66 20 20 20 20 22 20 7c 7c 20 64 65 66  intf    " || def
0250: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
0260: 45 29 22 0a 20 20 70 72 69 6e 74 20 20 20 20 20  E)".  print     
0270: 22 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  " || defined(SQL
0280: 49 54 45 5f 44 45 42 55 47 29 22 0a 20 20 70 72  ITE_DEBUG)".  pr
0290: 69 6e 74 20 22 23 69 66 20 64 65 66 69 6e 65 64  int "#if defined
02a0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
02b0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
02c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
02d0: 54 45 5f 44 45 42 55 47 29 22 0a 20 20 70 72 69  TE_DEBUG)".  pri
02e0: 6e 74 20 22 23 20 64 65 66 69 6e 65 20 4f 70 48  nt "# define OpH
02f0: 65 6c 70 28 58 29 20 5c 22 5c 5c 30 5c 22 20 58  elp(X) \"\\0\" X
0300: 22 0a 20 20 70 72 69 6e 74 20 22 23 65 6c 73 65  ".  print "#else
0310: 22 0a 20 20 70 72 69 6e 74 20 22 23 20 64 65 66  ".  print "# def
0320: 69 6e 65 20 4f 70 48 65 6c 70 28 58 29 22 0a 20  ine OpHelp(X)". 
0330: 20 70 72 69 6e 74 20 22 23 65 6e 64 69 66 22 0a   print "#endif".
0340: 20 20 70 72 69 6e 74 20 22 63 6f 6e 73 74 20 63    print "const c
0350: 68 61 72 20 2a 73 71 6c 69 74 65 33 4f 70 63 6f  har *sqlite3Opco
0360: 64 65 4e 61 6d 65 28 69 6e 74 20 69 29 7b 22 0a  deName(int i){".
0370: 20 20 70 72 69 6e 74 20 22 20 73 74 61 74 69 63    print " static
0380: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
0390: 73 74 20 61 7a 4e 61 6d 65 5b 5d 20 3d 20 7b 20  st azName[] = { 
03a0: 5c 22 3f 5c 22 2c 22 0a 20 20 6d 78 20 3d 20 30  \"?\",".  mx = 0
03b0: 0a 7d 0a 2f 5e 2e 64 65 66 69 6e 65 20 4f 50 5f  .}./^.define OP_
03c0: 2f 20 7b 0a 20 20 73 75 62 28 22 4f 50 5f 22 2c  / {.  sub("OP_",
03d0: 22 22 2c 24 32 29 0a 20 20 69 20 3d 20 24 33 2b  "",$2).  i = $3+
03e0: 30 0a 20 20 6c 61 62 65 6c 5b 69 5d 20 3d 20 24  0.  label[i] = $
03f0: 32 0a 20 20 69 66 28 20 6d 78 3c 69 20 29 20 6d  2.  if( mx<i ) m
0400: 78 20 3d 20 69 0a 20 20 66 6f 72 28 6a 3d 35 3b  x = i.  for(j=5;
0410: 20 6a 3c 4e 46 3b 20 6a 2b 2b 29 20 69 66 28 20   j<NF; j++) if( 
0420: 24 6a 3d 3d 22 73 79 6e 6f 70 73 69 73 3a 22 20  $j=="synopsis:" 
0430: 29 20 62 72 65 61 6b 0a 20 20 69 66 28 20 6a 3c  ) break.  if( j<
0440: 4e 46 20 29 7b 0a 20 20 20 20 6a 2b 2b 0a 20 20  NF ){.    j++.  
0450: 20 20 78 20 3d 20 24 6a 0a 20 20 20 20 66 6f 72    x = $j.    for
0460: 28 6a 3d 6a 2b 31 3b 20 6a 3c 4e 46 3b 20 6a 2b  (j=j+1; j<NF; j+
0470: 2b 29 20 78 20 3d 20 78 20 22 20 22 20 24 6a 0a  +) x = x " " $j.
0480: 20 20 20 20 73 79 6e 6f 70 73 69 73 5b 69 5d 20      synopsis[i] 
0490: 3d 20 78 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  = x.  }else{.   
04a0: 20 73 79 6e 6f 70 73 69 73 5b 69 5d 20 3d 20 22   synopsis[i] = "
04b0: 22 0a 20 20 7d 0a 7d 0a 45 4e 44 20 7b 0a 20 20  ".  }.}.END {.  
04c0: 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6d 78 3b 20  for(i=1; i<=mx; 
04d0: 69 2b 2b 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  i++){.    printf
04e0: 20 22 20 20 20 20 20 2f 2a 20 25 33 64 20 2a 2f   "     /* %3d */
04f0: 20 25 2d 31 38 73 20 4f 70 48 65 6c 70 28 5c 22   %-18s OpHelp(\"
0500: 25 73 5c 22 29 2c 5c 6e 22 2c 20 69 2c 20 5c 0a  %s\"),\n", i, \.
0510: 20 20 20 20 20 20 20 20 22 5c 22 22 20 6c 61 62          "\"" lab
0520: 65 6c 5b 69 5d 20 22 5c 22 22 2c 20 73 79 6e 6f  el[i] "\"", syno
0530: 70 73 69 73 5b 69 5d 0a 20 20 7d 0a 20 20 70 72  psis[i].  }.  pr
0540: 69 6e 74 20 22 20 20 7d 3b 22 0a 20 20 70 72 69  int "  };".  pri
0550: 6e 74 20 22 20 20 72 65 74 75 72 6e 20 61 7a 4e  nt "  return azN
0560: 61 6d 65 5b 69 5d 3b 22 0a 20 20 70 72 69 6e 74  ame[i];".  print
0570: 20 22 7d 22 0a 20 20 70 72 69 6e 74 20 22 23 65   "}".  print "#e
0580: 6e 64 69 66 22 0a 7d 0a                          ndif".}.