~ubuntu-branches/ubuntu/wily/sqlite3/wily

« back to all changes in this revision

Viewing changes to c3ref/create_collation.html

  • Committer: Package Import Robot
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2012-06-13 21:43:48 UTC
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: package-import@ubuntu.com-20120613214348-uy14uupdeq0hh04k
Tags: upstream-3.7.13/www
Import upstream version 3.7.13, component www

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 
2
<html><head>
 
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 
4
<title>Define New Collating Sequences</title>
 
5
<style type="text/css">
 
6
body {
 
7
    margin: auto;
 
8
    font-family: Verdana, sans-serif;
 
9
    padding: 8px 1%;
 
10
}
 
11
 
 
12
a { color: #044a64 }
 
13
a:visited { color: #734559 }
 
14
 
 
15
.logo { position:absolute; margin:3px; }
 
16
.tagline {
 
17
  float:right;
 
18
  text-align:right;
 
19
  font-style:italic;
 
20
  width:300px;
 
21
  margin:12px;
 
22
  margin-top:58px;
 
23
}
 
24
 
 
25
.toolbar {
 
26
  text-align: center;
 
27
  line-height: 1.6em;
 
28
  margin: 0;
 
29
  padding: 0px 8px;
 
30
}
 
31
.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
 
32
.toolbar a:visited { color: white; }
 
33
.toolbar a:hover { color: #044a64; background: white; }
 
34
 
 
35
.content    { margin: 5%; }
 
36
.content dt { font-weight:bold; }
 
37
.content dd { margin-bottom: 25px; margin-left:20%; }
 
38
.content ul { padding:0px; padding-left: 15px; margin:0px; }
 
39
 
 
40
/* rounded corners */
 
41
.se  { background: url(../images/se.gif) 100% 100% no-repeat #044a64}
 
42
.sw  { background: url(../images/sw.gif) 0% 100% no-repeat }
 
43
.ne  { background: url(../images/ne.gif) 100% 0% no-repeat }
 
44
.nw  { background: url(../images/nw.gif) 0% 0% no-repeat }
 
45
 
 
46
/* Things for "fancyformat" documents start here. */
 
47
.fancy img+p {font-style:italic}
 
48
.fancy .codeblock i { color: darkblue; }
 
49
.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
 
50
.fancy h2 { margin-left: 10px }
 
51
.fancy h3 { margin-left: 20px }
 
52
.fancy h4 { margin-left: 30px }
 
53
.fancy th {white-space:nowrap;text-align:left;border-bottom:solid 1px #444}
 
54
.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
 
55
.fancy #toc a        { color: darkblue ; text-decoration: none }
 
56
.fancy .todo         { color: #AA3333 ; font-style : italic }
 
57
.fancy .todo:before  { content: 'TODO:' }
 
58
.fancy p.todo        { border: solid #AA3333 1px; padding: 1ex }
 
59
.fancy img { display:block; }
 
60
.fancy :link:hover, .fancy :visited:hover { background: wheat }
 
61
.fancy p,.fancy ul,.fancy ol { margin: 1em 5ex }
 
62
.fancy li p { margin: 1em 0 }
 
63
/* End of "fancyformat" specific rules. */
 
64
 
 
65
</style>
 
66
  
 
67
</head>
 
68
<body>
 
69
<div><!-- container div to satisfy validator -->
 
70
 
 
71
<a href="../index.html">
 
72
<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite Logo"
 
73
 border="0"></a>
 
74
<div><!-- IE hack to prevent disappearing logo--></div>
 
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
 
76
 
 
77
<table width=100% style="clear:both"><tr><td>
 
78
  <div class="se"><div class="sw"><div class="ne"><div class="nw">
 
79
  <table width=100% style="padding:0;margin:0;cell-spacing:0"><tr>
 
80
  <td width=100%>
 
81
  <div class="toolbar">
 
82
    <a href="../about.html">About</a>
 
83
    <a href="../sitemap.html">Sitemap</a>
 
84
    <a href="../docs.html">Documentation</a>
 
85
    <a href="../download.html">Download</a>
 
86
    <a href="../copyright.html">License</a>
 
87
    <a href="../news.html">News</a>
 
88
    <a href="../support.html">Support</a>
 
89
  </div>
 
90
<script>
 
91
  gMsg = "Search SQLite Docs..."
 
92
  function entersearch() {
 
93
    var q = document.getElementById("q");
 
94
    if( q.value == gMsg ) { q.value = "" }
 
95
    q.style.color = "black"
 
96
    q.style.fontStyle = "normal"
 
97
  }
 
98
  function leavesearch() {
 
99
    var q = document.getElementById("q");
 
100
    if( q.value == "" ) { 
 
101
      q.value = gMsg
 
102
      q.style.color = "#044a64"
 
103
      q.style.fontStyle = "italic"
 
104
    }
 
105
  }
 
106
</script>
 
107
<td>
 
108
    <div style="padding:0 1em 0px 0;white-space:nowrap">
 
109
    <form name=f method="GET" action="http://www.sqlite.org/search">
 
110
      <input id=q name=q type=text
 
111
       onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
 
112
      <input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
 
113
    </form>
 
114
    </div>
 
115
  </table>
 
116
</div></div></div></div>
 
117
</td></tr></table>
 
118
<div class=startsearch></div>
 
119
  
 
120
<a href="intro.html"><h2>SQLite C Interface</h2></a><h2>Define New Collating Sequences</h2><blockquote><pre>int sqlite3_create_collation(
 
121
  sqlite3*, 
 
122
  const char *zName, 
 
123
  int eTextRep, 
 
124
  void *pArg,
 
125
  int(*xCompare)(void*,int,const void*,int,const void*)
 
126
);
 
127
int sqlite3_create_collation_v2(
 
128
  sqlite3*, 
 
129
  const char *zName, 
 
130
  int eTextRep, 
 
131
  void *pArg,
 
132
  int(*xCompare)(void*,int,const void*,int,const void*),
 
133
  void(*xDestroy)(void*)
 
134
);
 
135
int sqlite3_create_collation16(
 
136
  sqlite3*, 
 
137
  const void *zName,
 
138
  int eTextRep, 
 
139
  void *pArg,
 
140
  int(*xCompare)(void*,int,const void*,int,const void*)
 
141
);
 
142
</pre></blockquote><p>
 
143
These functions add, remove, or modify a <a href="../datatype3.html#collation">collation</a> associated
 
144
with the <a href="../c3ref/sqlite3.html">database connection</a> specified as the first argument.</p>
 
145
 
 
146
<p>The name of the collation is a UTF-8 string
 
147
for sqlite3_create_collation() and sqlite3_create_collation_v2()
 
148
and a UTF-16 string in native byte order for sqlite3_create_collation16().
 
149
Collation names that compare equal according to <a href="../c3ref/stricmp.html">sqlite3_strnicmp()</a> are
 
150
considered to be the same name.</p>
 
151
 
 
152
<p>The third argument (eTextRep) must be one of the constants:
 
153
<ul>
 
154
<li> <a href="../c3ref/c_any.html">SQLITE_UTF8</a>,
 
155
<li> <a href="../c3ref/c_any.html">SQLITE_UTF16LE</a>,
 
156
<li> <a href="../c3ref/c_any.html">SQLITE_UTF16BE</a>,
 
157
<li> <a href="../c3ref/c_any.html">SQLITE_UTF16</a>, or
 
158
<li> <a href="../c3ref/c_any.html">SQLITE_UTF16_ALIGNED</a>.
 
159
</ul>
 
160
The eTextRep argument determines the encoding of strings passed
 
161
to the collating function callback, xCallback.
 
162
The <a href="../c3ref/c_any.html">SQLITE_UTF16</a> and <a href="../c3ref/c_any.html">SQLITE_UTF16_ALIGNED</a> values for eTextRep
 
163
force strings to be UTF16 with native byte order.
 
164
The <a href="../c3ref/c_any.html">SQLITE_UTF16_ALIGNED</a> value for eTextRep forces strings to begin
 
165
on an even byte address.</p>
 
166
 
 
167
<p>The fourth argument, pArg, is an application data pointer that is passed
 
168
through as the first argument to the collating function callback.</p>
 
169
 
 
170
<p>The fifth argument, xCallback, is a pointer to the collating function.
 
171
Multiple collating functions can be registered using the same name but
 
172
with different eTextRep parameters and SQLite will use whichever
 
173
function requires the least amount of data transformation.
 
174
If the xCallback argument is NULL then the collating function is
 
175
deleted.  When all collating functions having the same name are deleted,
 
176
that collation is no longer usable.</p>
 
177
 
 
178
<p>The collating function callback is invoked with a copy of the pArg
 
179
application data pointer and with two strings in the encoding specified
 
180
by the eTextRep argument.  The collating function must return an
 
181
integer that is negative, zero, or positive
 
182
if the first string is less than, equal to, or greater than the second,
 
183
respectively.  A collating function must always return the same answer
 
184
given the same inputs.  If two or more collating functions are registered
 
185
to the same collation name (using different eTextRep values) then all
 
186
must give an equivalent answer when invoked with equivalent strings.
 
187
The collating function must obey the following properties for all
 
188
strings A, B, and C:</p>
 
189
 
 
190
<p><ol>
 
191
<li> If A==B then B==A.
 
192
<li> If A==B and B==C then A==C.
 
193
<li> If A&lt;B THEN B&gt;A.
 
194
<li> If A&lt;B and B&lt;C then A&lt;C.
 
195
</ol></p>
 
196
 
 
197
<p>If a collating function fails any of the above constraints and that
 
198
collating function is  registered and used, then the behavior of SQLite
 
199
is undefined.</p>
 
200
 
 
201
<p>The sqlite3_create_collation_v2() works like sqlite3_create_collation()
 
202
with the addition that the xDestroy callback is invoked on pArg when
 
203
the collating function is deleted.
 
204
Collating functions are deleted when they are overridden by later
 
205
calls to the collation creation functions or when the
 
206
<a href="../c3ref/sqlite3.html">database connection</a> is closed using <a href="../c3ref/close.html">sqlite3_close()</a>.</p>
 
207
 
 
208
<p>The xDestroy callback is <u>not</u> called if the
 
209
sqlite3_create_collation_v2() function fails.  Applications that invoke
 
210
sqlite3_create_collation_v2() with a non-NULL xDestroy argument should
 
211
check the return code and dispose of the application data pointer
 
212
themselves rather than expecting SQLite to deal with it for them.
 
213
This is different from every other SQLite interface.  The inconsistency
 
214
is unfortunate but cannot be changed without breaking backwards
 
215
compatibility.</p>
 
216
 
 
217
<p>See also:  <a href="../c3ref/collation_needed.html">sqlite3_collation_needed()</a> and <a href="../c3ref/collation_needed.html">sqlite3_collation_needed16()</a>.
 
218
</p><p>See also lists of
 
219
  <a href="objlist.html">Objects</a>,
 
220
  <a href="constlist.html">Constants</a>, and
 
221
  <a href="funclist.html">Functions</a>.</p>