gss.texi
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:55k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1.  input texinfo
  2. @ifinfo
  3. @c The edition number appears in several places in this file
  4. This corresponds to the first edition of the @cite{GNU SQL Server Manual},
  5. for GNU SQL Server version 0.7.
  6. @c Please REMEMBER to update edition number in *three* places in this file.
  7. Copyright (C) 1996 Free Software Foundation, Inc.
  8. Permission is granted to make and distribute verbatim copies of
  9. this manual provided the copyright notice and this permission notice
  10. are preserved on all copies.
  11. @ignore
  12. Permission is granted to process this file through TeX and print the
  13. results, provided the printed document carries copying permission
  14. notice identical to this one except for the removal of this paragraph
  15. (this paragraph not being relevant to the printed manual).
  16. @end ignore
  17. Permission is granted to copy and distribute modified versions of this
  18. manual under the conditions for verbatim copying, provided also that the
  19. sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU
  20. General Public License'' are included exactly as in the original, and
  21. provided that the entire resulting derived work is distributed under the
  22. terms of a permission notice identical to this one.
  23. Permission is granted to copy and distribute translations of this manual
  24. into another language, under the above conditions for modified versions,
  25. except that the sections entitled ``The GNU Manifesto'',
  26. ``Distribution'' and ``GNU General Public License'' may be included in a
  27. translation approved by the Free Software Foundation instead of in the
  28. original English.
  29. @end ifinfo
  30. @c
  31. @c comment out this line if you do NOT want to have an indication that
  32. @c an index entry appears in the texinfo file near this line of text.
  33. @c this line should definitely be commented out for printing a master
  34. @c and for making the version to go on the floppy disk.
  35. @c
  36. @c @include /gd/gnu/doc/margins-comment-format.texi
  37. @c
  38. @setchapternewpage odd
  39. @settitle GNU SQL Server Manual
  40. @setfilename gss
  41. @synindex pg cp
  42. @c
  43. @c in general, keep the following line commented out, unless doing a
  44. @c copy of this manual that will be published.  the manual should go
  45. @c onto the distribution in the full, 8.5 x 11" size.
  46. @c
  47. @smallbook
  48. @c
  49. @iftex
  50. @shorttitlepage GNU SQL Server Manual
  51. @end iftex
  52. @titlepage
  53. @sp 6
  54. @center @titlefont{GNU SQL Server Manual}
  55. @sp 4
  56. @center Preliminary Edition, Created for GNU SQL Server Version 0.7
  57. @sp 5
  58. @center Michael Kimelman
  59. @page
  60. @vskip 0pt plus 1filll
  61. Copyright @copyright{} 1996 Free Software Foundation Inc.
  62. @sp 2
  63. Preliminary Edition @*
  64. Created for GNU SQL Server Version 0.7, @*
  65. October 1996
  66. @sp 1
  67. Permission is granted to make and distribute verbatim copies of
  68. this manual provided the copyright notice and this permission notice
  69. are preserved on all copies.
  70. Permission is granted to copy and distribute modified versions of this
  71. manual under the conditions for verbatim copying, provided also that the
  72. sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU
  73. General Public License'' are included exactly as in the original, and
  74. provided that the entire resulting derived work is distributed under the
  75. terms of a permission notice identical to this one.
  76. Permission is granted to copy and distribute translations of this manual
  77. into another language, under the above conditions for modified versions,
  78. except that the sections entitled ``The GNU Manifesto'',
  79. ``Distribution'' and ``GNU General Public License'' may be included in a
  80. translation approved by the Free Software Foundation instead of in the
  81. original English.
  82. @sp 2
  83. @end titlepage
  84. @page
  85. @ifinfo
  86. @node Top, Distrib, (dir), (dir)
  87. @top The GNU SQL Server
  88. GNU SQL Server is a relational database system. This Info file describes
  89. how to use and program a database with the GNU SQL Server. It corresponds
  90. to GNU SQL Server version 0.7
  91. @end ifinfo
  92. @ignore
  93. @end ignore
  94. @menu
  95. Common questions
  96. * Distrib::       How to get the latest GNU SQL Server distribution.
  97. * Copying::       The GNU General Public License gives you permission
  98. to redistribute GNU SQL Server on certain terms;
  99. it also explains that there is no warranty.
  100. * Manifesto::       What's GNU?  Gnu's Not Unix!
  101. * Acknowledgments::   Major contributors to GNU SQL Server.
  102. SQL server topics
  103. * Intro::       An introduction to current revision
  104. * Architecture::      Overview of server architecture
  105. * Dialect::           Dialect notes
  106. * Server::            Running Server
  107. * Client::            Compiling and running DB applications
  108. * Bugs::       How and when to report a bug.
  109. * Key Index::
  110. * Command Index::
  111. * Variable Index::
  112. * Concept Index::
  113. Reporting Bugs
  114. * Criteria:  Bug Criteria.  Have you really found a bug?
  115. * Understanding Bug Reporting::  How to report a bug effectively.
  116. * Checklist::  Steps to follow for a good bug report.
  117. * Sending Patches::  How to send a patch for GNU SQL Server.
  118. @end menu
  119. @iftex
  120. @unnumbered Preface
  121.   This manual documents the use and programming with the GNU SQL server.
  122. The reader is not expected to be familiar with other public domain or
  123. commercial systems but some knowledge of C, SQL and database theory are
  124. expected. [<<-- list the references that would enable the reader to
  125. obtain this knowledge. ]
  126.   This manual is available as an Info file. The Info file is for
  127. on-line perusal with the GNU Info program, which will be the principal
  128. way of viewing documentation on-line in the GNU system.
  129. This edition of the manual is intended for use with the GNU SQL Server
  130. installed on GNU and Unix systems.
  131. @end iftex
  132. @node Distrib, Copying, Top, Top
  133. @unnumbered Distribution
  134. GNU SQL Server is @dfn{free software}; this means that everyone is free to
  135. use it and free to redistribute it on certain conditions.  GNU SQL Server is
  136. not in the public domain; it is copyrighted and there are restrictions
  137. on its distribution, but these restrictions are designed to permit
  138. everything that a good cooperating citizen would want to do.  What is
  139. not allowed is to try to prevent others from further sharing any version
  140. of GNU SQL Server that they might get from you.  The precise conditions are
  141. found in the GNU General Public License that comes with GNU SQL Server and also
  142. appears following this section.
  143. One way to get a copy of GNU SQL Server is from someone else who has it.  You
  144. need not ask for our permission to do so, or tell any one else; just
  145. copy it.  If you have access to the Internet, you can get the latest
  146. distribution version of GNU SQL Server by anonymous FTP; see the file
  147. @file{etc/FTP} in the GNU SQL Server distribution for more information.
  148. You may also receive GNU SQL Server when you buy a computer.  Computer
  149. manufacturers are free to distribute copies on the same terms that apply to
  150. everyone else.  These terms require them to give you the full sources,
  151. including whatever changes they may have made, and to permit you to
  152. redistribute the GNU SQL Server received from them under the usual terms of the
  153. General Public License.  In other words, the program must be free for you
  154. when you get it, not just free for the manufacturer.
  155. @display
  156. Free Software Foundation
  157. 59 Temple Place, Suite 330
  158. Boston, MA  02111-1307 USA
  159. USA
  160. @end display
  161. The income from distribution fees goes to support the foundation's
  162. purpose: the development of new free software, and improvements to our
  163. existing programs including GNU SQL Server.
  164. If you find GNU SQL Server useful, please @strong{send a donation} to the
  165. Free Software Foundation to support our work.  Donations to the Free
  166. Software Foundation are tax deductible.  If you use GNU SQL Server at your
  167. workplace, suggest that the company make a donation.  If company policy
  168. is unsympathetic to the idea of donating to charity, you might instead
  169. suggest ordering a CD-ROM from the Foundation occasionally, or
  170. subscribing to periodic updates.
  171. @iftex
  172. Contributors to GNU SQL Server include Sergei Kuznetsov,
  173. Michael Kimelman, Vera Ponomarenko, Konstantin Dyshlevoy, 
  174. Andrey Yachin, Eugene Voinov. 
  175. @end iftex
  176. @node Copying, Manifesto, Distrib, Top
  177. @unnumbered GNU GENERAL PUBLIC LICENSE
  178. @center Version 2, June 1991
  179. @display
  180. Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
  181. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  182. Everyone is permitted to copy and distribute verbatim copies
  183. of this license document, but changing it is not allowed.
  184. @end display
  185. @unnumberedsec Preamble
  186.   The licenses for most software are designed to take away your
  187. freedom to share and change it.  By contrast, the GNU General Public
  188. License is intended to guarantee your freedom to share and change free
  189. software---to make sure the software is free for all its users.  This
  190. General Public License applies to most of the Free Software
  191. Foundation's software and to any other program whose authors commit to
  192. using it.  (Some other Free Software Foundation software is covered by
  193. the GNU Library General Public License instead.)  You can apply it to
  194. your programs, too.
  195.   When we speak of free software, we are referring to freedom, not
  196. price.  Our General Public Licenses are designed to make sure that you
  197. have the freedom to distribute copies of free software (and charge for
  198. this service if you wish), that you receive source code or can get it
  199. if you want it, that you can change the software or use pieces of it
  200. in new free programs; and that you know you can do these things.
  201.   To protect your rights, we need to make restrictions that forbid
  202. anyone to deny you these rights or to ask you to surrender the rights.
  203. These restrictions translate to certain responsibilities for you if you
  204. distribute copies of the software, or if you modify it.
  205.   For example, if you distribute copies of such a program, whether
  206. gratis or for a fee, you must give the recipients all the rights that
  207. you have.  You must make sure that they, too, receive or can get the
  208. source code.  And you must show them these terms so they know their
  209. rights.
  210.   We protect your rights with two steps: (1) copyright the software, and
  211. (2) offer you this license which gives you legal permission to copy,
  212. distribute and/or modify the software.
  213.   Also, for each author's protection and ours, we want to make certain
  214. that everyone understands that there is no warranty for this free
  215. software.  If the software is modified by someone else and passed on, we
  216. want its recipients to know that what they have is not the original, so
  217. that any problems introduced by others will not reflect on the original
  218. authors' reputations.
  219.   Finally, any free program is threatened constantly by software
  220. patents.  We wish to avoid the danger that redistributors of a free
  221. program will individually obtain patent licenses, in effect making the
  222. program proprietary.  To prevent this, we have made it clear that any
  223. patent must be licensed for everyone's free use or not licensed at all.
  224.   The precise terms and conditions for copying, distribution and
  225. modification follow.
  226. @iftex
  227. @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  228. @end iftex
  229. @ifinfo
  230. @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  231. @end ifinfo
  232. @enumerate 0
  233. @item
  234. This License applies to any program or other work which contains
  235. a notice placed by the copyright holder saying it may be distributed
  236. under the terms of this General Public License.  The ``Program'', below,
  237. refers to any such program or work, and a ``work based on the Program''
  238. means either the Program or any derivative work under copyright law:
  239. that is to say, a work containing the Program or a portion of it,
  240. either verbatim or with modifications and/or translated into another
  241. language.  (Hereinafter, translation is included without limitation in
  242. the term ``modification''.)  Each licensee is addressed as ``you''.
  243. Activities other than copying, distribution and modification are not
  244. covered by this License; they are outside its scope.  The act of
  245. running the Program is not restricted, and the output from the Program
  246. is covered only if its contents constitute a work based on the
  247. Program (independent of having been made by running the Program).
  248. Whether that is true depends on what the Program does.
  249. @item
  250. You may copy and distribute verbatim copies of the Program's
  251. source code as you receive it, in any medium, provided that you
  252. conspicuously and appropriately publish on each copy an appropriate
  253. copyright notice and disclaimer of warranty; keep intact all the
  254. notices that refer to this License and to the absence of any warranty;
  255. and give any other recipients of the Program a copy of this License
  256. along with the Program.
  257. You may charge a fee for the physical act of transferring a copy, and
  258. you may at your option offer warranty protection in exchange for a fee.
  259. @item
  260. You may modify your copy or copies of the Program or any portion
  261. of it, thus forming a work based on the Program, and copy and
  262. distribute such modifications or work under the terms of Section 1
  263. above, provided that you also meet all of these conditions:
  264. @enumerate a
  265. @item
  266. You must cause the modified files to carry prominent notices
  267. stating that you changed the files and the date of any change.
  268. @item
  269. You must cause any work that you distribute or publish, that in
  270. whole or in part contains or is derived from the Program or any
  271. part thereof, to be licensed as a whole at no charge to all third
  272. parties under the terms of this License.
  273. @item
  274. If the modified program normally reads commands interactively
  275. when run, you must cause it, when started running for such
  276. interactive use in the most ordinary way, to print or display an
  277. announcement including an appropriate copyright notice and a
  278. notice that there is no warranty (or else, saying that you provide
  279. a warranty) and that users may redistribute the program under
  280. these conditions, and telling the user how to view a copy of this
  281. License.  (Exception: if the Program itself is interactive but
  282. does not normally print such an announcement, your work based on
  283. the Program is not required to print an announcement.)
  284. @end enumerate
  285. These requirements apply to the modified work as a whole.  If
  286. identifiable sections of that work are not derived from the Program,
  287. and can be reasonably considered independent and separate works in
  288. themselves, then this License, and its terms, do not apply to those
  289. sections when you distribute them as separate works.  But when you
  290. distribute the same sections as part of a whole which is a work based
  291. on the Program, the distribution of the whole must be on the terms of
  292. this License, whose permissions for other licensees extend to the
  293. entire whole, and thus to each and every part regardless of who wrote it.
  294. Thus, it is not the intent of this section to claim rights or contest
  295. your rights to work written entirely by you; rather, the intent is to
  296. exercise the right to control the distribution of derivative or
  297. collective works based on the Program.
  298. In addition, mere aggregation of another work not based on the Program
  299. with the Program (or with a work based on the Program) on a volume of
  300. a storage or distribution medium does not bring the other work under
  301. the scope of this License.
  302. @item
  303. You may copy and distribute the Program (or a work based on it,
  304. under Section 2) in object code or executable form under the terms of
  305. Sections 1 and 2 above provided that you also do one of the following:
  306. @enumerate a
  307. @item
  308. Accompany it with the complete corresponding machine-readable
  309. source code, which must be distributed under the terms of Sections
  310. 1 and 2 above on a medium customarily used for software interchange; or,
  311. @item
  312. Accompany it with a written offer, valid for at least three
  313. years, to give any third party, for a charge no more than your
  314. cost of physically performing source distribution, a complete
  315. machine-readable copy of the corresponding source code, to be
  316. distributed under the terms of Sections 1 and 2 above on a medium
  317. customarily used for software interchange; or,
  318. @item
  319. Accompany it with the information you received as to the offer
  320. to distribute corresponding source code.  (This alternative is
  321. allowed only for noncommercial distribution and only if you
  322. received the program in object code or executable form with such
  323. an offer, in accord with Subsection b above.)
  324. @end enumerate
  325. The source code for a work means the preferred form of the work for
  326. making modifications to it.  For an executable work, complete source
  327. code means all the source code for all modules it contains, plus any
  328. associated interface definition files, plus the scripts used to
  329. control compilation and installation of the executable.  However, as a
  330. special exception, the source code distributed need not include
  331. anything that is normally distributed (in either source or binary
  332. form) with the major components (compiler, kernel, and so on) of the
  333. operating system on which the executable runs, unless that component
  334. itself accompanies the executable.
  335. If distribution of executable or object code is made by offering
  336. access to copy from a designated place, then offering equivalent
  337. access to copy the source code from the same place counts as
  338. distribution of the source code, even though third parties are not
  339. compelled to copy the source along with the object code.
  340. @item
  341. You may not copy, modify, sublicense, or distribute the Program
  342. except as expressly provided under this License.  Any attempt
  343. otherwise to copy, modify, sublicense or distribute the Program is
  344. void, and will automatically terminate your rights under this License.
  345. However, parties who have received copies, or rights, from you under
  346. this License will not have their licenses terminated so long as such
  347. parties remain in full compliance.
  348. @item
  349. You are not required to accept this License, since you have not
  350. signed it.  However, nothing else grants you permission to modify or
  351. distribute the Program or its derivative works.  These actions are
  352. prohibited by law if you do not accept this License.  Therefore, by
  353. modifying or distributing the Program (or any work based on the
  354. Program), you indicate your acceptance of this License to do so, and
  355. all its terms and conditions for copying, distributing or modifying
  356. the Program or works based on it.
  357. @item
  358. Each time you redistribute the Program (or any work based on the
  359. Program), the recipient automatically receives a license from the
  360. original licensor to copy, distribute or modify the Program subject to
  361. these terms and conditions.  You may not impose any further
  362. restrictions on the recipients' exercise of the rights granted herein.
  363. You are not responsible for enforcing compliance by third parties to
  364. this License.
  365. @item
  366. If, as a consequence of a court judgment or allegation of patent
  367. infringement or for any other reason (not limited to patent issues),
  368. conditions are imposed on you (whether by court order, agreement or
  369. otherwise) that contradict the conditions of this License, they do not
  370. excuse you from the conditions of this License.  If you cannot
  371. distribute so as to satisfy simultaneously your obligations under this
  372. License and any other pertinent obligations, then as a consequence you
  373. may not distribute the Program at all.  For example, if a patent
  374. license would not permit royalty-free redistribution of the Program by
  375. all those who receive copies directly or indirectly through you, then
  376. the only way you could satisfy both it and this License would be to
  377. refrain entirely from distribution of the Program.
  378. If any portion of this section is held invalid or unenforceable under
  379. any particular circumstance, the balance of the section is intended to
  380. apply and the section as a whole is intended to apply in other
  381. circumstances.
  382. It is not the purpose of this section to induce you to infringe any
  383. patents or other property right claims or to contest validity of any
  384. such claims; this section has the sole purpose of protecting the
  385. integrity of the free software distribution system, which is
  386. implemented by public license practices.  Many people have made
  387. generous contributions to the wide range of software distributed
  388. through that system in reliance on consistent application of that
  389. system; it is up to the author/donor to decide if he or she is willing
  390. to distribute software through any other system and a licensee cannot
  391. impose that choice.
  392. This section is intended to make thoroughly clear what is believed to
  393. be a consequence of the rest of this License.
  394. @item
  395. If the distribution and/or use of the Program is restricted in
  396. certain countries either by patents or by copyrighted interfaces, the
  397. original copyright holder who places the Program under this License
  398. may add an explicit geographical distribution limitation excluding
  399. those countries, so that distribution is permitted only in or among
  400. countries not thus excluded.  In such case, this License incorporates
  401. the limitation as if written in the body of this License.
  402. @item
  403. The Free Software Foundation may publish revised and/or new versions
  404. of the General Public License from time to time.  Such new versions will
  405. be similar in spirit to the present version, but may differ in detail to
  406. address new problems or concerns.
  407. Each version is given a distinguishing version number.  If the Program
  408. specifies a version number of this License which applies to it and ``any
  409. later version'', you have the option of following the terms and conditions
  410. either of that version or of any later version published by the Free
  411. Software Foundation.  If the Program does not specify a version number of
  412. this License, you may choose any version ever published by the Free Software
  413. Foundation.
  414. @item
  415. If you wish to incorporate parts of the Program into other free
  416. programs whose distribution conditions are different, write to the author
  417. to ask for permission.  For software which is copyrighted by the Free
  418. Software Foundation, write to the Free Software Foundation; we sometimes
  419. make exceptions for this.  Our decision will be guided by the two goals
  420. of preserving the free status of all derivatives of our free software and
  421. of promoting the sharing and reuse of software generally.
  422. @iftex
  423. @heading NO WARRANTY
  424. @end iftex
  425. @ifinfo
  426. @center NO WARRANTY
  427. @end ifinfo
  428. @item
  429. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  430. FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@.  EXCEPT WHEN
  431. OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  432. PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  433. OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  434. MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@.  THE ENTIRE RISK AS
  435. TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU@.  SHOULD THE
  436. PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  437. REPAIR OR CORRECTION.
  438. @item
  439. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  440. WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  441. REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  442. INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  443. OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  444. TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  445. YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  446. PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  447. POSSIBILITY OF SUCH DAMAGES.
  448. @end enumerate
  449. @iftex
  450. @heading END OF TERMS AND CONDITIONS
  451. @end iftex
  452. @ifinfo
  453. @center END OF TERMS AND CONDITIONS
  454. @end ifinfo
  455. @page
  456. @unnumberedsec How to Apply These Terms to Your New Programs
  457.   If you develop a new program, and you want it to be of the greatest
  458. possible use to the public, the best way to achieve this is to make it
  459. free software which everyone can redistribute and change under these terms.
  460.   To do so, attach the following notices to the program.  It is safest
  461. to attach them to the start of each source file to most effectively
  462. convey the exclusion of warranty; and each file should have at least
  463. the ``copyright'' line and a pointer to where the full notice is found.
  464. @smallexample
  465. @var{one line to give the program's name and an idea of what it does.}
  466. Copyright (C) 19@var{yy}  @var{name of author}
  467. This program is free software; you can redistribute it and/or
  468. modify it under the terms of the GNU General Public License
  469. as published by the Free Software Foundation; either version 2
  470. of the License, or (at your option) any later version.
  471. This program is distributed in the hope that it will be useful,
  472. but WITHOUT ANY WARRANTY; without even the implied warranty of
  473. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the
  474. GNU General Public License for more details.
  475. You should have received a copy of the GNU General Public License
  476. along with this program; if not, write to the Free Software
  477. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  478. @end smallexample
  479. Also add information on how to contact you by electronic and paper mail.
  480. If the program is interactive, make it output a short notice like this
  481. when it starts in an interactive mode:
  482. @smallexample
  483. Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
  484. Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
  485. type `show w'.  This is free software, and you are welcome
  486. to redistribute it under certain conditions; type `show c' 
  487. for details.
  488. @end smallexample
  489. The hypothetical commands @samp{show w} and @samp{show c} should show
  490. the appropriate parts of the General Public License.  Of course, the
  491. commands you use may be called something other than @samp{show w} and
  492. @samp{show c}; they could even be mouse-clicks or menu items---whatever
  493. suits your program.
  494. You should also get your employer (if you work as a programmer) or your
  495. school, if any, to sign a ``copyright disclaimer'' for the program, if
  496. necessary.  Here is a sample; alter the names:
  497. @smallexample
  498. @group
  499. Yoyodyne, Inc., hereby disclaims all copyright
  500. interest in the program `Gnomovision'
  501. (which makes passes at compilers) written 
  502. by James Hacker.
  503. @var{signature of Ty Coon}, 1 April 1989
  504. Ty Coon, President of Vice
  505. @end group
  506. @end smallexample
  507. This General Public License does not permit incorporating your program into
  508. proprietary programs.  If your program is a subroutine library, you may
  509. consider it more useful to permit linking proprietary applications with the
  510. library.  If this is what you want to do, use the GNU Library General
  511. Public License instead of this License.
  512. @node Intro, Architecture, Acknowledgments, Top
  513. @unnumbered Introduction
  514.   You are reading about GNU SQL Server, the GNU implementation of 
  515. relational database server.
  516. GNU SQL-Server (GSS) was implemented by small team of
  517. Russian programmers working in the Institute for System
  518. Programming of Russian Academy of Sciences with support of
  519. Free Software Foundation and Russian Foundation for Basic
  520. Research.
  521. The project was started at 1992. To this time we already had some
  522. version of an engine (we call it "The Subsystem for Data and
  523. Transaction Management" - SDTM) which was developed for
  524. the experimental object-based operating system CLASTOS. At the first
  525. step SDTM was ported to UNIX environment. In parallel we started
  526. implementation of the SQL compiler and SQL runtime library. 
  527. At the first stage of the project we got the great help from Sergei 
  528. Gaissarian who is one of the best experts in compilers in our institute.
  529. Now we really have a working prototype of the system and would
  530. like to give people a possibility to use it. Of course GSS is
  531. not so good as current commercial implementations: sometimes it's
  532. too slow and we know why; we don't have yet any advanced user
  533. interface (such as forms), etc. But GNU SQL Server is under the GNU General
  534.  Public License and now you can improve it. 
  535. In this manual we briefly describe the general architecture of the
  536. system, introduce our version of SQL and provide the information
  537. about GSS installation. If you have some questions don't
  538. hesitate to contact with us through e-mail: @emph{gss@@ispras.ru}.
  539. @node Architecture, Dialect , Intro , Top
  540. GSS is based on client-server architecture for DBMS
  541. organizations. The system is dedicated for use in distributed
  542. open systems in UNIX environments. In fact, we support two kinds
  543. of "clients and servers".
  544. The whole set of processes working with a data base may be
  545. broken up into several layers depending upon the distance from the
  546. data base. The most internal layer which is the closest to a data
  547. base consists of a set of processes of SDTM. These processes
  548. provide the services of Synchronizer (two-phase predicate locks),
  549. Logical Log (the log of updates at the logical level), Micro Log (the
  550. log for microoperations), Buffer (main memory bufferization,
  551. exchanges with disks, locks of pages), and Sorter (to make
  552. external sorts). SDTM also includes utilities to restore the data
  553. base after failures and crashes of modules for transactions. In
  554. fact, these modules represent some kind of runtime library. They
  555. implement the external interface of SDTM.  All processes of this
  556. layer communicate with message queues and shared memory.
  557. The next layer consists of the server processes of the compiler and
  558. interpreter of SQL-statements. These processes contain modules of
  559. transactions and access the kernel and data through them. This
  560. layer provides services which are available with the mechanism of
  561. remote procedure calls.
  562. The server part of the system also contains the process of
  563. Administrator that monitors a state of all other processes of the
  564. server and creates by demand services of the compiler and
  565. interpreter. This process communicates with other processes of
  566. the internal layer with signals and messages and is accessible for
  567. external invocations   via   remote   procedure    calls.    The
  568. Administrator may  be  registered as an Internet daemon,  and it
  569. may unload all other parts of server if they aren't used  for  a
  570. long time.
  571. Client parts of the system may reside on any computer of a local
  572. network. The client part consists of the client part of the SQL
  573. compiler and the client part of the interpreter which are linked
  574. together with a user's program. The only requirement for an
  575. environment where a client part functions is that it should
  576. support the mechanism of remote procedure calls.
  577. The client part of the compiler (the precompiler) is responsible
  578. for selection of pure SQL-text and its transmission to the main
  579. (server) part of the compiler to convert into a procedural
  580. representation. After such processing, the user gets a pure
  581. C-program where SQL-code is replaced to calls of the
  582. runtime-library of the client part of the query interpreter. A
  583. corresponded procedural code of SQL-statements is stored within a
  584. data base.
  585. At runtime, the server part of the interpreter is provided with
  586. reference to previously compiled and stored within data base code
  587. together with parameters of a corresponded SQL-statement. Using
  588. this reference, the server part of the interpreter retrieves the
  589. code from data base and perform it with appropriate invocations
  590. of SDTM.
  591. We use machine-independent internal representation of
  592. procedural SQL-code to provide more portability and reliability
  593. of the system. In principle, we could generate machine codes. But
  594. the main problem was that we often need to compile something
  595. dynamically (in runtime) and to load additional parts of code
  596. from the data base by linking them together with a running
  597. program. Standard loaders do not provide such facilities. So we
  598. would need to write a sufficient part of special code for each
  599. pair of processor  and  operating  system.  Moreover,  the  most
  600. overhead is paid not for interpretation but for data retrieval
  601. and may be for the analysis of retrieval conditions. 
  602. @node Dialect, Server, Architecture, Top
  603. @center The Dialect of SQL of GNU SQL Server
  604. Activities for standardization of SQL had started practically
  605. simultaneously with its first commercial implementations. Original 
  606. System R's SQL was not developed with enough care. Commercial dialects
  607. were so different that no one could be accepted as a standard.
  608. The first International Standard SQL-89 in many parts is not
  609. defined precisely enough and allows different interpretations. Also,
  610. this standard doesn't include such important things as schema
  611. manipulation and dynamic SQL facilities. A much more complete and
  612. precise SQL standard was adopted in 1992 but it still omit a lot
  613. of useful functionality. 
  614. @menu
  615. * Dialect Intro::        Requirements to the SQL Dialect
  616. * Data description::     Definition of operating parameters
  617. * Data types::           Data type correspondence
  618. * Schema::               Schema manipulations and consistency constraints
  619. * Access::               Data access control
  620. @end menu
  621. @node Dialect Intro, Data description, Dialect, Dialect
  622. @section Dialect Intro
  623. The dialect of the SQL of GSS is
  624. oriented to embedded C and uses an ASCII-compatible set of
  625. characters. The dialect supports data types that are adequate
  626. to the base set of types of C, and also strings of various
  627. length. Statements for data definitions allow us to create and
  628. to drop relations and views, and also to grant privileges
  629. to other users. Supported constraints allow us to prevent
  630. entrance of NULL-values, and to define constraints of
  631. uniqueness on tables. The language also allows us to declare check
  632. constraints on a table (conditions that should be true on
  633. every tuple of the relation) and referential constraints.
  634. The set of statements for data manipulations includes statements
  635. to insert, update and delete tuples from relations. The select
  636. statement may include unions (possibly, with elimination of
  637. duplicates), joins, and nested subqueries. A result table may be
  638. sorted in ascendant or descendant order. A result table may be
  639. processed tuple by tuple through a sequential cursor.
  640. The SQL dialect is oriented for use in a UNIX-environment. This
  641. environment provides the implementation with an authorization
  642. identifier (user name) and a name of the module which is associated
  643. with a given C-program with embedded SQL. The last name is formed
  644. as the name of the corresponding source file qualified with the
  645. user name.
  646. The dialect does not support any explicit statement to connect a
  647. data base. A connection is provided automatically to an SQL-server
  648. specified at a phase of compilation. A name of the SQL-server is
  649. defined as a network name of a computer where the server is
  650. installed.
  651. Below we consider some issues of the dialect with some details.
  652. @node Data description, Data types, Dialect Intro, Dialect
  653. @section Data description
  654. @emph{Data description}
  655. SQL statements manipulate the following data elements: constants
  656. (numbers and strings), parameters (variables of a host
  657. C-program), columns, tables, and user defined schemes.
  658. Identifiers which are used to name these elements may be
  659. represented in traditional form ([A-Za-z][A-Za-z0-9]* e.g. A0z9)
  660. or as a double quoted string ("This is an identifier too"). Names
  661. of host variables should also satisfy the naming rules of the C
  662. programming language. The dialect of SQL does not restrict the
  663. length of identifiers of host variables but any name of a table,
  664. column, or user-defined schema should not be longer than 18
  665. characters. Literal strings of characters are restricted by
  666. single quotes ('this is an example of such literal') and may
  667. contain any symbol of the character set used. Strings are sorted
  668. according to codes of characters (thus if the KOI-8 - Russian
  669. extension of ASCII - is in use than sorting will not always
  670. provide the desired ordering).
  671. Parameters and columns of any type and expressions constructed
  672. from them may have a NULL-value in addition to all the usual values of
  673. a given data type. In indexes, a NULL-value is considered as a
  674. value that is less than every non-NULL value of the same type. To
  675. fetch into a host variable a column or expression that may have
  676. NULL-value one should use an additional indicator variable that gets
  677. a value of -1 if a value of the main variable is NULL.
  678. @node Data types, Schema, Data description, Dialect
  679. @section Data types
  680. @center Data types
  681. In the current version we support only those data types that may
  682. be directly mapped into data types of standard C programming
  683. language. The correspondence between SQL data types and C data
  684. types is shown below:
  685. @example
  686.     SQL data type        C data type
  687.  CHAR(ACTOR)([length])  char [length]
  688.  INT(EGER)              long
  689.  SMALLINT               short
  690.  REAL                   float
  691.  DOUBLE PRECISION       double
  692. @end example
  693. The system also partially supports the SQL FLOAT data type: depending
  694. on required precision it is mapped onto either a float or a double
  695. data type of C. But if too high precision is required (which may
  696. not be emulated by double) then an error message is generated.
  697. The same method is used for the SQL DECIMAL data type if a scale is
  698. defined as zero. Processing of such data types as DATETIME and
  699. CHARVAR have not yet been implemented.
  700. @node Schema, Access, Data types, Dialect
  701. @section Schema
  702. @center Schema manipulations and consistency constraints
  703. By definition, user schema is a totality of all stored objects of
  704. a given user: tables, views, modules (a set of compiled
  705. SQL-statements that correspond to one user's program) and
  706. triggers. The user schema is actually created when the first object
  707. of this user is created. SQL CREATE SCHEMA statement does not
  708. create anything itself, it just defines a context (default
  709. authority identifier) for all the nested statements for table and
  710. view creation.
  711. SQL CREATE TABLE statement specifies table name, column
  712. description and integrity constraints that should be applied to a
  713. given table. Each column is specified by its name, data type and
  714. optionally by a default value. Our dialect of SQL allows three
  715. kinds of integrity constraints: primary and alternative key
  716. constraints (unique constraints), referential constraints (for
  717. foreign keys), and check constraints. In the case of referential
  718. constraints there should exist a unique constraint for an
  719. appropriate set of the referred table. All unique and check
  720. constraints are checked on each row update of a given table.
  721. Foreign key constraints are checked on each row update both of
  722. referring and referred tables.
  723. For each check or referential constraint an appropriate trigger
  724. is created within a data base. The only function of this trigger
  725. is to check a constraint and to undo SQL statements that violate
  726. the constraint. Any explicit triggers are not allowed.
  727. The statement DROP TABLE is successively executed only if there
  728. are not any references (foreign keys) belonging to it. Views, i.e.
  729. stored named queries, that are treated as tables are supported. Our
  730. version of SQL does not support modules explicitly: there is not any
  731. special language construction to create explicit modules. In fact,
  732. implicit modules are created and maintained by the SQL compiler.
  733. @node Access, , Schema, Dialect
  734. @section Access
  735. @center Data access control
  736. Each (registered) user may create objects with any authorization
  737. identifier that may differ from his/her own identifier. But only
  738. this creator (owner) may modify or drop these objects.
  739. Immediately after creation only the owner has rights for any
  740. operation with this object, and all other users cannot do
  741. anything. But later the owner can grant all or part of his/her
  742. rights to other user(s) with the SQL GRANT PRIVILEGES statement,
  743. including WITH GRANT OPTION.
  744. @c Any grantor may also revoke
  745. @c previously granted privileges with SQL REVOKE PRIVILEGES
  746. @c statement. Of course, the REVOKE statement will revoke privileges of
  747. @c all users that are grantees of a grantee of the recent grantor.
  748. According to SQL-89 standard our dialect supports SELECT, INSERT,
  749. DELETE, UPDATE, and REFERENCE privileges.
  750. @node Server, Client, Dialect, Top
  751. To start the server you need to run SQL server top routine 'gsqls' from the 
  752. @cite{dbhome} directory (let's say /usr/local/gnusql/0.7b3/i586-unknown-linux )
  753. ( or @cite{sqlser} subdirectory of distribution). If you want to run it in background,
  754. you have to redirect output streams to log. if you configured it
  755. to use debugger, you need to give administrator answers: i.e. whether or
  756. not you start debugger for each started subservice.
  757. @example
  758. Example:
  759. gsql@{kml@}/home/gsql/gss/sqlser(45): ls -l
  760. -rwxrwxr-x   1 vera     sql       266032 Oct  4 14:31 gsqls
  761. drwxrwxr-x   2 vera     sql          512 Oct  4 14:32 bin
  762. drwxrwxr-x   2 vera     sql          512 Oct  1 14:08 client
  763. drwxrwxr-x   2 vera     sql          512 Oct  4 12:43 db
  764. drwxrwxr-x   2 vera     sql          512 Oct  4 12:48 jarchive
  765. drwxrwxr-x   2 vera     sql          512 Sep 30 07:41 jrnls
  766. drwxrwxr-x   5 vera     sql          512 Sep 30 07:41 repository
  767. drwxrwxr-x   2 vera     sql          512 Sep 30 07:41 segs
  768. gsql@{kml@}/home/gsql/gss/sqlser(45): gsqls >&log &
  769. @end example
  770. In the example above we are starting server in the directory
  771. where we created it. It was not created to support debugging so
  772. we don't worry about the input stream. Both output streams are
  773. redirected to log. Server output now produces a lot of 'for any case'
  774. information which we prefer not to turn off in the test release.
  775. TO BE FILLED LATER
  776. @node Client, Bugs , Server, Top
  777. @center Compiling and running DB applications
  778. To create any database application you need to write a C program containing
  779. either embedded SQL operators or runtime system calls supporting dynamic SQL.
  780. Both cases require processing your program by the SQL compiler. The Compiler connects
  781. the SQL server, sends SQL code there and produces pure C code with runtime
  782. library calls substitution as well as identification of SQL compiled code
  783. stored in the database. @footnote{Currently the server doesn't check dependencies
  784. for compiled code; this; this will be done in the future.}
  785.  gsqlc [options] files...
  786.  Option @cite{-hHOSTNAME} gives the name of the host where the database
  787. server resides. This option overrides the value of the environment
  788. variable @emph{GSSHOST}. If both of them are omitted the local host
  789. is supposed to run the DB server.
  790.  Option @cite{-rMODE} gives the mode of file processing. The possible values
  791. of @cite{MODE} are: @emph{C},@emph{SQL},@emph{MODULE}, @emph{SCHEMA}.
  792. If this option is omitted the compiler interprets extension  @emph{.ec} as
  793. a C program with embedded SQL, and @emph{.sql} as pure SQL code -
  794. either schema or module definition.
  795.  Options @cite{-dPASSES_IDS} asks the compiler to produce compiler tree
  796. dumps after given passes of compilation. PASSES_IDS is a set if characters
  797. representing each pass. Pass identification can be found in the file
  798. @emph{src/include/options.def} in the distribution directory.
  799. To link your program you should tell the linker to use the runtime
  800. library (either @emph{sqlser/client/*.a} or @emph{'-lgss'}).
  801. If you configured the package to use a debugger, the running application program will
  802. ask you if you want to start the debugger for the starting transaction process. You
  803. can override this request by setting the @emph{NEEDGDB} environment variable to
  804. "n".
  805. Too see examples of using SQL in a program see the examples in the distribution
  806. @emph{test} subdirectory.
  807. @node Bugs, Key Index, Client, Top
  808. @section Reporting Bugs
  809. @cindex bugs
  810.   At sometimes you may encounter a bug in the SQL Server.  Although we cannot
  811. promise we can or will fix the bug, and we might not even agree that it
  812. is a bug, we want to do hear about any problems you encounter.  Often we agree
  813. they are bugs and we want to fix them.
  814.   To make it possible for us to fix a bug, you must report it.  In order
  815. to do so effectively, you must know when and how to do it.
  816. @menu
  817. * Criteria:  Bug Criteria.  Have you really found a bug?
  818. * Understanding Bug Reporting::  How to report a bug effectively.
  819. * Checklist::  Steps to follow for a good bug report.
  820. * Sending Patches::  How to send a patch for GNU SQL Server.
  821. @end menu
  822. @node Bug Criteria
  823. @subsection When Is There a Bug
  824.   If the SQL Server or client runtime library executes an illegal instruction,
  825. or dies with an operating system error message that indicates a problem
  826. in the program (as opposed to something like ``disk full''), then it is
  827. certainly a bug.
  828.   If the client programs reports: "service crash" then it is certainly a bug.
  829.   If a database stores the wrong data or can't find yours, that is a bug.  But be
  830. sure you know for certain what it ought to be. If you aren't familiar
  831. with SQL or don't know for certain how the statement is supposed to work,
  832. then it might actually be working right.  Rather than jump to conclusions,
  833. show the problem to someone who knows for certain.
  834.   If after a careful rereading of the manual you still do not understand
  835. how to do some typical job, that indicates a bug in the manual, which
  836. you should report.  The manual's job is to make everything clear to
  837. people who are not SQL experts---including you.  It is just as
  838. important to report documentation bugs as program bugs. 
  839. ( We aer in the very beginning of the manual and your notes will be very
  840.   helpfull -- at least we will understand what should we describe and
  841.   what is obvious for everybody. /kml )
  842. @node Understanding Bug Reporting
  843. @subsection Understanding Bug Reporting
  844. @findex GSS-version
  845.   When you decide that there is a bug, it is important to report it and to
  846. report it in a way which is useful.  What is most useful is an exact
  847. description of what SQL statements you executed and what kind and amount
  848. of data your database had stored when you started a transaction. Information
  849. about concurrent transactions can be extremely helpful.
  850.   The most important principle in reporting a bug is to report @emph{facts},
  851. not hypotheses or categorizations.  It is always easier to report the 
  852. facts, but people prefer to strain to speculate  explanations of their own
  853. and report their speculations instead.  If the explanations are based 
  854. on guesses about how GSS is implemented, they will be useless; we will 
  855. have to try to figure out what the facts must have been to lead to such 
  856. speculations. Sometimes this is impossible.  But in any case, it is 
  857. unnecessary work for us to do when we could be doing something constructive.
  858. @node Checklist
  859. @subsection Checklist for Bug Reports
  860. @cindex reporting bugs
  861.   The best way to send a bug report is to mail it electronically to the
  862. GNU SQL Server maintainers at @samp{bug-gnu-sql@@prep.ai.mit.edu}.  (If you
  863. want to suggest a change as an improvement, use @samp{gss@@ispras.ru}.)
  864.   If you'd like to read the bug reports, you can find them on the
  865. newsgroup @samp{it has not created yet} or subscribe for bug report mail list.
  866. ( see @samp{http://www.ispras.ru/~gsql} for details; keep in mind, however, 
  867. that as a spectator you should not criticize anything about what you see there.
  868. The purpose of bug reports is to give information to the SQL server
  869. maintainers.  Spectators are welcome only as long as they do not
  870. interfere with this.  In particular, some bug reports contain large
  871. amounts of data; spectators should not complain about this.
  872.   Please do not post bug reports using netnews; mail is more reliable
  873. than netnews about reporting your correct address, which we may need in
  874. order to ask you for more information.
  875.   If you can't send electronic mail, then mail the bug report on paper
  876. or machine-readable media to this address:
  877. @format
  878. GNU SQL Server Bugs
  879. Free Software Foundation
  880. 59 Temple Place, Suite 330
  881. Boston, MA 02111-1307 USA
  882. @end format
  883.   We do not promise to fix the bug; but if the bug is serious,
  884. or ugly, or easy to fix, chances are we will want to.
  885.   To enable maintainers to investigate a bug, your report
  886. should include all these things:
  887. @itemize @bullet
  888. @item
  889. The version number of the SQL server.  Without this, we won't know
  890. whether there is any point in looking for the bug in the current version
  891. of the GNU SQL server.
  892. You can get the version number from the server log. At start time it
  893. reports that "GNU SQL server (version xxxxx) ". 
  894. @item
  895. The type of machine you are using, and the operating system name and
  896. version number.
  897. @item
  898. The operands given to the @code{configure} command when the SQL Server was
  899. installed.
  900. @item
  901. A complete list of any modifications you have made to the GSS source.
  902. (We may not have time to investigate the bug unless it happens in an
  903. unmodified SQL Server.  But if you've made modifications and you don't
  904. tell us, you are sending us on a wild goose chase.)
  905. Be precise about these changes.  A description in English is not
  906. enough---send a context diff for them.
  907. Adding files of your own, or porting to another machine, is a
  908. modification of the source.
  909. @item
  910. Details of any other deviations from the standard procedure for installing
  911. the GNU SQL Server.
  912. @item
  913. The complete text of any files needed to reproduce the bug.
  914. @item
  915. The precise log of client program and server output. If would be a good
  916. idea if you comment them by timestamp or syncronization marks.
  917. @item
  918. A description of what behavior you observe that you believe is
  919. incorrect.
  920. Even if the problem you experience is a fatal signal, you should still
  921. say it explicitly.  Suppose something strange is going on, such as, your
  922. copy of the source is out of sync, or you have encountered a bug in the
  923. C library on your system.  (This has happened!)  Your copy might crash
  924. and the copy here might not.  If you @emph{said} to expect a crash, then
  925. when GSS here fails to crash, we would know that the bug was not
  926. happening.  If you don't say to expect a crash, then we would not know
  927. whether the bug was happening---we would not be able to draw any
  928. conclusion from our observations.
  929. @item
  930. If the manifestation of the bug is an SQL Server error message, it is
  931. important to report the precise text of the error message.
  932. This use of the debugger is possible only if you know how to make the
  933. bug happen again.  If you can't make it happen again, at least copy
  934. the whole error message.
  935. @end itemize
  936. Here are some things that are not necessary in a bug report:
  937. @itemize @bullet
  938. @item
  939. A system call trace of SQL server or client execution.
  940. System call traces are very useful for certain special kinds of
  941. debugging, but in most cases they give little useful information.  It is
  942. therefore strange that many people seem to think that @emph{the} way to
  943. report information about a crash is to send a system call trace.
  944. In most programs, a backtrace is normally far, far more informative than
  945. a system call trace.  Even in the SQL server, a simple backtrace is
  946. generally more informative.
  947. @item
  948. A patch for the bug.
  949. A patch for the bug is useful if it is a good one.  But don't omit the
  950. other information that a bug report needs, such as the test case, on the
  951. assumption that a patch is sufficient.  We might see problems with your
  952. patch and decide to fix the problem another way, or we might not
  953. understand it at all.  And if we can't understand what bug you are
  954. trying to fix, or why your patch should be an improvement, we will not
  955. install it.
  956. @ifinfo
  957. @xref{Sending Patches}, for guidelines on how to make it easy for us to
  958. understand and install your patches.
  959. @end ifinfo
  960. @item
  961. A guess about what the bug is or what it depends on.
  962. Such guesses are usually wrong.  Even experts can't guess right about
  963. such things without first using the debugger to find the facts.
  964. @end itemize
  965. @node Sending Patches
  966. @subsection Sending Patches for the GNU SQL Server
  967. @cindex sending patches for the GNU SQL Server
  968. @cindex patches, sending
  969.   If you would like to write bug fixes or improvements for GNU SQL Server,
  970. that is very helpful.  When you send your changes, please follow these
  971. guidelines to make it easy for the maintainers to use them.  If you
  972. don't follow these guidelines, your information might still be useful,
  973. but using it will take extra work.  Maintaining the GNU SQL Server is a
  974. lot of work in the best of circumstances, and we can't keep up unless
  975. you do your best to help.
  976. @itemize @bullet
  977. @item
  978. Send an explanation with your changes of what problem they fix or what
  979. improvement they bring about.  For a bug fix, just include a copy of the
  980. bug report, and explain why the change fixes the bug.
  981. (Referring to a bug report is not as good as including it, because then
  982. we will have to look it up, and we have probably already deleted it if
  983. we've already fixed the bug.)
  984. @item
  985. Always include a proper bug report for the problem you think you have
  986. fixed.  We need to convince ourselves that the change is right before
  987. installing it.  Even if it is correct, we might have trouble
  988. understanding it if we don't have a way to reproduce the problem.
  989. @item
  990. Include all the comments that are appropriate to help people reading the
  991. source in the future understand why this change was needed.
  992. @item
  993. Don't mix together changes made for different reasons.
  994. Send them @emph{individually}.
  995. If you make two changes for separate reasons, then we might not want to
  996. install them both.  We might want to install just one.  If you send them
  997. all jumbled together in a single set of diffs, we have to do extra work
  998. to disentangle them---to figure out which parts of the change serve
  999. which purpose.  If we don't have time for this, we might have to ignore
  1000. your changes entirely.
  1001. If you send each change as soon as you have written it, with its own
  1002. explanation, then two changes never get tangled up, and we can consider
  1003. each one properly without any extra work to disentangle them.
  1004. @item
  1005. Send each change as soon as that change is finished.  Sometimes people
  1006. think they are helping us by accumulating many changes to send them all
  1007. together.  As explained above, this is absolutely the worst thing you
  1008. could do.
  1009. Since you should send each change separately, you might as well send it
  1010. right away.  That gives us the option of installing it immediately if it
  1011. is important.
  1012. @item
  1013. Use @samp{diff -c} to make your diffs.  Diffs without context are hard
  1014. to install reliably.  More than that, they are hard to study; we must
  1015. always study a patch to decide whether we want to install it.  Unidiff
  1016. format is better than contextless diffs, but not as easy to read as
  1017. @samp{-c} format.
  1018. If you have GNU diff, use @samp{diff -c -F'^[_a-zA-Z0-9$]+ *('} when
  1019. making diffs of C code.  This shows the name of the function that each
  1020. change occurs in.
  1021. @item
  1022. Write the change log entries for your changes.  This is both to save us
  1023. the extra work of writing them, and to help explain your changes so we
  1024. can understand them.
  1025. The purpose of the change log is to show people where to find what was
  1026. changed.  So you need to be specific about what functions you changed;
  1027. in large functions, it's often helpful to indicate where within the
  1028. function the change was.
  1029. On the other hand, once you have shown people where to find the change,
  1030. you need not explain its purpose in the change log.  Thus, if you add a
  1031. new function, all you need to say about it is that it is new.  If you
  1032. feel that the purpose needs explaining, it probably does---but put the
  1033. explanation in comments in the code.  It will be more useful there.
  1034. Please read the @file{ChangeLog} files in the @file{top}
  1035. directory to see what kinds of information to put in, and to learn the
  1036. style that we use.  If you would like your name to appear in the header
  1037. line, showing who made the change, send us the header line.
  1038. @item
  1039. When you write the fix, keep in mind that we can't install a change that
  1040. would break other systems.  Please think about what effect your change
  1041. will have if compiled on another type of system.
  1042. Sometimes people send fixes that @emph{might} be an improvement in
  1043. general---but it is hard to be sure of this.  It's hard to install
  1044. such changes because we have to study them very carefully.  Of course,
  1045. a good explanation of the reasoning by which you concluded the change
  1046. was correct can help convince us.
  1047. The safest changes are changes to the configuration files for a
  1048. particular machine.  These are safe because they can't create new bugs
  1049. on other machines.
  1050. Please help us keep up with the workload by designing the patch in a
  1051. form that is clearly safe to install.
  1052. @end itemize
  1053. @include gnu.texi
  1054. @ifinfo
  1055. @include ask.texi
  1056. @end ifinfo
  1057. @node Key Index, Command Index, Bugs , Top
  1058. @unnumbered Key (Character) Index
  1059. @printindex ky
  1060. @node Command Index, Variable Index, Key Index, Top
  1061. @unnumbered Command and Function Index
  1062. @printindex fn
  1063. @node Variable Index, Concept Index, Command Index, Top
  1064. @unnumbered Variable Index
  1065. @printindex vr
  1066. @node Concept Index, , Variable Index, Top
  1067. @unnumbered Concept Index
  1068. @printindex cp
  1069. @summarycontents
  1070. @contents
  1071. @bye