|
|
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.