亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fastdb.htm

?? 俄羅斯牛人KK的作品,著名的ORDBMS,這里上傳最新的3.39版本源代碼.希望了解對象關系數據庫的同好,請不要錯過.
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
types.<P> 


<H3><A NAME = "structure">Structures</A></H3>

FastDB accepts structures as components of records. Fields of the structure
can be accessed using the standard dot notation: <code>company.address.city</code>
<P>

Structure fields can be indexed and used in an <code>order by</code> 
specification. Structures can contain other structures as their components;
there are no limitations on the nesting level.<P>

The programmer can define methods for structures, which can be used
in queries with the same syntax as normal structure components. 
Such a method should have no arguments except a pointer to the object to which
it belongs (the <code>this</code> pointer in C++), and should return
an atomic value (of boolean, numeric, string or reference type).
Also the method should not change the object instance (immutable method).
If the method returns a string, this string should be allocated using the
<code>new char</code> operator, because it will be deleted after copying of 
its value.<P>

So user-defined methods can be used for 
the creation of <I>virtual</I> components - 
components which are not stored in the database, 
but instead are calculated
using values of other components. 
For example, the FastDB <code>dbDateTime</code>
type contains only integer timestamp components and such methods
as <code>dbDateTime::year()</code>, <code>dbDateTime::month()</code>...
So it is possible to specify queries like: "<code>delivery.year = 1999</code>"
in an application, where the <code>delivery</code> record field has 
<code>dbDateTime</code> type. Methods are executed in the context of the
application, where they are defined, and are not available to other 
applications and interactive SQL.<P>

<H3><A NAME = "array">Arrays</A></H3>
FastDB accepts arrays with dynamic length as components of records. 
Multidimensional arrays are not supported, but it is possible to
define an array of arrays. It is possible to sort records in the result set
by length of array field.
FastDB provides a set of special constructions for dealing with arrays:<P>

<OL>
<LI>It is possible to get the number of elements in the array by 
the <code>length()</code> function. 

<LI>Array elements can be fetched by the<code>[]</code> operator.
If an index expression is out of array range, an exception will be raised.

<LI>The operator <code>in</code> can be used to check if an array contains
a value specified by the left operand. This operation can be used only for arrays of
atomic type: with boolean, numeric, reference or string components.

<LI>Array can be updated using <code>update</code> method which creates copy of the array and returns
non-constant reference.

<LI>Iteration through array elements is performed by the <code>exists</code> 
operator. A variable specified after the <code>exists</code> keyword can be used
as an index in arrays in the expression preceeded by the <code>exists</code>
quantor. This index variable will iterate through all possible array
index values, until the value of the expression will become <code>true</code> or
the index runs out of range. The condition

<PRE>
        exists i: (contract[i].company.location = 'US')
</PRE>

will select all details which are shipped by companies 
located in 'US', while the query

<PRE>
        not exists i: (contract[i].company.location = 'US')
</PRE>

will select all details which are shipped from companies outside 'US'.<P>

Nested <code>exists</code> clauses are allowed. Using nested 
<code>exists</code>
quantors is equivalent to nested loops using the correspondent
index variables. For example the query

<PRE>
        exists column: (exists row: (matrix[column][row] = 0))
</PRE>

will select all records, containing 0 in elements of a <code>matrix</code> 
field, which has type array of array of integer.
This construction is equivalent to the following
two nested loops:

<PRE>
       bool result = false;
       for (int column = 0; column < matrix.length(); column++) { 
            for (int row = 0; row < matrix[column].length(); row++) { 
	         if (matrix[column][row] == 0) { 
                     result = true;
		     break;
                 }
            }
       }
</PRE>

The order of using indices is essential! 
The result of the following query execution
<PRE>
        <code>exists row: (exists column: (matrix[column][row] = 0))</code>
</PRE>

will be completely different from the result of the previous query.
In the last case, the program simply hangs due to an infinite loop
in case of empty matrices. 
</OL>


<H3><A NAME = "string">Strings</A></H3>

All strings in FastDB have varying length and the programmer should not
worry about specification of maximal length for character fields. 
All operations acceptable for arrays are also applicable to strings. 
In addition to them, strings have a set of own operations.
First of all, strings can be compared with each other using standard
relation operators. At present, FastDB supports only the
ASCII character set (corresponds to type <code>char</code> in C) and
byte-by-byte comparison of strings ignoring locality settings.<P>

The operator <code>like</code> can be used for 
matching a string with a pattern containing special wildcard characters
'%' and '_'. The character '_' matches any single character, 
while the character '%' matches zero or more characters.
An extended form of the <code>like</code> operator together with
the <code>escape</code> keyword can be used to handle the
characters '%' and '_' in the pattern as normal characters if 
they are preceded by a special escape character, specified after
the <code>escape</code> keyword.<P> 

If you rebuild GigaBASE with USE_REGEX macro, then you can use 
<code>match</code> operator implementing standard regular expressions
(based on GNU regex library). Second operand of this operator specified 
regular expression to be matched and should be string literal.<P>

It is possible to search substrings within a string by the <code>in</code>
operator. The expression <code>('blue' in color)</code> will be true
for all records which <code>color</code> field contains 'blue'. 
If the length of the searched string is greater than some threshold value 
(currently 512), a Boyer-Moore substring search algorithm is used instead 
of a straightforward search implementation.<P>

Strings can be concatenated by <code>+</code> or <code>||</code> operators.
The last one was added for compatibility with the ANSI SQL standard.
As far as FastDB doesn't support the implicit conversion to string type in 
expressions, the semantic of the operator <code>+</code> can be redefined for
strings.<P>


<H3><A NAME = "reference">References</A></H3>

References can be dereferenced using the same dot notation as used for
accessing structure components. For example the following query

<PRE>
        company.address.city = 'Chicago'
</PRE>

will access records referenced by the <code>company</code> component of
a <code>Contract</code> record and extract the city component of the
<code>address</code> field of the referenced record from 
the <code>Supplier</code> table.<P>

References can be checked for <code>null</code> by <code>is null</code>
or <code>is not null</code> predicates. Also references can be compared for 
equality with each other as well as with the special <code>null</code>
keyword. When a null reference is dereferenced, an exception is raised
by FastDB.<P>

There is a special keyword <code>current</code>, which
during a table search can be used to refer to the current record.
Usually , the <code>current</code>
keyword is used for comparison of the current record identifier with
other references or locating it within an array of references. 
For example, the following query will search in the <code>Contract</code> 
table for all active contracts
(assuming that the field <code>canceledContracts</code> has a
<code>dbArray&lt; dbReference&lt;Contract&gt; &gt;</code> type): 

<PRE>
        current not in supplier.canceledContracts
</PRE><P>

FastDB provides special operators for recursive traverse of records by 
references:

<PRE>
     <code>start from</code> <I>root-references</I>
     ( <code>follow by</code> <I>list-of-reference-fields</I> )
</PRE>

The first part of this construction is used to specify root objects. 
The nonterminal <I>root-references</I> should be a variable of reference or
of array of reference type. The two special keywords <code>first</code> and
<code>last</code> can be used here, locating the first/last record in the table
correspondingly. 
If you want to check all records
referenced by an array of references or a single reference field
 for some condition, then this
construction can be used without the <code>follow by</code> part.<P>

If you specify the follow by part, then FastDB will recursively traverse 
the table of records, starting from the root
references and using a 
<I>list-of-reference-fields</I> for transition between records.
The <I>list-of-reference-fields</I> should consist of fields of
reference or of array of reference type. The traverse is done in depth first
top-left-right order (first we visit the parent node and then the siblings in 
left-to-right order).
The recursion terminates when a null reference is accessed
or an already visited record is referenced. For example the following
query will search a tree of  records with weight larger than 1 in TLR order:<P>

<PRE>
        "weight > 1 start from first follow by left, right"
</PRE><P>

For the following tree:

<PRE>
                              A:1.1
              B:2.0                             C:1.5
      D:1.3         E:1.8                F:1.2         G:0.8
</PRE>

the result of the query execution will be: 

<PRE>
('A', 1.1), ('B', 2.0), ('D', 1.3), ('E', 1.8), ('C', 1.5), ('F', 1.2)
</PRE><P>



As was already mentioned FastDB always manipulates with objects and doesn't accept joins. 
Joins can be implemented using references. Consider the classical 
<code>Supplier-Shipment-Detail</code> examples:
 
<PRE>
struct Detail { 
    char const* name;
    double      weight;
    
    TYPE_DESCRIPTOR((KEY(name, INDEXED), FIELD(weight)));
};

struct Supplier { 
    char const* company;
    char const* address;

    TYPE_DESCRIPTOR((KEY(company, INDEXED), FIELD(address)));
};

struct Shipment { 
    dbReference&lt;Detail&gt;   detail;
    dbReference&lt;Supplier&gt; supplier;
    int4                  price;
    int4                  quantity;
    dbDateTime            delivery;

    TYPE_DESCRIPTOR((KEY(detail, HASHED), KEY(supplier, HASHED), 
		     FIELD(price), FIELD(quantity), FIELD(delivery)));
};
</PRE>

We want to get information about delivery of some concrete details from some concrete
suppliers. In relational database this query will be written something like this:

<PRE>
     select from Supplier,Shipment,Detail where 
                 Supplier.SID = Shipment.SID and Shipment.DID = Detail.DID 
		 and Supplier.company like ? and Supplier.address like ?
		 and Detail.name like ? 
</PRE>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月婷婷综合在线| 日本韩国精品在线| 欧美精品一区在线观看| 久久99精品国产麻豆不卡| 欧美日韩aaaaaa| 蜜桃视频免费观看一区| 日韩一级片在线观看| 看电视剧不卡顿的网站| 久久免费偷拍视频| av日韩在线网站| 一区二区三区成人在线视频| 欧美老年两性高潮| 国产精品996| 国产欧美日产一区| 91麻豆成人久久精品二区三区| 亚洲自拍偷拍网站| 欧美一区二区视频观看视频| 久久精品国产一区二区三区免费看| 日韩欧美亚洲国产另类| 国产成人综合亚洲91猫咪| 亚洲网友自拍偷拍| 337p日本欧洲亚洲大胆色噜噜| 成人亚洲精品久久久久软件| 亚洲激情图片qvod| 2020国产精品自拍| 91看片淫黄大片一级在线观看| 日本在线不卡视频一二三区| 久久久精品人体av艺术| 日韩欧美资源站| 国产综合久久久久久鬼色| 亚洲日本成人在线观看| 精品盗摄一区二区三区| 欧美一卡二卡三卡| 久久综合九色综合久久久精品综合| 久久久欧美精品sm网站| 欧美国产成人在线| 自拍偷在线精品自拍偷无码专区| 亚洲精品一线二线三线| 日韩精品专区在线影院观看 | 中文字幕的久久| 日韩精品一区二| 精品国产乱码91久久久久久网站| 欧美精品一区二区三区四区| 欧美一区二区三区白人| 欧美午夜精品一区二区三区| 91麻豆国产精品久久| 欧美日本韩国一区| 日韩视频一区在线观看| 久久综合色鬼综合色| 最新不卡av在线| 亚洲一区二区在线免费观看视频| 日韩精品一级中文字幕精品视频免费观看| 亚洲福利一区二区三区| 秋霞成人午夜伦在线观看| 国产在线看一区| 国产a久久麻豆| 欧美另类videos死尸| 欧美久久久影院| 国产亚洲精品超碰| 亚洲自拍欧美精品| 国产盗摄一区二区| 色婷婷久久久久swag精品| 91.com视频| 亚洲天堂2016| 国产做a爰片久久毛片| 国产69精品久久久久毛片| 精品视频资源站| 欧美区在线观看| 中文字幕一区二区三中文字幕| 亚洲午夜久久久| 成人av资源站| 欧美另类videos死尸| 中文字幕一区二区三区不卡在线 | 综合久久久久久| 日韩av一区二区三区| 91麻豆免费看片| 国产精品乱子久久久久| 老司机午夜精品| 欧美影院午夜播放| 国产精品美女一区二区| 国产一区二区三区黄视频 | 国产精品丝袜91| 日本伊人色综合网| 欧美在线免费视屏| 国产精品乱码人人做人人爱| 久久99精品久久久| 欧美绝品在线观看成人午夜影视| 中文字幕免费不卡| 成人国产视频在线观看| 久久久国际精品| 国产不卡视频一区| 欧美精彩视频一区二区三区| 国产成人综合网站| 国产欧美一区二区精品忘忧草| 亚洲1区2区3区视频| 欧美日韩在线不卡| 韩国一区二区三区| 国产精品视频看| 在线视频综合导航| 五月激情丁香一区二区三区| 日韩西西人体444www| 韩国理伦片一区二区三区在线播放| 日韩一卡二卡三卡| 国模少妇一区二区三区| 日韩亚洲欧美一区| 国产成人免费视频网站| 亚洲五码中文字幕| 91精品国产综合久久久蜜臀图片| 亚洲高清视频在线| 欧美一区二区三区视频免费播放| 成人妖精视频yjsp地址| 日韩精品一二三四| 久久精品无码一区二区三区| 欧美久久高跟鞋激| 91一区二区三区在线观看| 国产一区在线看| 久久se精品一区精品二区| 亚洲高清视频在线| 久久―日本道色综合久久| 99精品欧美一区| 午夜日韩在线电影| 亚洲精品乱码久久久久久久久 | 色综合天天综合网国产成人综合天| 国产中文一区二区三区| 麻豆精品久久精品色综合| 亚洲人成网站在线| 欧美国产乱子伦| 国产精品二三区| 国产精品久久久久影院亚瑟| 欧美国产一区二区| 国产日产欧美一区二区视频| 2023国产一二三区日本精品2022| 欧美日韩国产经典色站一区二区三区 | 午夜免费久久看| 日韩一区欧美小说| 亚洲精品国产成人久久av盗摄 | 久久91精品国产91久久小草| 亚洲第一福利一区| 欧美高清在线视频| 国产日韩在线不卡| 中文字幕一区免费在线观看| 亚洲少妇最新在线视频| 亚洲综合一区在线| 亚洲成人免费视频| 首页国产欧美日韩丝袜| 午夜欧美在线一二页| 一区二区三区在线视频播放| 国产日产欧产精品推荐色| 精品国产成人系列| 久久久国产精品午夜一区ai换脸| 精品成人免费观看| 国产精品剧情在线亚洲| 亚洲图片你懂的| 亚洲综合另类小说| 国产福利不卡视频| 777奇米成人网| 中文字幕中文乱码欧美一区二区 | 久久综合精品国产一区二区三区 | 五月综合激情网| 蜜臀av一区二区在线观看 | 免费看黄色91| av电影一区二区| 欧美日本在线看| 国产精品福利在线播放| 日韩二区在线观看| 成人黄色777网| 久久蜜桃av一区精品变态类天堂| 一区二区三区国产精品| 韩国精品一区二区| 欧美老女人第四色| 亚洲影院久久精品| 国产成人精品亚洲777人妖| 欧美日韩高清影院| 中文字幕欧美日本乱码一线二线| 一区二区三区在线观看网站| 国产精品一区久久久久| 欧美乱熟臀69xxxxxx| 亚洲视频狠狠干| 93久久精品日日躁夜夜躁欧美| 日韩午夜激情视频| 视频一区在线视频| 欧美性受极品xxxx喷水| 国产精品免费久久| 国产精品99久| 欧美极品美女视频| 丰满放荡岳乱妇91ww| 2020国产精品自拍| 国内成人精品2018免费看| 日韩一区二区三区免费看| 婷婷中文字幕一区三区| 欧美群妇大交群中文字幕| 亚洲va在线va天堂| 制服丝袜亚洲色图| 日韩精品国产欧美| 欧美大胆一级视频| 蜜桃av一区二区| 久久久久亚洲蜜桃| 白白色亚洲国产精品| 亚洲国产精品视频| 日韩三区在线观看|