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

SQL Server

开发平台:

Unix_Linux

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