1 """
2 * Copyright 2008 Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http:#www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 """
16
17
18
19
20
21
22 """*
23 * An in-browser SQL database. Gears provides a SQL database using SQLite
24 * syntax. For details, see the <a href="http:#www.sqlite.org/lang.html">SQLite
25 * syntax.</a>
26 *
27 * Note that this class (and its related classes) intentionally do NOT implement
28 * the JDBC interface, since the database provided by Gears does necessarily
29 * implement all those semantics. It may be possible to add a JDBC layer on top
30 * of this, but it's unclear whether that would really be useful.
31 """
32
33 from __pyjamas__ import JS
34
36
40
41 """*
42 * Closes the database connection, if any, currently associated with this
43 * Database instance. Calling Database.close() is not required.
44 *
45 * @throws DatabaseException if an error occurs
46 """
50
51
52
53 """*
54 * Executes the specified SQL statement and returns a {@link ResultSet}
55 * containing the results.
56 *
57 * Substitute zero or more bind parameters from <code>args</code> into
58 * <code>sqlStatement</code> and execute the resulting SQL statement. There
59 * must be exactly as many items in <code>args</code> as there are ? place
60 * holders in <code>sqlStatement</code>. <code>args</code> can be omitted
61 * if there are no place holders. The results of executing the statement are
62 * returned in a ResultSet.
63 *
64 * Note that if multiple processes (including Workers) attempt to write to the
65 * database at the same time, one can fail. It is up to the application to
66 * retry in these situations.
67 *
68 * @param sqlStatement SQL statement to execute; may use '?' place holders
69 * @param args values for the place holders in the <code>sqlStatement</code>
70 * @return {@link ResultSet} associated with the SQL statement
71 * @throws DatabaseException if the SQL statement fails or if multiple Workers
72 * attempt to write to the database at the same time
73 """
74 - def execute(self, sqlStatement, *args):
80
81
82
83 """*
84 * Returns the ID of the last row inserted into a table. This is a global
85 * counter, and is unique over all rows in all tables.
86 *
87 * @return the ID of the last row inserted, or 0 if no rows have been inserted
88 * on this connection
89 """
91 JS("""
92 return this['db']['lastInsertRowId'];
93 """)
94
95 """*
96 * Returns the number of database rows that were changed, inserted, or deleted
97 * by the most recently completed INSERT, UPDATE, or DELETE statement on this
98 * Database instance.
99 *
100 * Note that an unconstrained delete of all rows in a table (DELETE FROM
101 * table) will return zero rather than the number of rows that were originally
102 * present in the table; if you need the number of rows, use DELETE FROM table
103 * WHERE 1 instead, though be aware that this is slower than an unconstrained
104 * delete.
105 *
106 * @return the number of database rows impacted by the last INSERT, UPDATE or *
107 * DELETE statement on this Database instance
108 """
110 JS("""
111 return this['db']['rowsAffected'];
112 """)
113
114 """*
115 * Opens a database with the specified <code>name</code>. Note that this
116 * name is local to the application's origin.
117 *
118 * @param name name of the database (None - Opens an unnamed database.)
119 """
120 - def open(self, name=None):
121 if name is None:
122 JS(" this['db']['open'](); ")
123 else:
124 JS(" this['db']['open'](@{{name}}); ")
125
126
128 JS("""
129 if (typeof @{{args}} == 'undefined') {
130 return this['db']['execute'](@{{sqlStatement}});
131 } else {
132 return this['db']['execute'](@{{sqlStatement}}, @{{args}}['l']);
133 }
134 """)
135
136
138 JS("""
139 this['db']['close']();
140 """)
141