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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fastdb.htm

?? 用于嵌入式環(huán)境的數(shù)據(jù)庫(kù)
?? HTM
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):

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> 

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>

In FastDB this request should be written as: 

<PRE>
     dbQuery q = "detail.name like",name,"and supplier.company like",company,
	         "and supplier.address like",address,"order by price";
</PRE>
     
FastDB will first perform index search in the table <code>Detail</code> for details
matching the search condition. Then it performs another index search to locate shipment 
records referencing selected details. Then sequential search is used to check the rest of
select predicate.
<P>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久免费偷拍视频| 亚洲综合网站在线观看| 色综合天天狠狠| 狠狠色伊人亚洲综合成人| 亚洲日穴在线视频| 亚洲国产高清不卡| 日韩欧美一区二区免费| 欧美日韩一卡二卡三卡| 国产成人av在线影院| 捆绑调教美女网站视频一区| 亚洲黄色免费电影| 欧美高清在线一区二区| 欧美精品一区二区三区在线播放| 欧美日韩国产小视频| eeuss鲁片一区二区三区在线观看| 午夜激情一区二区| 亚洲欧美日韩系列| 中文字幕一区二区三区在线观看| 欧美精品一区二区久久久| 337p亚洲精品色噜噜噜| 在线视频你懂得一区二区三区| 波多野洁衣一区| 国产精品99久久久| 国产一区免费电影| 精品写真视频在线观看| 麻豆专区一区二区三区四区五区| 一卡二卡三卡日韩欧美| 亚洲人精品午夜| 国产精品高潮呻吟久久| 中文一区二区完整视频在线观看| 国产亚洲午夜高清国产拍精品| 精品久久五月天| 欧美一区二区三区四区在线观看| 欧美欧美欧美欧美| 555夜色666亚洲国产免| 88在线观看91蜜桃国自产| 欧美日高清视频| 制服丝袜激情欧洲亚洲| 日韩欧美国产三级| 精品久久人人做人人爰| 久久精品视频一区二区三区| 久久久91精品国产一区二区三区| 久久久久国产精品人| 国产蜜臀97一区二区三区| 欧美激情一区三区| 成人免费在线观看入口| 亚洲欧美日韩系列| 亚洲一区二区三区视频在线播放 | 黑人巨大精品欧美一区| 美女免费视频一区| 国产乱码精品一区二区三区五月婷| 激情综合五月婷婷| 国产精品1区2区| 不卡区在线中文字幕| 91一区二区三区在线观看| 91久久免费观看| 欧美久久一二区| 精品三级在线看| 国产精品久久久久久久久免费桃花 | 欧美精品一区二区蜜臀亚洲| 国产三级一区二区| 亚洲男人天堂av| 丝瓜av网站精品一区二区| 久久国产麻豆精品| 成人午夜在线视频| 日本伦理一区二区| 欧美一区二区视频在线观看2020| 337p日本欧洲亚洲大胆色噜噜| 欧美激情一区二区三区全黄| 亚洲色图在线播放| 日日欢夜夜爽一区| 国产麻豆视频一区二区| 色综合久久久久| 日韩欧美精品在线| 综合在线观看色| 久久精品久久精品| 国产精品 欧美精品| 欧美午夜影院一区| 久久理论电影网| 亚洲高清久久久| 国产成人午夜视频| 欧美日韩精品系列| 国产日韩综合av| 日本va欧美va精品发布| 97国产一区二区| 久久影院电视剧免费观看| 一区二区三区高清| 国内精品伊人久久久久av影院| 91福利在线观看| 中文av一区特黄| 美女性感视频久久| 欧美视频三区在线播放| 国产精品青草综合久久久久99| 青椒成人免费视频| 欧亚洲嫩模精品一区三区| 久久精品欧美日韩精品| 日韩av午夜在线观看| 色婷婷激情久久| 国产免费久久精品| 久久99精品久久久久久国产越南| 欧美伊人久久久久久午夜久久久久| 国产色综合一区| 激情欧美一区二区| 欧美日韩精品是欧美日韩精品| 国产精品久久久久久久浪潮网站| 精品一区二区三区香蕉蜜桃| 欧美色视频在线| 一区二区三区四区激情| 99久久免费视频.com| 国产三级三级三级精品8ⅰ区| 日产国产欧美视频一区精品 | 欧美一区二区私人影院日本| 亚洲精品视频一区| a美女胸又www黄视频久久| 久久九九久精品国产免费直播| 蜜臀久久99精品久久久画质超高清| 欧美综合在线视频| 亚洲精品一二三区| 99久久精品国产一区| 久久精品视频在线看| 国产永久精品大片wwwapp| 欧美大片拔萝卜| 久久成人免费网| 欧美电影免费提供在线观看| 婷婷开心激情综合| 欧美日韩免费不卡视频一区二区三区| 亚洲三级在线播放| 色吧成人激情小说| 亚洲精品高清在线| 91豆麻精品91久久久久久| 亚洲免费观看高清完整版在线观看 | 亚洲色图都市小说| 99国产精品一区| 亚洲丝袜制服诱惑| 色综合久久综合| 亚洲精选视频免费看| 在线精品观看国产| 香蕉加勒比综合久久| 欧美日本在线看| 青青国产91久久久久久| 精品少妇一区二区三区| 国产精品888| 亚洲手机成人高清视频| 在线观看区一区二| 日韩黄色小视频| 精品免费国产二区三区| 高清shemale亚洲人妖| 国产精品免费视频网站| 一本久久综合亚洲鲁鲁五月天| 亚洲综合在线第一页| 正在播放一区二区| 国产在线麻豆精品观看| 国产精品国产三级国产a| 一本色道a无线码一区v| 亚洲 欧美综合在线网络| 日韩一区二区三区观看| 国产乱子伦一区二区三区国色天香| 国产精品视频麻豆| 91福利国产成人精品照片| 日本三级亚洲精品| 国产丝袜欧美中文另类| 色婷婷国产精品| 日本视频在线一区| 国产精品女人毛片| 欧美精选午夜久久久乱码6080| 免费日韩伦理电影| 中文字幕av一区 二区| 欧洲精品一区二区三区在线观看| 老司机精品视频导航| 国产精品国产三级国产有无不卡 | 国产精品国产三级国产普通话99| 在线观看亚洲精品| 国产在线不卡一卡二卡三卡四卡| 亚洲欧洲三级电影| 欧美一区二区三级| av在线这里只有精品| 免费在线观看不卡| 亚洲视频资源在线| 欧美成人午夜电影| 色先锋资源久久综合| 久草中文综合在线| 亚洲欧美日韩人成在线播放| 欧美va在线播放| 在线观看一区不卡| 成人网在线播放| 麻豆一区二区三| 一区二区三区中文字幕电影| 久久久久9999亚洲精品| 在线播放欧美女士性生活| 成人免费观看av| 精品一区二区三区在线播放视频 | 欧美日韩精品欧美日韩精品一 | 日韩一级片在线播放| 91毛片在线观看| 国产乱理伦片在线观看夜一区| 亚洲一级在线观看| 国产精品乱码久久久久久| 日韩一区二区三区四区| 欧美中文字幕亚洲一区二区va在线| 国产大陆亚洲精品国产|