44623456d5a68d302badf9362a46c1be557a8303
[codereview/qtwebservice.git] / examples / webservice / official / root / examples / database.qml
1 /* Copyright (c) 2012 QtWebService Project.
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of the QtWebService nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL QTWEBSERVICE BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 import QtQml 2.0
28 import QtWebService.HTML 5.0
29 import QtWebService.Utils 1.0
30 import me.qtquick.Database 0.1
31 import "./components"
32
33 Html {
34     UserInput {
35         id: input
36
37         property string action
38         property variant keys
39         property string value
40
41         onSubmit: {
42             switch(input.action) {
43             case 'remove':
44                 for (var i in data) {
45                     if (i.substring(0, 'key_'.length) === 'key_') {
46                         if (db.transaction()) {
47                             chat.remove({'key': i.substring('key_'.length)});
48                             if (!db.commit()) db.rollback();
49                         }
50                     }
51                 }
52                 break;
53             case 'insert':
54                 if (db.transaction()) {
55                     chat.insert({'value': QtWebService.escapeHTML(input.value)});
56                     if (!db.commit()) db.rollback();
57                 }
58                 break;
59             default:
60                 break;
61             }
62             chat.select = true;
63             select.select = true
64         }
65     }
66
67     Database {
68         id: db
69         connectionName: 'examples/database.qml'
70         type: "QSQLITE"
71         databaseName: ":memory:"
72
73         TableModel {
74             id: chat
75             select: false
76             tableName: 'Chat'
77             primaryKey: 'key'
78             property int key
79             property string value
80         }
81
82         SqlModel {
83             id: select
84             select: false
85             query: "SELECT COUNT(key) as keys FROM Chat WHERE value LIKE ?"
86             params: ['%Qt%']
87         }
88     }
89
90
91     Head {
92         Title { id: title; text: "Sql Database" }
93     }
94
95     Body {
96         H1 { text: title.text }
97         Form {
98             method: 'POST'
99             Text { text: "value: " }
100             Input { type: 'text'; name: 'value' }
101             Input { type: 'submit'; value: 'Insert' }
102             Input { type: 'hidden'; name: 'action'; value: 'insert' }
103         }
104         Form {
105             method: 'POST'
106             Table {
107                 THead {
108                     Tr {
109                         Th { text: ' ' }
110                         Th { text: 'key' }
111                         Th { text: 'value' }
112                     }
113                 }
114                 TBody {
115                     Repeater {
116                         model: chat
117                         Component {
118                             Tr {
119                                 Td { Input { type: 'checkbox'; name: 'key_%1'.arg(model.key) } }
120                                 Td { text: model.key }
121                                 Td { text: model.value }
122                             }
123                         }
124                     }
125                 }
126                 TFoot {
127                     Tr {
128                         Td {
129                             colspan: '3'
130                             Input { type: 'submit'; value: 'Remove checked data' }
131                             Input { type: 'hidden'; name: 'action'; value: 'remove' }
132                         }
133                     }
134                 }
135             }
136         }
137
138         P { text: 'the number of values that contains "Qt" is %1.'.arg(select.count > 0 ? select.get(0).keys : '"not selected yet"') }
139     }
140 }