/[webpac]/openisis/current/org/openisis/Db.java
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /openisis/current/org/openisis/Db.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 237 - (hide annotations)
Mon Mar 8 17:43:12 2004 UTC (20 years, 2 months ago) by dpavlin
File size: 7935 byte(s)
initial import of openisis 0.9.0 vendor drop

1 dpavlin 237 /*
2     openisis - an open implementation of the CDS/ISIS database
3     Version 0.8.x (patchlevel see file Version)
4     Copyright (C) 2001-2003 by Erik Grziwotz, erik@openisis.org
5    
6     This library is free software; you can redistribute it and/or
7     modify it under the terms of the GNU Lesser General Public
8     License as published by the Free Software Foundation; either
9     version 2.1 of the License, or (at your option) any later version.
10    
11     This library is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14     Lesser General Public License for more details.
15    
16     You should have received a copy of the GNU Lesser General Public
17     License along with this library; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19    
20     see README for more information
21     EOH */
22    
23    
24     package org.openisis;
25    
26     import java.io.IOException;
27     import java.util.Iterator;
28     import java.util.Map;
29     import java.util.HashMap;
30    
31    
32     /**
33     This class represents an isis db.
34     The actual implementation is done in derived classes.
35     <p>
36     $Id: Db.java,v 1.6 2003/04/08 00:20:53 kripke Exp $
37     @version $Revision: 1.6 $
38     @author $Author: kripke $
39     */
40     public abstract class Db {
41    
42     /** the default encoding.
43     * the constant String value is "ISO-8859-1".
44     */
45     public static final String DEFAULT_ENCODING = "ISO-8859-1";
46    
47     /* standard empty String returned by several methods */
48     public static final String EMPTY = "";
49    
50     /** index scan key equal */
51     public static final int QRY_KEYEQ = 0;
52     /** index scan key prefix */
53     public static final int QRY_KEYPF = 1;
54     public static final int PREFIX = QRY_KEYPF; // legacy alias
55     /** index scan key auto (checks for '$') */
56     public static final int QRY_KEYAT = 2;
57     /** fulltext scan for equal */
58     public static final int QRY_SCANE = 64;
59     /** fulltext scan for contains */
60     public static final int QRY_SCANC = 65;
61     /** query expression with simple left-to-right binding */
62     public static final int QRY_SIMPLE = 128;
63     /** query expression with proper binding using precedence, () */
64     public static final int QRY_PROPER = 129;
65    
66     /** field v: heading mode */
67     public static final int MHL = 0x10000;
68     /** field v: data flag (no effect w/o heading) */
69     public static final int MD = 0x20000;
70     /** field v: data mode (includes heading flag) */
71     public static final int MDL = 0x30000;
72     /** field v: uppercase mode flag */
73     public static final int MXU = 0x40000;
74     /** field v: uppercase heading mode */
75     public static final int MHU = 0x50000;
76     /** field v: uppercase data mode */
77     public static final int MDU = 0x70000;
78     /** field v: index formatting flag */
79     public static final int MI = 0x80000;
80    
81     /** field v: 16bit UNICODE HTML. HTML-entities are escaped. */
82     public static final int HTU = 0x100000;
83     /** field v: 8bit ISO-8859-1 HTML.
84     HTML-entities and all chars greater than 255 are escaped.
85     */
86     public static final int HTI = 0x300000;
87     /** field v: 7bit ASCII HTML.
88     HTML-entities and all chars greater than 127 are escaped.
89     */
90     public static final int HTA = 0x700000;
91    
92     /** rec v: repeated prefix plus operator (not on 1st occ) */
93     public static final int PP = 0x2000000;
94     /** rec v: repeated suffix plus operator (not on last occ) */
95     public static final int PS = 0x1000000;
96     /** rec v: dummy presence selector Dn */
97     public static final int DS = 0x4000000;
98     /** rec v: dummy absence selector Nn */
99     public static final int NS = 0x8000000;
100    
101     /** rec v: occurence range up to last occ */
102     public static final int LOCC = 0xffff << 16;
103    
104     static final Map _dbs = new HashMap();
105    
106    
107     /** open an isis database.
108     The following options are supported as text-style parameters:
109     <ul>
110     <li>-db &lt;name&gt;<br>
111     basename of database. same as param dbname.
112     </li>
113     <li>-dbpath &lt;path&gt;<br>
114     path to database. usefull when opening secondary indexes
115     or other files whose names are not based on the db basename.
116     </li>
117     <li>-v &lt;level&gt;<br>
118     set verbosity level
119     </li>
120     <li>-encoding &lt;enc&gt;<br>
121     select encoding used in db bytes. default is DEFAULT_ENCODING.
122     </li>
123     <li>-puredb<br>
124     select pure java implementation.
125     by default the NativeDb is used.
126     </li>
127     </ul>
128     @param dbname basename of database.
129     the dbhome arg, if given, will be prepended, and the ISIS file
130     extensions appended to build the actual filename.
131     Therefore, depending on the value of dbhome and location
132     of files, this may need to include a path.
133     db may be <code>null</code>, if argv includes a dbname arg.
134     @param argv array of names and values.
135     May be <code>null</code>.
136     argv contains parameter names, which may be prefixed
137     by a dash '-'. Depending on the actual parameter, the next
138     string may or must contain a corresponding parameter value.
139     An optional parameter value may be omitted, if at end of
140     argv or the next name is prefixed with a dash.
141     To avoid ambiguity, values never start with a dash.
142     See above for a list of supported parameter names.
143     Unrecognized parameter names are ignored.
144     @return a new Db (unless some RuntimeException is thrown)
145     @throws IoException especially FileNotFoundExceptiond
146     and UnsupportedEncodingException
147     */
148     public static synchronized Db open ( String dbname, String[] args )
149     throws IOException
150     {
151     String enc = DEFAULT_ENCODING;
152     boolean usePureDb = false;
153     Db db = (Db) _dbs.get( dbname );
154     if ( null != db )
155     return db;
156     if ( null != args )
157     for ( int i=0; i<args.length; i++ )
158     if ( "-encoding".equals( args[i] ) && i < args.length-1 ) {
159     // if this Encoding gives UnsupportedEncodingException,
160     // let it go off now
161     byte b[] = new byte[1];
162     b[0] = (byte)'A';
163     new String( b, args[i+1] );
164     enc = args[i+1];
165     } else if ( "-puredb".equals( args[i] ) ) {
166     // usePureDb = true;
167     System.err.println( "sorry, -puredb not yet implemented" );
168     }
169     db = // usePureDb ? (Db) new PureDb( enc, dbname, args ) : (Db)
170     new NativeDb( enc, dbname, args );
171     // System.err.println( "Db.open('"+dbname+"'): "+db );
172     _dbs.put( dbname, db );
173     return db;
174     } // open
175    
176    
177     public static int[] AND ( int[] set, int[] nset ) {
178     int[] aset = new int[ // minimum
179     set.length < nset.length ? set.length : nset.length ];
180     int a=0, s=0, n=0;
181     while ( a<aset.length && s<set.length && n<nset.length ) {
182     if ( set[s] == nset[n] ) {
183     aset[a++] = set[s++];
184     n++;
185     } else if ( set[s] < nset[n] )
186     s++;
187     else
188     n++;
189     }
190     set = new int[a];
191     System.arraycopy( aset, 0, set, 0, set.length );
192     return set;
193     } // AND
194    
195    
196     //
197     // so far for the statics
198     //
199    
200     /** encoding used for records in this db.
201     * NOTE that String args are not converted according to this encoding,
202     * but rather are passed as Java UTF-8, so you better stick to 7 bits.
203     */
204     public final String encoding;
205    
206     protected Db ( String enc ) {
207     encoding = enc;
208     }
209    
210    
211     /**
212     read a cooked row.
213     @param rowid the mfn
214     @return a Rec or null, if row not available.
215     */
216     public abstract Rec readRow ( int rowid );
217    
218     /**
219     write a cooked row.
220     @param row the Rec to be written
221     @return 0 if write succeeded, else a negative error code
222     */
223     public abstract short writeRow ( Rec rec );
224    
225     /**
226     write a cooked row together with index information.
227     @param row the Rec to be written
228     @return 0 on success else a negative error code
229     */
230     public abstract short writeXRow ( Rec rec, Rec idx );
231    
232     /**
233     read the first row with rowid &gt;= given rowid
234     and containing txt in subfield tag (any, if 0).
235     @param rowid the mfn
236     @return a Rec or null, if row not available.
237     */
238     public abstract Rec scanRow ( int rowid, int tag, String txt );
239    
240     /**
241     read the array of rowids matching key.
242     @param key key to look for
243     @param mode one of the QRY_ constants above.
244     may be ored with a tag&lt;&lt;16 to limit search to that field
245     */
246     public abstract int[] search ( String key, int mode );
247    
248     public abstract Iterator terms ( String prefix );
249    
250     } // Db

  ViewVC Help
Powered by ViewVC 1.1.26