<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Rivet 2.0: Release Notes and Known Problems</title>
    <link rel="stylesheet" href="../templates/wondrous/styles.css" type="text/css" />
</head>

<body>
    <div id="container">
        <div id="header">
            <h1><a href="../index.html">Rivet</a></h1>
            <h2 id="slogan">Webscripting for Tcl'ers</h2>
            <div class="clear"></div>
        </div>
        <div id="body">
            <div id="content">
                <h2>Rivet 2.0: Release Notes and Known Problems</h2>
                <div>
    <div class="sez">
        <h4>Download</h4>
        <p>
			Rivet 2.0 is available for download from ASF mirror sites. Check the 
			<a href="download.html">download page</a>

 for information about 
			downloading the source code, rpm files or packages for SuSE, 
			Redhat, Debian and Ubuntu (packages for SuSE and Redhat are available thanks to 
			Harald Oehlmann).
		                        </p>
        <p>
			Code integrity for this release can be checked using the 
			public keys in the <a href="http://www.apache.org/dist/tcl/KEYS">KEYS</a>

 file.
		                        </p>
        <p>
			Rivet 2.0 has been tested on Apache 1.3 , 2.2 and 2.4 servers.
			<strong>Apache 2.2/2.4 servers must be running 
			<tt>prefork</tt>

 as multiprocess module                            </strong>

 though. Rivet is incompatible with the 
			'worker' and 'event' MPMs.
		                        </p>
    </div>
    <div class="sez">
        <h4>Release Notes for Rivet 2.0.6 <span class="timestamp">(30-Nov-2012)</span>
        </h4>
        <h5>Fixed Bugs</h5>
        <p>
			Test Suite 
			<ul>
                <li>
				User and Group directives removed from the configuration file
				template to make test suite independent from the command 'id' output from which 
				the values for this parameters were inferred (Bug #53396)
			    </li>
            </ul>
        </p>
        <p>
						mod_rivet.c
						<ul>
                <li>Add UploadDirectory to the list of handled options for RivetUserConf</li>
                <li>The module returns now a HTTP_INTERNAL_SERVER_ERROR when a <b>::request</b>


		    				namespace cannot be created                                    </li>
            </ul>
        </p>
        <p> 
						DIO Package bug fixes
						<ul>
                <li>
								Improved DIO support for Sqlite fixes several bugs.
							</li>
                <li>
								Fixed secs computation made by dio_Mysql when handling timestamp fields.
							</li>
                <li>
								Fixed wrong declaration of 'insert' subcommand in page manual (Bug #53670)
							</li>
                <li>
								Fixed method makeDBFieldValue in class Oracle (Bug #53703)
							</li>
                <li>
								Method 'count' failed when no keyfield was set.
							</li>
                <li>
								Index riv_sess_cache_ix had a incomplete unique key definition that missed the 
								'package_' column (fixes bug #54063)
							</li>
            </ul>
        </p>
    </div>
    <div class="sez">
        <h4>Release Notes for Rivet 2.0.5 <span class="timestamp">(26-Jun-2012)</span>
        </h4>
        <h5>Fixed Bugs</h5>
        <ul>
            <li>	
					    DIO: Mysql connection is now checked when connection reference is reused 
					    because it could have dropped (contributed by Cyril Shtumf, fixes #53221)
					</li>
            <li>
					    Fixed SQL syntax generated in delete method when multiple fields are
					    used in the selection clause (contributed by Cyril Shtumf, fixes bug #53222)
					</li>
        </ul>
        <h5>New Features</h5>
        <ul>
            <li>
					    New shorthand expression <pre class="programlisting">&lt;?= ... ?&gt;</pre>

 is
					    transformed into <pre class="programlisting">&lt;? puts -nonewline "..." ?&gt;</pre>


					    (contributed by Jeff Lawson, addresses #53217)
					                            </li>
            <li>
					    http_accept.tcl: new command parsing of Accept HTTP header lines (contributed by 
					    Harald Oehlmann)
					</li>
            <li>
					    rivet/packages/entities/entities.tcl: package RivetEntities
					    (contributed by Harald Oehlmann)
					</li>
            <li>
					    tclconfig/ltmain.sh: updated from recent autotools installation
					</li>
            <li>
					    Support for HttpOnly flag improves security and reduces the risk of
					    cross-site scripting attacks (contributed by Cyril Shtumf, fixes #53224)
					</li>
            <li>
                <b>form</b>

 class objects create now automatic field ids if left undefined
					    by the programmer 
					                            </li>
        </ul>
        <h5>Manual Pages Expanded</h5>
        <ul>
            <li>New pages for package <b>entities</b>

 and for command <b>http_accept</b>
            </li>
            <li>Improved manual entry for 'var list' (Fixes bug #52911)</li>
        </ul>
    </div>
    <div class="sez">
        <h4>Release Notes for Rivet 2.0.4 <span class="timestamp">(23-Sep-2011)</span>
        </h4>
        <h5>Bugs fixed</h5>
        <p>
						An Tcl error in an AbortScript would trigger a message that
						erroneously printed that an ErrorScript was running.
					</p>
        <h5>Manual Pages Expanded</h5>
        <p>
						Manual pages have been expanded to include documentation for more
						commands implemented but not yet documented. Section documenting 
						single commands has been reorganized to list commands in alphabetical
						order.
					</p>
        <h5>New Features</h5>
        <p>
						Commands <strong>load_env</strong>

 and <strong>load_headers</strong>


						accept an array name as argument. If not fully qualified the array
						was created in either the <tt>::request</tt>

 namespace (.rvt templates)
						or the global namespace (.tcl scripts). Starting with 2.0.4 
						these commands, when invoked from within a procedure, create
						the array in the proc's local scope, unless the argument is a
						fully qualifed name scoping the array in a user defined namespace.
					                    </p>
        <p>
						Command <strong>makeurl</strong>

 has been extended to be used in three forms
						<ul>
                <li>without argument
								<pre class="programlisting">makeurl
==&gt; Current script's url</pre>
                </li>
                <li>with an absolute path
								<pre class="programlisting">makeurl /a/b/c
==&gt; http://&lt;host&gt;:&lt;port&gt;/a/b/c</pre>
                </li>
                <li>with a relative path
								<pre class="programlisting">makeurl a/b/c
==&gt; http://&lt;host&gt;:&lt;port&gt;/&lt;current script&gt;/a/b/c</pre>
                </li>
            </ul>
        </p>
    </div>
    <div class="sez">
        <h4>Release Notes for Rivet 2.0.3 <span class="timestamp">(19-Mar-2011)</span>
        </h4>
        <h5>New Features</h5>
        <p>
				        Rivet 2.0.3 introduces 2 new configuration directives
				        <ul>
                <li>
				                New configuration directive <strong>AbortScript</strong>

: 
				                Tcl script to be run if an <b>abort_page</b>

 is called 
				                in a request processing
				                                                </li>
                <li>
						New configuration directive 
				                <strong>AfterEveryScript</strong>

: An <b>abort_page</b>

 command stops the
				                page generation and skips also a configured <strong>AfterScript</strong>

 to
						run an <strong>AbortScript</strong>

. This new configuration script is to 
						be run anyway, as last script of a single request processing, 
						whether an abort condition took place during the page
						generation or the procedure completed successfully.
				                                                </li>
                <li>
				                Enhanced form for <strong>abort_page</strong>

: page generation can
				                be interrupted by calling <strong>abort_page</strong>

. The new command 
				                accepts now an argument whose value can be checked to determine which
				                condition forced to call the page generation off.
				                                                </li>
                <li>
				                New command <strong>abort_code</strong>

 returns the value of the
				                argument passed to <strong>abort_page</strong>

. Useful in <b>AbortScript</b>


				                or <b>AfterEveryScript</b>

 code.
				                                                </li>
            </ul>
        </p>
        <h5>Problems fixed</h5>
        <p>
				        Code for command <strong>apache_table</strong>

 was ported to Rivet for Apache 1.3
				                        </p>
    </div>
    <div class="sez">
        <h4>Release Notes for Rivet 2.0.2 <span class="timestamp">(25-Oct-2010)</span>
        </h4>
        <p>
					   Rivet 2.0.2 is a maintainance release with the main purpose to adjust the 
					   build process in a way that makes straightforward the generation of a Debian package.
				    </p>
        <p>
					   Rivet (named 
					   <a href="http://packages.qa.debian.org/liba/libapache2-mod-rivet.html">libapache2-mod-rivet</a>

 
					   to follow the Debian Apache policy) is now in Debian.
					   The package is sponsored by Sven Hoexter (Debian Developer). 
				                        </p>
    </div>
    <div class="sez">
        <h4>Relase Notes for Rivet 2.0.1 <span class="timestamp">(12-Jul-2010)</span>
        </h4>
        <h5>Fixed Bugs in Rivet 2.0.1</h5>
        <ul>
            <li>
						Several error messages printed during the installation phase have been
						fixed. The problems were harmless, but nonetheless annoying.
					    </li>
            <li>
						Fixed bug in installation of the rivetparser library.
					    </li>
            <li>
						Fixed tables creation for Postgres backend. The SQL script that 
						creates the rivet_session_cache table misnamed 2 columns.
						<b>Current DIO Postgres backend breaks Session package if the database
						was created with an old Rivet version</b>

. To fix the problem one has to
						rename the 'key' and 'package' columns as 'key_' and 'package_'
<pre class="programlisting">ALTER TABLE rivet_session_cache RENAME COLUMN key to key_
ALTER TABLE rivet_session_cache RENAME COLUMN package to package_</pre>
            </li>
            <li>
						Fixed dio_Postgres.tcl method. A mistyped variable caused at least method 
						'store' to fail.	
					    </li>
        </ul>
        <h5>New Features</h5>
        <ul>
            <li>
                <p>
                                A new package <b>Calendar</b>

 has been added. Calendar provides 3 Itcl classes that 
                                print Calendar tables in ASCII, XML and XHTML forms (see examples and related 
                                manual page).
                                                                </p>
                <p>
                    <em>
                        <b>Calendar</b>

 requires Tcl8.5 or Tcl8.4 with package 'dict'                                            </em>
                </p>
            </li>
            <li>
                            New page for package 'form' added to the manual							
                        </li>
        </ul>
    </div>
    <div class="sez">
        <h4>Installation Issues</h4>
        <p>
					    Rivet is widely configurable to select custom directories where the module and
					    its associated libraries have to reside.
			    </p>
        <ul>
            <li>
				    Even though you can install Rivet to run pure Tcl scripts, some associated packages
				    (namely 'Session' and 'DIO') are written in Itcl, an OO extension of the base 
				    language.In order to safely run those package, you have to check yourself if 
				    the Itcl extension installed on your system is compatible with the Tcl version
				    for which you're building Rivet.
				</li>
        </ul>
    </div>
    <div class="sez">
        <h4>Known Problems</h4>
        <ul>
            <li>
						    Rivet is reported to conflict with cgi scripts on some Linux machines.
						    Symptom of the problem is when cgi scripts hang forever and don't send 
						    any content to the client
					    </li>
        </ul>
    </div>
</div>



                <div class="contentbottom">
                    
                </div>
            </div>

            <div class="sidebar">
                <ul>
                    <li id="news">
    <h4>News</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a href="rn%2d2%2d3.html">11 Nov 2017: Rivet 2.3.5 released</a>
        </li>
        <li class="navitem">
            <a href="rn%2d3%2d0.html">7 Jul 2018: Rivet 3.0.2 released</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                    <li id="home">
    <h4>Rivet</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="A home for Rivet" href="../index.html">Rivet Homepage</a>
        </li>
        <li class="navitem">
            <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
        </li>
        <li class="navitem">
            <a title="Getting Rivet" href="download.html">Getting Rivet</a>
        </li>
        <li class="navitem">
            <a title="Hello World!" href="hello%5fworld.html">Examples</a>
        </li>
        <li class="navitem">
            <a title="The Rivet development team" href="about.html">About Us - Contact</a>
        </li>
    </ul>
</li>
<li id="manual">
    <h4>Documentation</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="Rivet 2.1 Manual" target="rivetman2.1" href="http://tcl.apache.org/rivet/manual2.1/">Rivet 2.1</a>
        </li>
        <li class="navitem">
            <a title="Rivet 2.2 Manual" target="rivetman2.2" href="http://tcl.apache.org/rivet/manual2.2/">Rivet 2.2</a>
        </li>
        <li class="navitem">
            <a title="Rivet 2.3 Manual" target="rivetman2.3" href="http://tcl.apache.org/rivet/manual2.3/">Rivet 2.3</a>
        </li>
        <li class="navitem">
            <a title="Rivet 3.0 Manual" target="rivetman3.0" href="http://tcl.apache.org/rivet/manual3.0/">Rivet 3.0</a>
        </li>
    </ul>
</li>
<li id="rn">
    <h4>Release Notes</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a href="rn%2d2%2d0.html">v2.0</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d1.html">v2.1</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d2.html">v2.2</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d3.html">v2.3</a>
        </li>
        <li class="navitem">
            <a href="rn%2d3%2d0.html">v3.0</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                     
                </ul> 
            </div>
            <div class="clear"></div>
        </div>
    </div>
    <div id="footer">
        <div class="footer-content">
            <p><a href="http://www.apache.org/">Apache Software Foundation</a> | Design by <a href="http://www.spyka.net">Free CSS Templates</a> | <a href="http://www.justfreetemplates.com">Free Web Templates</a></p>
        </div>
    </div>
    <div style="text-align: center; font-size: 0.75em;">Design downloaded from <a href="http://www.freewebtemplates.com/">free website templates</a>.</div></body>
</html>

