15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Apple Inc. All Rights Reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.View}
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DatabaseQueryView = function(database)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.View.call(this);
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.database = database;
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.element.classList.add("storage-view");
37a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.element.classList.add("query");
38a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.element.classList.add("monospace");
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.element.addEventListener("selectstart", this._selectStart.bind(this), false);
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._promptElement = document.createElement("div");
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._promptElement.className = "database-query-prompt";
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._promptElement.appendChild(document.createElement("br"));
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._promptElement.addEventListener("keydown", this._promptKeyDown.bind(this), true);
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.element.appendChild(this._promptElement);
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.prompt = new WebInspector.TextPromptWithHistory(this.completions.bind(this), " ");
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.prompt.attach(this._promptElement);
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.element.addEventListener("click", this._messagesClicked.bind(this), true);
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DatabaseQueryView.Events = {
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SchemaUpdated: "SchemaUpdated"
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DatabaseQueryView.prototype = {
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _messagesClicked: function()
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.prompt.moveCaretToEndOfPrompt();
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
65a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Element} proxyElement
66a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Range} wordRange
67fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch     * @param {boolean} force
68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {function(!Array.<string>, number=)} completionsReadyCallback
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
70fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    completions: function(proxyElement, wordRange, force, completionsReadyCallback)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var prefix = wordRange.toString().toLowerCase();
73f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)        if (!prefix)
74f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)            return;
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var results = [];
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function accumulateMatches(textArray)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < textArray.length; ++i) {
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var text = textArray[i].toLowerCase();
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (text.length < prefix.length)
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    continue;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (!text.startsWith(prefix))
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    continue;
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                results.push(textArray[i]);
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function tableNamesCallback(tableNames)
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            accumulateMatches(tableNames.map(function(name) { return name + " " }));
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            accumulateMatches(["SELECT ", "FROM ", "WHERE ", "LIMIT ", "DELETE FROM ", "CREATE ", "DROP ", "TABLE ", "INDEX ", "UPDATE ", "INSERT INTO ", "VALUES ("]);
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            completionsReadyCallback(results);
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.database.getTableNames(tableNamesCallback);
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _selectStart: function(event)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._selectionTimeout)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            clearTimeout(this._selectionTimeout);
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.prompt.clearAutoComplete();
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
106e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
107e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DatabaseQueryView}
108e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function moveBackIfOutside()
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._selectionTimeout;
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed)
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this.prompt.moveCaretToEndOfPrompt();
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.prompt.autoCompleteSoon();
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100);
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _promptKeyDown: function(event)
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (isEnterKey(event)) {
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._enterKeyPressed(event);
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _enterKeyPressed: function(event)
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        event.consume(true);
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.prompt.clearAutoComplete(true);
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var query = this.prompt.text;
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!query.length)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.prompt.pushHistoryItem(query);
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.prompt.text = "";
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.database.executeSql(query, this._queryFinished.bind(this, query), this._queryError.bind(this, query));
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _queryFinished: function(query, columnNames, values)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var dataGrid = WebInspector.DataGrid.createSortableDataGrid(columnNames, values);
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var trimmedQuery = query.trim();
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (dataGrid) {
150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            dataGrid.renderInline();
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._appendViewQueryResult(trimmedQuery, dataGrid);
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            dataGrid.autoSizeColumns(5);
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (trimmedQuery.match(/^create /i) || trimmedQuery.match(/^drop table /i))
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.dispatchEventToListeners(WebInspector.DatabaseQueryView.Events.SchemaUpdated, this.database);
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _queryError: function(query, errorMessage)
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._appendErrorQueryResult(query, errorMessage);
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} query
166a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.View} view
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _appendViewQueryResult: function(query, view)
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var resultElement = this._appendQueryResult(query);
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        view.show(resultElement);
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._promptElement.scrollIntoView(false);
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} query
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} errorText
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _appendErrorQueryResult: function(query, errorText)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var resultElement = this._appendQueryResult(query);
183a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        resultElement.classList.add("error")
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        resultElement.textContent = errorText;
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._promptElement.scrollIntoView(false);
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _appendQueryResult: function(query)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var element = document.createElement("div");
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        element.className = "database-user-query";
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.element.insertBefore(element, this.prompt.proxyElement);
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var commandTextElement = document.createElement("span");
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        commandTextElement.className = "database-query-text";
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        commandTextElement.textContent = query;
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        element.appendChild(commandTextElement);
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var resultElement = document.createElement("div");
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        resultElement.className = "database-query-result";
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        element.appendChild(resultElement);
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return resultElement;
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.View.prototype
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
208