Commit Graph

2510 Commits

Author SHA1 Message Date
Martin Kleusberg
517743ff3f grammar: Add window functions to parser
We don't do anything with the extended parser yet but I'm not even sure
the window functions can be used in CREATE TABLE or CREATE INDEX
statements anyway.
2018-09-28 16:11:11 +02:00
mgr
903e66485c Simplify the URL for a feature request
As suggested by @karim at #1497, the template in GitHub can be reused if
set as parameter. Then we can discard the long body parameter and have
a single definition of the Feature Request template text.
2018-09-27 23:43:30 +02:00
Martin Kleusberg
7e23214e61 Add auto completion for window function keywords and functions 2018-09-27 23:22:03 +02:00
Martin Kleusberg
78ae2c3e09 Fix ROWID keyword in auto completion
For some reason instead of using the ROWID keyword for auto completion
we we're only completing it to ROW.
2018-09-27 23:10:43 +02:00
Martin Kleusberg
320c71eed8 Save and load attached databases to/from the project file
We were already saving information on tables, etc. of attached
databases, so it only makes sense to save the path and name of the
databases as well.

See issue #1532.
2018-09-27 22:04:28 +02:00
Martin Kleusberg
07b1d7ba00 Fix memory leak when attaching a database 2018-09-27 21:41:40 +02:00
Martin Kleusberg
717ff075b5 Avoid some possible crashes
This adds some extra sanity checks in the code to avoid possible
crashes. The most likely way to trigger them is loading an outdated
project file which references tables that no longer exist.
2018-09-27 21:36:11 +02:00
mgr
54cf4cf140 Printing support #1525: add print preview dialog
This adds a print preview step before printing in the Database Structure
tab.

This is nice to have, but it also aims to work around the problem found in
Windows, reported at issue #760.
2018-09-27 21:06:59 +02:00
mgr
ab991c5755 Preferences > SQL: Avoid different heights due to having check boxes or not
The uniform row heights property is set so the rows without check boxes is
the same as the rows with them (the difference might only be observable
with some theme engines)
2018-09-27 21:06:59 +02:00
Martin Kleusberg
f9ac3aa711 Fix a possible endless loop on some platforms
See issue #1531.
2018-09-27 11:58:00 +02:00
Martin Kleusberg
7fb570d668 Add missing braces 2018-09-27 11:57:32 +02:00
Martin Kleusberg
2cc900a98e Simplify code 2018-09-26 15:54:42 +02:00
Martin Kleusberg
918248acaa Simplify code 2018-09-26 15:54:39 +02:00
mgr
4f0d3505ed Printing support #1525: print DB structure
New action and button for printing the database structure.

The data in the Database Structure tree widget is converted to HTML and set
in a document that can then be printed, opening the dialog as done for
other components.
2018-09-25 23:00:17 +02:00
mgr
97f9a18310 Mac version references incorrect shortcut in FK navigation (ammend) #1539
According the documentation, the default value is PortableText which is
only for writing configuration. NativeText has to be used for display to
user.

This amends 87310a62e6
2018-09-25 22:20:58 +02:00
mgr
87310a62e6 Mac version references incorrect shortcut in FK navigation #1539
Using QKeySequence(Qt::CTRL).toString() should be translated according to
OS, either to Ctrl+ or Command+.

Known problem: there are other tooltips referencing control key sequences
but they are in *.ui files and this method cannot be used.

Note: QKeySequence(Qt::CTRL + Qt::Key_Shift).toString() showed weird
output under Linux.
2018-09-24 22:48:09 +02:00
mgr
afd3026b69 Fix logic issues in name composition for drag & drop
Some combinations of options and dropped name weren't working as expected
with f33943f4cf

See related issue #1433
2018-09-23 19:01:15 +02:00
mgr
4b34eb76b5 Printing support #1525: print tables in Browse Data and Execute SQL tabs
Added contextual menu entry and keyboard shortcut for printing the browsed
table with headers. If a region is selected, print those cells data.
Otherwise, print the entire table.

The HTML conversion used for clipboard is reused. Borders are added for
better visual output.
2018-09-23 18:26:57 +02:00
mgr
99c53a436e Fix positioning issues with multibyte characters in SQL executions
QScintilla counts characters for the index inside a line and number of
bytes for the global positions. When we use index we have to use text
lengths (number of characters) and when we use global position, we have to
convert previously to byte arrays. Otherwise offsets are produced in
executions containing non US-ASCII characters (accented letters, most
symbols, etc).

The bug could lead to final statements not executed by the execute-all
action, more than one line executed by the execute line action and
incorrect line references in the log.
2018-09-22 17:49:45 +02:00
mgr
a5d6b5018b Fixes and improvement of NULL value handling in Edit DB Cell dock
Fix: NULL data are correctly indicated in the Cell Info footer when loading
data from the database. Previously, the automatic trigger of
editModeChanged when setting the text in the widget was causing the change
to Text data type. Now the modified flag of the widget is taken into
account.

Fix: NULL values could not be overwritten with empty strings, since the
old vs. new check was incorrectly returning false as the conversion to
string was discarding the NULL information.

Improvement: NULL values are visually indicated using the placeholder as
already done in the Add Record dialog. The italic style is applied to both
cases now for better indication and coherence to the browse data widget.

Known problem: when the cell is changed from a JSON cell to a NULL cell
and the automatic switch is on, the NULL information and visual indication
are still lost.
2018-09-21 23:19:48 +02:00
mgr
dd3417e1c4 Automatic switching of the editor mode according to data type #1537
A new checkable button and associated setting is added for automatically
switching the editor mode in the Edit Database Cell dock in accordance to
the loaded data. The switch is done after loading data from cell, after
importing new data to the cell and when checking the button.

If the button is unchecked the behaviour is as formerly.

Since XML is not currently detected, the mode only changes to XML when SVG
is supplied.

Default value is true, since the new behaviour is considered more useful
for the general case.
2018-09-21 20:48:16 +02:00
mgr
18f0ef60ba Enhancement #1435: pragmas invoked from Tools menu
Pragmas integrity_check, quick_check, foreign_key_check and optimize are
integrated in the Tools menu. The actions open a confirmation dialog
(with Help button that opens the corresponding reference page in
sqlite.org) and, after confirmation, opens a new SQL editor tab and runs
there the pragma, showing the possible results.

Sender in executeQuery is null in this case, so a check is added.

Added accelerator to Tools menu entry, which lacked one.
2018-09-16 18:54:25 +02:00
mgr
9ca387886b Fix XML filter for import in Edit Database Cell dock and more.
The XML branch in the import was incorrectly programmed. Now it sets the
appropriate selected filter.

The list of filters is initialised once and the selected filter is passed
to the dialog using the specific parameter.

Chopped the last space in the image formats list for better style.

Case insensitivity applied to the suffix check as done in other parts of
the code.

See issue #1535.
2018-09-16 17:12:33 +02:00
mgr
60c229c1c4 Printing support: print dialog from QScintilla widgets
Add printing support for QScintilla widgets (SQL, JSON and XML). It can be
access through the contextual menu, shortcut (Ctrl+P) or (in the case of
the "Execute SQL" tab) from a button in the toolbar.

Ctrl+P was previously assigned to Plot Dock since
63c338c359 but, as it was foreseen in that
commit, it should be assign to print is ever supported. This change must
be mentioned in release notes.

First part of printing support. See issue #1525.
2018-09-16 16:06:27 +02:00
mgr
9daf2657fc Issue #1534: add schema name for qualified fields dropped from DB Schema
For the "Drag & Drop Qualified Names" option, the schema name for
attached databases is also added for field names dropped from the DB
Schema dock.
2018-09-15 20:27:08 +02:00
mgr
71f26cbc83 Allow exporting the textual representation of binary data
For binary data, the file save dialog allows to select text files. When
the user saves to a text file (*.txt) the visual representation of the
hex buffer is saved to the file (addresses, hexadecimal bytes and ASCII
view). In this dump, only US-ASCII seems to be considered printable, while
in screen, Latin-1 is also considered.

This was one of the enhancement suggestions in issue #1438.
2018-09-15 14:36:13 +02:00
mgr
6779ad8e7a Issue #1535: select appropriate file filter corresponding to "Mode"
This reorders the filters in the import file dialog of the Edit Cell dock
so the first entry is always in accordance to the currently selected mode.

This will also facilitate the translation of the filters, because the
translations can be reused and written without special syntax characters
(";;").

"%1 Image" is also used instead of a concatenation, because the word
order in translations will vary.
2018-09-15 13:28:22 +02:00
mgrojo
5b4dea9b7c Add "Feature Request..." entry and body templates in both types of issue
New entry under Help menu for requesting issues with the same template
used for a New Issue inside GitHub.

The "Bug Report..." entry has also been updated for adding the
corresponding template body.

Separators added in Help menu, since there are currently several different
options.

See related issue #1497
2018-09-10 22:17:02 +02:00
mgrojo
dfa599de44 Merge branch 'qualified_completion' 2018-09-10 21:03:29 +02:00
mgrojo
f33943f4cf Improvements for drag and drop of items from the DB Schema dock to editor
Two new options editable from a new context menu of the dock:
- Drag & Drop Qualified Names: add table name to fields and schema name
to other objects (except for "main" schema)
- Drag & Drop Enquoted Names: whether to surround the identifiers by the
configured quoting characters for identifiers.

Support for dragging & dropping of attached databases names.

Add "." as separator for multiple dropped objects other than fields (since
they are not usually used in SQL as a list). This allows to compose
qualified names by dropping the parent and the child items together. This
is only generally useful when the "Qualified Names" option is disabled.

See related issue #1433
2018-09-09 19:52:36 +02:00
mgrojo
04bc7da6e7 Better qualified completion support for quoted identifiers
The quotes around identifiers was hindering the automatic proposal of
fields when the table is completed or of tables when the schema name is
completed. By adding the dot surrounded by quotes (parent's end-quote and child's
begin-quote) as word separator, the child completion menu is activated
when the user presses the child's begin-quote.

See related issue #1433
2018-09-09 15:09:38 +02:00
mgrojo
ca00e51271 SQL export uses wrong line terminators for Windows
According to Qt documentation:

When writing, the end-of-line terminators are translated to the local
encoding, for example '\r\n' for Win32.

Reported in issue #1502
2018-09-06 23:14:55 +02:00
mgrojo
2081af207b Cursor Doesn't Change After Importing Database SQL File #1526
restoreOverrideCursor() is called before asking the user to accept the
warning or information message.
2018-09-06 21:30:20 +02:00
mgrojo
d02d98ed22 'Unix epoch to local time' in 'Display format' selection list #1467
This adds a new display format for getting the local time (takes into
account user time zone) from a Unix time (seconds from start of 1970
in UTC).
2018-09-06 21:06:47 +02:00
Martin Kleusberg
130afb1c08 Clean up code 2018-09-06 00:08:32 +02:00
mgrojo
d0b5ff10a7 Completion of qualified table names
This adds the schema names to the possible completions and adds support
for cascading completion of schema.table.field.

See related issue #1433
2018-09-05 23:03:47 +02:00
Martin Kleusberg
d16970d7c9 Replace foreach macro by range-based for loop 2018-09-05 22:53:00 +02:00
Martin Kleusberg
bf505edf66 Code refactoring
This commit refactors vast parts of the sqlitetypes.h interface. Its
main goals are: less code, easier code, a more modern interface, reduced
likelihood for strange errors and more flexibility for future
extensions.

The main reason why the sqlitetypes.h functions were working so well in
DB4S was not because they were that stable but because they were
extremely interlinked with the rest of the code. This is fine because we
do not plan to ship them as a separate library. But it makes it hard to
find the obvious spot to fix an issue or to put a new function. It can
always be done in the sqlitetypes function or in the rest of the DB4S
code because it is just not clear what the interface between the two
should look like. This is supposed to be improved by this commit. One
main thing here is to make ownership of objects a bit clearer.

In theory the new code should be faster too but that difference will be
neglectable from a user POV.

This commit also fixes a hidden bug which caused all table constraints
to be removed in the Edit Table dialog when a single field was removed
from the table.

This is all still WIP and more work is needed to be done here.
2018-09-05 22:24:46 +02:00
Martin Kleusberg
f3e6aec57d Load SQLite extensions earlier
In the Preferences dialog we allow the user to configure a list of
SQLite extensions which should be loaded whenever a new database file is
create or an existing database file is loaded. This commit changes the
order of actions after creating or opening a file so that the extensions
are loaded significantly earlier. This way they are already loaded for
most of the time during the process.

This fixes some subtle bugs. One of the more prominent ones was
triggered when there is a view which uses some function which is
defined in such an extension. After loading the file, parsing would fail
and you couldn't see the fields of the view. Browsing it would work but
trying to edit the display format crashed the application.
2018-09-04 22:06:12 +02:00
mgrojo
60195c78ed New shortcut key for copying cell value from above
Ctrl+' is used by spreadsheets for copying formula/value from the cell
above.

Our shortcut copies the value inside the inline editor when it is text.
That mimics the behaviour of LibreOffice Calc. For binary data that cannot
be edited inline, the BLOB is just copied from the above cell to the
current one.

See discussion in PR #1516.
2018-09-02 22:05:12 +02:00
Martin Kleusberg
effb4e0ac6 Fix typo
Thanks to @mgrojo for spotting this before any user or any translator
could see it.
2018-08-28 23:07:00 +02:00
Martin Kleusberg
4a3273b359 Add some PRAGMA which are only connection persistent to the project file
The temp_store, wal_autocheckpoint and synchronous PRAGMAs are only
stored for the current database connection but not saved in the database
file. So to fully restore the working environment after closing a
database, this commit adds these three PRAGMAs to the project file
format.

See issue #1518.
2018-08-28 21:45:43 +02:00
Martin Kleusberg
b94e988e2e Run VACUUM after changing the auto_vacuum PRAMGA
Changing the auto_vacuum PRAGMA requires us to run VACUUM most of the
time. So to be safe we just do that for every change to the PRAGMA now.

See issue #1518.
2018-08-28 21:33:28 +02:00
Martin Kleusberg
049d4ba76f Fix foreign key check after editing a table
After editing a table we perform a foreign key check to see if the
modifications caused any problems. This check doesn't seem to work
because it expected that in case of a problem the PRAGMA would fail.
This however isn't the case - it just doesn't return any results but it
doesn't fail. This commit fixes the check and only shows rolls back if
the PRAGMA returned any data.
2018-08-28 21:17:14 +02:00
Martin Kleusberg
406734a2c9 Defer foreign keys during SQL import
When importing an SQL file, defer foreign keys until the import is
finished. This is necessary if there are foreign key constraints in the
imported table and the order of the INSERT statements doesn't match the
hierarchy of the constraints.

Also perform an integrity check at the end of the import.

See issue #1519.
2018-08-28 21:14:09 +02:00
Martin Kleusberg
ee736eb2dd Show better error messages when executing SQL scripts
This commit fixed wrong error messages in the code we use whenever
multiple SQL statements are executed at once programmatically, most
noticeably in the SQL import. In the case of an error we would first
clean up and rollback and only then recover the error message which
usually would be lost by then. With the changes in this commit the first
thing we do is to recover the error message and only then clean up.

See issue #1519.
2018-08-27 22:36:02 +02:00
mgrojo
14106de34c Issue #1511: failed deletion in the DB still deletes the rows from model
If the deletion of a record is rejected by the SQLite3, for example, due to
the presence of Foreign Key constraints, the corresponding rows must not
be deleted from the model.
2018-08-27 21:47:09 +02:00
Manuel
ce032d95e6 Issue #530: constraints on table prevents new record being added (#1477)
* Issue #530: constraints on table prevents new record being added

This adds a new dialog for adding records to a table. The current approach
is broken for several cases where foreign keys and check constraints are
impeding the insertion of an empty record. With the dialog, the user can
inspect the constraints (tooltip) and type of fields and add values
consistent with the requirements. The data is only inserted when the user
presses the Save button.

The dialog is modelled after the Edit Table or Edit Index dialog. An upper
frame allows entering the data using widgets. The lower frame previews the
SQL statement that will be used.

The old approach for adding records is still accessible pressing Tab on
the last cell of the table.

* Fix build problem introduced in previous commit on this branch

* Dialog as fallback for failure after empty row insertion and read only text

The insertion of an empty row is always tried. When it fails due to
constraints and foreign keys, the Add Record Dialog is open so the user
can enter values for the new record considering the constraints.

When the table has not constraints, or the row insertion provides valid
values, the user is still able to insert rows using the simple approach.

SQL preview in dialog is now read-only.

* Visual improvements for the Add Record dialog

QLineEdit as item delegate for the value, so it is more visible that we
are supposed to edit the value.

Remove last end-of-line in tool-tip.

* Improvements in the "Add Record" dialog

Display of NULL values using DisplayRole (no focus) or place holder text
(when focus).

Set value to NULL through a context menu and shortcut in the value line
edit.

Take text type affinity into account for quoting or not entered numbers.
New isType and affinity functions in sqlitetypes.

Clarify wording of constraints in tooltip for value. Added the same tooltip
for the type.

Escape quotes inside string values.

Removed unused parameters warnings.

Other wording or code improvements based on the pull-request review: #1477.

* User access to the Add Record dialog

The Add Record dialog is now accessible for the user. The New Record button
is converted to a QToolButton and a new pop-up menu is added to it for
invoking the in-line table insertion (New Record) or the Add Record dialog
(Insert Values...). What's This information for the button updated.
2018-08-27 21:35:09 +02:00
Martin Kleusberg
d5a049062d Fix crash when browsing a view
This was introduced by 2b6153d9b8.
2018-08-21 20:28:58 +02:00
seigneurfuo
b7dbfc84c9 Add French translation to .desktop 2018-08-20 12:18:03 +01:00