|
|
1.1 ! root 1: .ds HE 'Version 6.2 Changes'INGRES'Page %' ! 2: .so nmacs ! 3: Version 6.2 of INGRES is upward compatible ! 4: with version 6.1 of INGRES. ! 5: Version 6.2 supports protection statements, ! 6: integrity constraints, and views. ! 7: In addition, the system can be ! 8: configured to take advantage of separate instruction ! 9: and data spaces on 11/45's and 11/70's. ! 10: ! 11: There are several new keywords. ! 12: The "-u" flag has a different format. ! 13: The protection, integrity, and view ! 14: subsystems depend on certain system relations ! 15: being present. ! 16: Existing databases can be optionally updated ! 17: by using the creatdb program with the "-e" flag. ! 18: See creatdb(unix) for details. ! 19: As part of the new protection system, ! 20: new databases are placed in .../data/base/ ! 21: instead of .../datadir/. ! 22: Existing databases will still operate correctly. ! 23: The reason for this change is to get around ! 24: UNIX protection "features" related to removing files ! 25: and creating directories. ! 26: We found a number of bugs in the floating point to ! 27: character conversion routine. ! 28: It may happen that versions 6.1 and 6.2 give different ! 29: results in the last decimal place. ! 30: The 6.2 results are correctly rounded while the 6.1 are not ! 31: necessarily correct. ! 32: .sh 1 ! 33: Monitor ! 34: .dn ! 35: Macros. ! 36: .PS ! 37: The monitor supports user defined macros. ! 38: It is possible to specify alternate keywords, ! 39: shorthands for commonly used phrases ! 40: and even program using the macro facilities. ! 41: In addition ingres can automatically define ! 42: special macros on a per user basis. ! 43: For example "range of p is parts" can be shortened by ! 44: the macro: ! 45: ! 46: {define;rg $1 $2;range of $1 is $2} ! 47: ! 48: to be ! 49: ! 50: rg p parts ! 51: .sh ! 52: Tuple count. ! 53: .PS ! 54: It is now possible to write a macro ! 55: to find out the number of tuples ! 56: which satisfied the query last ! 57: successfully executed. ! 58: Thus updates do not have to be silent. ! 59: .sh ! 60: Trapping queries. ! 61: .PS ! 62: It is possible to save queries run from the monitor. ! 63: The macro "{querytrap}" can be defined to be the pathname ! 64: of a file where the queries are to be saved. ! 65: The date, ! 66: query, ! 67: and tuple count for each successfully parsed query ! 68: are appended to the end of the file whenever the ! 69: macro is defined. ! 70: .sh 1 ! 71: Parser. ! 72: .dn ! 73: Retrieve unique. ! 74: .PS ! 75: Retrieves can now be specified to be "unique". ! 76: The result of the retrieve will be sorted from left ! 77: to right and duplicates removed. ! 78: For example: ! 79: ! 80: .nf ! 81: range of e is employee ! 82: retrieve unique (e.manager) ! 83: .fi ! 84: ! 85: .sh ! 86: Exponential notation. ! 87: .PS ! 88: Exponential notation is now accepted for ! 89: floating point numbers. ! 90: This feature was actually added in most later versions ! 91: of 6.1. ! 92: .sh ! 93: Expanded error checking. ! 94: .PS ! 95: The parser now detects many of the errors that ! 96: OVQP used to detect. ! 97: .sh 1 ! 98: Qrymod. ! 99: .PS ! 100: Query modification is the name we give to the ! 101: collection of code which performs the ! 102: protection, integrity, and view functions. ! 103: This feature is new to version 6.2. ! 104: It requires an additional process making 6 processes ! 105: total for an 11/34 system and 5 total for an 11/70 ! 106: system. ! 107: When creating a ! 108: database, ! 109: query modification can be optionally permitted. ! 110: An existing database can be changed to allow query modification. ! 111: If a database does not have query modification support, ! 112: then the qrymod process is not invoked. ! 113: .dn ! 114: Views. ! 115: .PS ! 116: The system now supports user defined views. ! 117: A view is a virtual relation. ! 118: The view relation is defined in terms ! 119: of existing relations. ! 120: Any accesses to the view are automatically ! 121: translated to accesses to the relations ! 122: on which it is defined. ! 123: For example: ! 124: ! 125: .nf ! 126: range of e is employee ! 127: define view myemp(e.name, e.salary) ! 128: where e.manager = 199 ! 129: ! 130: range of m is myemp ! 131: retrieve (m.name) where m.salary > 8000 ! 132: ! 133: .fi ! 134: is equivalent to the query: ! 135: ! 136: .nf ! 137: range of e is employee ! 138: retrieve (e.name) where e.salary > 8000 ! 139: and e.manager = 199 ! 140: .fi ! 141: ! 142: .sh ! 143: Protection. ! 144: .PS ! 145: Relations created in a database supporting ! 146: query modification, ! 147: default to no access. ! 148: The DBA can use the ! 149: "permit" command to selectively ! 150: grant access to users. ! 151: For example: ! 152: ! 153: .nf ! 154: range of e is employee ! 155: define permit retrieve on e (name) ! 156: to sam at tty5 ! 157: from 8:00 to 17:00 ! 158: on mon to fri ! 159: where e.salary < 15000 ! 160: .fi ! 161: .sh ! 162: Integrity. ! 163: .PS ! 164: Updates to a relation can now be constrained to ! 165: satisfy certain conditions. ! 166: Updates which do not satisfy the conditions ! 167: are illegal and are ignored. ! 168: For example if employee names must have ! 169: at least a capital letter followed by a comma ! 170: followed by another capital letter then: ! 171: ! 172: .nf ! 173: define integrity on e is ! 174: e.name = "[A-Z]*,[A-Z]*" ! 175: .fi ! 176: .sh 1 ! 177: OVQP. ! 178: .dn ! 179: Expanded pattern matching ! 180: .PS ! 181: OVQP will now take advantage of storage ! 182: structures on pattern matching expressions. ! 183: Previous versions ignored the structure of a ! 184: relation on a pattern matching expression ! 185: and caused a full relation scan. ! 186: The current algorithm will analyze a ! 187: pattern matching constant and use the ! 188: storage structure of a relation if at all possible. ! 189: .sh ! 190: Concat definition changed. ! 191: .PS ! 192: Concat has been changed slightly to allow ! 193: concatenation of blanks. ! 194: It does this by guaranteeing that if the ! 195: value being concatenated is all blank, ! 196: then it is trimmed to be one blank. ! 197: For example: ! 198: ! 199: .nf ! 200: concat(x.firstname, concat(" ", x.lastname)) ! 201: .fi ! 202: .sh ! 203: Special constants. ! 204: .PS ! 205: There are two constants which are recognized ! 206: by the system and processed specially. ! 207: "Dba" and "usercode" have the values ! 208: of the two character ingres id of the ! 209: database administrator for the current database, ! 210: and the current user. ! 211: Special constants will be expanded in future ! 212: versions. ! 213: For example: ! 214: ! 215: .nf ! 216: retrieve (whoami = usercode) ! 217: .fi ! 218: .sh 1 ! 219: Decomp. ! 220: .dn ! 221: Ten variable queries. ! 222: .PS ! 223: Decomp can now handle queries of up to ten variables. ! 224: The previous limit was six. ! 225: You are still limited to ten variables defined at ! 226: any one time. ! 227: .sh ! 228: New processing algorithms. ! 229: .PS ! 230: Decomp has been made smarter. ! 231: It now is more intelligent about which variable ! 232: to substitute for and when to reformat a relation. ! 233: The result is that it makes better use of ! 234: existing storage structures whenever possible. ! 235: ! 236: A new processing technique called "reduction" is now ! 237: considered for queries with three or more variables. ! 238: Details can be found in INGRES memo ! 239: ERL M78/17. ! 240: .sh ! 241: Aggregates correctly linked. ! 242: .PS ! 243: The final few bugs have been fixed in the ! 244: aggregation processor. ! 245: There were some cases when it did not ! 246: correctly process aggregate functions. ! 247: These have all been fixed so you can now ! 248: ask the query, "Which suppliers supply ! 249: all the parts supplied by some other supplier:" ! 250: ! 251: .nf ! 252: range of s is supply ! 253: range of x is supply ! 254: retrieve (x.snum) where ! 255: count(s.pnum by s.snum,x.snum ! 256: where s.pnum = x.pnum ! 257: and s.snum != x.snum) ! 258: = ! 259: count(s.pnum by s.snum) ! 260: .fi ! 261: .sh 1 ! 262: DBU. ! 263: .dn ! 264: Improved modify to isam, hash, or heapsort. ! 265: .PS ! 266: Modify has been greatly improved to speed ! 267: the time required to modify a relation to ! 268: any storage structure. ! 269: .sh ! 270: Sort in reverse. ! 271: .PS ! 272: Modify to heapsort allows you to specify ascending ! 273: or descending sort sequences. ! 274: Previously ascending was the only ordering allowed. ! 275: The sort order of ! 276: individual domains can be specified, for example: ! 277: ! 278: .nf ! 279: modify newemp to heapsort on age:descending, ! 280: salary, name:descending ! 281: .fi ! 282: .sh ! 283: Help remembers you forever. ! 284: .PS ! 285: The help command will now remember who you are, ! 286: even after an interrupt signal. ! 287: Previously it suffered amnesia under certain conditions. ! 288: .sh ! 289: Copy expanded a little. ! 290: .PS ! 291: The copy command now allows arbitrary delimitors ! 292: on c0 and d0 formats. ! 293: Special, single character delimitors ! 294: can be specified by putting the format in quotes. ! 295: ! 296: copy parts(name="c0&") from "/mnt/me/myfile" ! 297: ! 298: specifies that the variable length name is terminated ! 299: by an "&" character. ! 300: ! 301: On a copy into a relation, ! 302: the c0 format will now allow arbitrarily long fields. ! 303: The previous limit was 1024 characters. ! 304: Now it treats only the first 1024 as significant ! 305: and ignores the remainder. ! 306: .sh ! 307: Query modification information. ! 308: .PS ! 309: Help has been expanded to ! 310: give information about views, protection, and ! 311: integrity. ! 312: For example: ! 313: ! 314: .nf ! 315: help integrity parts, supply ! 316: ! 317: .fi ! 318: would give information about ! 319: the integrity contraints on the parts and supply ! 320: relations. ! 321: .sh ! 322: Destroying integrity and protection constraints. ! 323: .PS ! 324: Integrity and protection constraints can be ! 325: destroyed using a variation of the destroy command. ! 326: By asking for help on a relation, ! 327: you can get identification numbers for the ! 328: contraints. ! 329: The constraints can then be deleted by ! 330: ! 331: .nf ! 332: destroy integrity 3, 6, 8 ! 333: ! 334: or ! 335: ! 336: destroy integrity all ! 337: .fi ! 338: .sh ! 339: Help all. ! 340: .PS ! 341: Help now accepts the key word "all". ! 342: Its meaning is to print information ! 343: about all user relations which the user can access. ! 344: ! 345: .sh 1 ! 346: Equel. ! 347: .dn ! 348: Tuple count ! 349: .PS ! 350: A global variable called "IItupcount" is set ! 351: after each query which gives the ! 352: number of tuples in the result. ! 353: For a retrieve, ! 354: this is the number of tuples retrieved, ! 355: and for an update it is the number of tuples ! 356: actually changed. ! 357: .sh ! 358: Equel expanded. ! 359: .PS ! 360: Equel allows nearly all "C" language constructs. ! 361: Specifically it now supports structures, ! 362: pointers, and local variables. ! 363: ! 364: Quel statements can be parameterized so that ! 365: arbitrary equel statements can be generated ! 366: at run time. ! 367: ! 368: Equel now accepts "## include" files. ! 369: .sh 1 ! 370: Miscellaneous. ! 371: .dn ! 372: 11/70 system. ! 373: .PS ! 374: Ovqp and decomp can be combined on machines ! 375: which support separated instruction and data spaces. ! 376: In addition, ! 377: all the dbu's can be combined into one overlay ! 378: on i and d machines. ! 379: For details, ! 380: see the setup instructions. ! 381: .sh ! 382: Better page buffering. ! 383: .PS ! 384: On 11/70 systems, ! 385: INGRES uses a better buffering algorithm ! 386: which can substantially reduce disk references. ! 387: .sh ! 388: Improved "-u" flag for alter egos. ! 389: .PS ! 390: The "-u" flag now accepts the name of a user. ! 391: The database administrator can run ingres ! 392: as someone else on his/her database by ! 393: specifier the users login name, ! 394: for example "ingres -ubetty empdb" ! 395: would invoke ingres with the user "betty"s ! 396: privileges on the "empdb" database. ! 397: ! 398: Alternately, ! 399: the INGRES usercode of the user can be specified by ! 400: stating "-u:xx" where "xx" is the INGRES usercode. ! 401: .sh ! 402: Datadir replaced by data/base. ! 403: .PS ! 404: New databases are now placed in the ! 405: directory .../data/base/. ! 406: In previous versions they were placed in .../datadir. ! 407: The reasons for this relate to the fact that creating a directory ! 408: requires read/write/search permission for everyone. ! 409: However, ! 410: such permission also allows any user to remove a file. ! 411: The two level directory allows the creation of directories ! 412: but protects against users accessing the database to remove files. ! 413: Existing databases in .../datadir/ will continue to work ! 414: but you should be aware that users can remove the files holding ! 415: the relations. ! 416: If desired, ! 417: existing databases can be copied from .../datadir/dbname/* ! 418: to .../data/base/dbname/*. ! 419: After being copied, ! 420: the old database must be destroyed. ! 421: You must be logged in as ingres to perform this feat. ! 422: .sh ! 423: Databases outside of .../data/base/. ! 424: .PS ! 425: Database can now exist outside of .../data/base/. ! 426: To do this, ! 427: the ingres superuser must create the directory ! 428: for the database and store the pathname of the ! 429: directory in a file under .../data/base/. ! 430: For details see the creatdb(unix) documentation. ! 431: .sh ! 432: Helpr. ! 433: .PS ! 434: There is a stand alone routine akin to ! 435: "printr" called "helpr". ! 436: Its function is the same as the help command. ! 437: .sh ! 438: Floating point conversion. ! 439: .PS ! 440: Version 6.1 did not correctly round floating point ! 441: numbers with negative exponents. ! 442: Thus it is likely that floating point values printed ! 443: using 6.2 will differ from 6.1. ! 444: .sh ! 445: Improved ISAM search. ! 446: .PS ! 447: The ISAM directory pages are now searched in a ! 448: more efficient manner.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.