diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md new file mode 100644 index 0000000000..4d054a0f2e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Bug_report.md @@ -0,0 +1,38 @@ +--- +name: Report a bug +about: Instructions on how to report pgModeler bugs. Before report any bug please + check if someone already has submited issues similiar to yours. Duplicated issues + will be ignored. + +--- + +**Bug description** +_A clear and concise description of what the bug is._ + +**How to reproduce** +_Please, if the bug can be reproduceable describe the steps in full details. If possible provide a sample model and/or a SQL dump for test purposes._ + +**Expected behavior** +_A clear and concise description of what you expected to happen._ + +**Screenshots** +_If applicable, add screenshots to help explain your problem._ + +**Info about your desktop** + - OS: + - Version: + - Window manager: + - pgModeler version: + - Qt version: + +**Stacktrace / Debug info** +_If pgModeler crashed after the bug raised attach the stacktrace below_ + +``` + + Put the stacktrace here! + +``` + +**Additional info** +_Add any other information that you may find useful to help in the problem solving._ diff --git a/.github/ISSUE_TEMPLATE/Custom.md b/.github/ISSUE_TEMPLATE/Custom.md new file mode 100644 index 0000000000..219c04f5c1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Custom.md @@ -0,0 +1,8 @@ +--- +name: General discussion +about: For any discussion not related to bugs or feature requests please use this + one. + +--- + + diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md new file mode 100644 index 0000000000..f3ad5eb15b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Feature_request.md @@ -0,0 +1,14 @@ +--- +name: Feature request / improvement +about: Give your suggestions for improvements to this project. + +--- + +**Feature description** +_A clear and concise description of what the problem is._ + +**Sample image** +_If the feature requested is a visual improvement, please, attach some images to make it clear._ + +**Additional info** +_Add any other context or screenshots about the feature request here._ diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ac057b6c7..75bb042df6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,107 @@ Change Log --------- +v0.9.2-alpha +------ +Release date: August 20, 2018
+ +* [New] Added the support to cancelling SQL execution in SQLExecutionWidget. +* [New] Added support to save/restore the dialogs sizes and positions. +* [New] Added support to truncate tables in DataManipulationForm. +* [New] Added support to aliases on some graphical objects that is used in the compact view mode. +* [New] Added support to save/load object's metadata containing aliases information. +* [New] Added support to compact view of the model where graphical objects can have a more friendly name for a reduced view as well for those who don't need to see details about tables (clients of the business, for instance). +* [New] Added support to sequence options for identity columns. +* [New] Added the ability to paste CSV text from clipboard into the TableDataWidget. +* [New] Added support to bulk data edit in TableDataWidget. +* [Change] Added missing copy options on copy relationships. +* [Change] Minor adjustments on the item delegates in order draw text in the right alignment. +* [Change] Minor adjustment on buttons style in DatabaseExplorerWidget, DataManipulationForm and SQLExecutionWidget. +* [Change] Minor adjustment on OperationList::removeFromPool to avoid throw an exception when an invalid index is passed. +* [Change] Changed the behaviour of the fade in/out of relationships linked to a table by applying the effect on the other tables that are related to the selected one. +* [Change] Refactored the view editing dialog by moving the references handling form to a dedicated modal dialog. +* [Change] Improved the model loading from file by blocking signals of relationships avoiding excessive/repetive rendering of objects. The whole model is fully rendered when the file was completely loaded. +* [Change] Minor adjustment on constraints rendering at extended attributes section of tables. +* [Change] French translation update. +* [Change] Updated the other lang dictionaries with the new text brought by new releases. +* [Change] Removing icons at the top of the dialogs: DatabaseImportForm, MetaDataHandlingForm, ModelDatabaseDiffForm, ModelExportForm, ModelFixForm. +* [Change] Minor adjustments in the features of the demo version. +* [Change] Minor adjustments in the UI stylesheet. +* [Change] In DatabaseExplorerWidget the root item will come automatically selcted when browsing a database. +* [Change] Minor performance tuning when handling big models. +* [Change] Added some statistics attributes for tables on DatabaseExplorerWidget. +* [Change] Minor adjustment in NewObjectOverlayWidget by putting the tool buttons under categories. +* [Fix] Fixed a bug in ObjectFinderWidget that was forcing schemas rectangles to appear even if the flag indicating them to be visible was set to false. +* [Fix] Fixed the editing form cancel operation. Now operations done when the form was active are undone correctly. +* [Fix] Fixed a bug that was preventing to create a view containing the same name as a table but in different schema. +* [Fix] Fixed a regression that caused notices not to be shown in the output panel at SQLExecutionWidget. +* [Fix] Fixed the query catalog for policies which was causing syntax error when combining import system objects and extension objects options. +* [Fix] Fixed the disabling of some actions related to design when switching to manage view. +* [Fix] Minor fix on stylesheet in order to display the extended button on general toolbar. +* [Fix] Fix a shortcut conflict in DataManipulationform. +* [Fix] Fixed the offset of strings composing the StorageType. +* [Fix] Minor form size adjustments. +* [Fix] Minor fix in sqlexecutionwidget.ui to force the exhibition of grid headers +* [Fix] Minor fix in SQLExecutionWidget allowing the output widget to be resized to a size lower than the default one. +* [Fix] Fixed the tab order in PolicyWidget. +* [Fix] Fixed the generation of Database object source in DatabaseExplorerWidget. +* [Fix] Fixed the method BaseObjectWidget::setRequiredField to make object selector fields as required correctly. +* [Fix] Minor fix in HintTextWidget to stay on top of all widget when being displayed. +* [Fix] Fixed a bug that was not quoting extension name when needed. +* [Fix] Fixed a crash when trying to remove a fk relationship when it was created from a foreign key which references protected columns (added by relationship). +* [Fix] Fix a crash when importing CSV files into DataManipulationForm. +* [Fix] Minor typo in TableDataWidget. +* [Fix] Minor fix on schema file sql/table.sch. + +v0.9.1 +------ +Release date: May 14, 2018
+ +* [New] Added support to line selection by clicking and moving the mouse over the line numbers widget in any source code field. +* [New] The validator now checks if the model has columns referencing spatial data types and creates the postgis extension automatically when fixing the model. +* [New] Added support to RESTART IDENTITY on truncate tables in DatabaseExplorerWidget. +* [New] Added an custom option checkbox in Messagebox for general purpose usage. +* [New] Added support to diff operation in CLI. +* [New] Added support to import database from CLI. +* [New] Adding missing types regrole and regnamespace. +* [Change] Improved the copy/duplicate operation in order to copy rules, index, trigger and policies together to their parents. +* [Change] Added column names to the code completion widget used in the filter widget at DataManipulationForm. +* [Change] Improved the SQLExecutionWidget in such way that it'll display large amount of data more quickly and consuming less memory. +* [Change] Minor improvement in SQLExecutionWidget to show the amount of time took to run a query. +* [Change] Minor improvement in the text find widgets in SQL tool in order to make them closable via dedicated button. +* [Change] Improved the set tag operation in ModelWidget in order to cleanup the assigned tags to a set of objects. +* [Change] Minor improvement on DatabaseExplorerWidget to show the rls attributes labels correctly in the attributes grid. +* [Change] Refactored all the CLI options. +* [Change] Minor change in Connection::generateConnectionString in order to put the dbname param in the start of the string. +* [Change] Improved the performance of the row duplication action in DataManipulationForm. +* [Change] Minor improvement in order to update the schemas boxes when the tables have their extended attributes box toggled. +* [Change] Improved the performance of "Move to schema" operation. +* [Change] Added an busy cursor while closing a model. +* [Change] Improved the object selection in object finder. +* [Change] Changed the behaviour of select and fade buttons in ObjectFinderWidget in such way to enable the user to select/fade the objects in the listing (or not included in the results). +* [Fix] Fixed a bug when import identity columns in certain cases when the identity column was followed by another column which data type was not accepted for identity, e.g, text after smallint. +* [Fix] Fixed the check boxes disabling when dealing with identifier relationships. +* [Fix] Disabled the drag & drop for items in the side listing at ConfigurationForm. +* [Fix] Fixed the tab behavior on comment box in all editing forms of database objects. +* [Fix] Fixed the catalog query for user defined types. +* [Fix] Fixed the import of user defined types which names contains uppercase characters. +* [Fix] Minor typo fixes in CLI. +* [Fix] Fix window scaling on HiDPI/Retina screens. +* [Fix] Minor fix in Connection::getConnectionId in order to omit port when that parameter is not configured in the connection. +* [Fix] Fixed a bug in ModelExportHelper that was failing to remane the database when the command appeared. +* [Fix] Fixed a bug in CollationWidget that was referencing the collation attributes LC_??? using the wrong constant. +* [Fix] Fixed the behaviour of the message box that warns about the need of validate the model prior to export, save or diff. Now rejecting the dialog (i.e. closing it) will be considered that the user wants to proceed with the pending operation even with an invalid model. +* [Fix] Fixed the import of comments for constraints,triggers, index and rules. +* [Fix] The value input in BulkDataEditWidget will be focused as soon as the widget appears. +* [Fix] Fixed a bug in the aggregate import process. +* [Fix] Minor fix in DataManipulationForm to avoid the generation of a where clause when the filter is filled only with spaces. +* [Fix] Minor fix in the magnfier tool to use the same render hints as the canvas viewport. +* [Fix] Fixed a bug in the diff process that was trying to recreate the whole database when the "Force recreation" option was set. +* [Fix] Fixed a bug when showing the source of tables in DatabaseExplorerWidget when these objects have permissions assigned. +* [Fix] Adjusting tables position when the parent schema is moved and the alignment to grid is enabled. +* [Fix] Minor fix in the CLI menu. +* [Fix] Fixed the saving process for large models by stopping the threads related to temp models saving while the model file is being written. + v0.9.1-beta1 ------ Release date: April 6, 2018
diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 3840d69f48..0563e2773d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,50 +1,40 @@ -v0.9.1-beta1 +v0.9.2-alpha ------ -Release date: April 6, 2018
-Changes since: v0.9.1-beta
- -Summary: finally we've reached the last beta release of the 0.9.1! This time pgModeler brings important fixes and new features requested long ago which are finally implemented in experimental stage.
- -The first new feature we have in this release is the support to multiples relationships for the same pair of tables. In previous versions, pgModeler would refuse to create a second relationship between the tables A and B. From now on, pgModeler will accept the creation of one-to-many and many-to-many relationships linking A and B more then once. For the other kinds of relationships (generalization, copy, one-to-one) the old rule is still valid: only one relationship per table pair is accepted.
- -Some missing features of PostgreSQL are present in this version too being them: row level security (RLS) and identity columns. For RLS, introduced in PostgreSQL 9.5, we have added the related options to toggle it in tables (ENABLE|FORCE RLS) as well the support to policy objects which are the main part of this new security modality. The identity columns, introduced in PostgreSQL 10, are now fully supported by pgModeler and you can make use of them from the column editing form.
- -Other new feature is the support to multiple check constraints by domains. Actually, this is more a patch than a new feature because pgModeler was unaware that domains could support more than one check constraint, so we have fixed that now.
- -Now, talking about changes, we fixed an old missinterpretation of the PostgreSQL's documentations by changing the way extensions are stored in the database model. Previously, this kind of objects were stored at schemas level but the right way to store them is at database level. So now instead of seeing extensions in the schema's subtree you'll see them in the database subtree. All validation rules, export, import and diff processes were fixed in such way to reflect the right way to treat these objects.
- -Another important change, and that one is related to an annoying behaviour of the tool, is that pgModeler will silently ignore the absence of the plugins folder and proceed with the normal startup avoiding the display of a message box regarding the missing folder and automatically disabling the plugins search mechanism.
- -In the fixes section, we've included a patch for a bug that was causing recurrent crashes on macOS when the user tried to load a second model file making almost impossible the working on two or more database models at once. Also, we've patched the reverse engineering in such way to avoid the duplication of data types related to tables, sequences and views which was causing problems in the validation process. Another fix was done in the diff process that was generating a malformed DROP command for extensions.
- -The set of changes of this release has 47 entries between new features, changes, improvements and bug fixes. Below we highlight some of them, for the complete list, please, consider reading the CHANGELOG.md.
- -* [New] Added the ability to create multiples one-to-many and many-to-many relatationships between the same pair of tables. -* [New] Added the ability to use more special ascii chars in the middle of object names. -* [New] Added support to multi line comments in UI. -* [New] Added full support to row level security (RLS), including export, import and diff of this kind of object. -* [New] Added support to bulk data editing in DataManipulationForm. -* [New] Added an option to diff process to force the generation of DROP commands for columns and constraints even if the missing objects need to be preserved. This is useful to work with partial models and the user need to remove columns/constraints and preserve the rest of objects. -* [New] Added support to identity columns (PostgreSQL 10). -* [New] Added the support to BYPASSRLS option on roles. -* [New] Added support to IS_TEMPLATE and ALLOW_CONNECTIONS options in database object. -* [New] Added the procedures to fix old style domains in CLI. -* [New] Added support to multiple check constraint in domains. -* [New] Added support to sort items alphabetically (ascending) or by oid in DatabaseExplorerWidget. -* [Change] Changed the input mode of the password field in ConnectionsConfigWidget in order to hide the passwords in the form. NOTE: the passwords are still in plain text in the config file. -* [Change] Moved extensions from schema level to database level in order to reproduce better the PostgreSQL's behavior. -* [Change] In GeneralConfigWidget when restoring default settings the default settings for syntax highlight are restored as well. -* [Change] pgModeler will not try to create the plugins path anymore. This will avoid constant error messages during startup. Now, it'll silently ignore the absence of that folder and skip the plugin loading. -* [Change] Improved the source editing in external application. The use is informed about the app running state and the contents for the source editor field are locked until the user closes the external app. -* [Fix] Fixed the query catalog for built-in types to include the types related to domains. -* [Fix] Fixed the extension creation, allowing only one instance of the named extension per database no matter the schema used to allocate its children objects. -* [Fix] Fixed a bug when dropping Functions in DatabaseExplorerWidget. -* [Fix] Fixed a bug that was causing the disabling of connections for database models created prior to 0.9.1-beta1. -* [Fix] Fixed a bug on import process that was wrongly creating types derivated from tables/sequence/views causing duplication problems during validation. -* [Fix] Fixed a crash on macOs when opening a second model. -* [Fix] Fixed an issue in diff process that was generating a malformed DROP command for extensions. -* [Fix] Fixed the diff for domains which contain multiple check constraints. -* [Fix] Fixed a bug that was not selecting the correct spatial type in the widget. -* [Fix] Fixed a conflict of shortcuts in DatabaseExplorerWidget. Now F5 updates a leaf/subtree and Alt+F5 performs quick refresh of the tree. -* [Fix] Fixed a problem with sqlexecutionwidget.ui that is not building properly in Qt 5.10. +Release date: August 20, 2018
+Changes since: v0.9.1
+ +Summary: this release does not have an extensive change log but brings some long desired features as well important fixes. The first feature to talk about is the long awaited SQL execution cancelling which enables the user to abort the execution of any command issued to the server in the SQL execution field (Manage view) without the need to kill the application in order to interrupt the running SQL (like on previous releases).
+ +Another feature introduced is the compact view of the model. This one makes the tables and views smaller by hiding the columns' data types and other informations. This feature came as a support to those developers who need to present their models to an audience without database specific knowledge. The trick here is to replace the original names of graphical objects by more friendly ones so the audience can understand the essence of the model being worked without worry about the tech details.
+ +Also I decided to include a functionality to save and restore the majority of dialogs sizes and their positions, another long requested feature. This one can be useful for those who don't want pgModeler to resize the forms automatically everytime (specially when working in high resolution screens or dual monitors environments). This feature comes activated by default on new installations and can be deactivated at general settings.
+ +More features were implemented in this release too, being some of them: the support to sequence options on indentity columns, the support to bulk data edition on data manipulation dialog, the support to paste CSV text from clipboard into the dialog where initial data can be specified for tables (in design view) and some other.
+ +One important change done was a partial refactoring of the View editing form by moving the fields related to view's references to a dedicated dialog making the whole form a bit less complicated to use. I have plans to keep improving that dialog in special but in future releases a full UX/UI remodeling will be done in the application.
+ +Below some of the changes of this release, for the complete list of changes, please, take a look into the CHANGELOG.md.
+ +* [New] Added the support to cancelling SQL execution in SQLExecutionWidget. +* [New] Added support to save/restore the dialogs sizes and positions. +* [New] Added support to truncate tables in DataManipulationForm. +* [New] Added support to aliases on some graphical objects to be is used in the compact view mode. +* [New] Added support to save/load object's metadata containing aliases information. +* [New] Added support to compact view of the model where graphical objects can have a more friendly name for a reduced view as well for those who don't need to see details about tables (clients of the business, for instance). +* [New] Added support to sequence options for identity columns. +* [New] Added the ability to paste CSV text from clipboard into the TableDataWidget. +* [New] Added support to bulk data edit in TableDataWidget. +* [Change] Changed the behaviour of the fade in/out of relationships linked to a table by applying the effect on the other tables that are related to the selected one. +* [Change] Refactored the view editing dialog by moving the references handling form to a dedicated modal dialog. +* [Change] Improved the model loading from file by blocking signals of relationships avoiding excessive/repetive rendering of objects. The whole model is fully rendered when the file was completely loaded. +* [Change] Minor adjustment on constraints rendering at extended attributes section of tables. +* [Fix] Minor fix on stylesheet in order to display the extended button on general toolbar. +* [Fix] Fix a shortcut conflict in DataManipulationform. +* [Fix] Fixed the offset of strings composing the StorageType. +* [Fix] Minor fix in SQLExecutionWidget allowing the output widget to be resized to a size lower than the default one. +* [Fix] Fixed the generation of Database object source in DatabaseExplorerWidget. +* [Fix] Minor fix in HintTextWidget to stay on top of all widget when being displayed. +* [Fix] Fixed a bug that was not quoting extension name when needed. +* [Fix] Fixed a crash when trying to remove a fk relationship when it was created from a foreign key which references protected columns (added by relationship). +* [Fix] Fix a crash when importing CSV files into DataManipulationForm. diff --git a/conf/defaults/objects-style.conf b/conf/defaults/objects-style.conf index 79480a3415..5cc006fef7 100644 --- a/conf/defaults/objects-style.conf +++ b/conf/defaults/objects-style.conf @@ -19,6 +19,7 @@ + @@ -51,6 +52,7 @@ + diff --git a/conf/defaults/pgmodeler.conf b/conf/defaults/pgmodeler.conf index 0d280ddfa2..f26210ece4 100644 --- a/conf/defaults/pgmodeler.conf +++ b/conf/defaults/pgmodeler.conf @@ -38,7 +38,8 @@ min-object-opacity="10" history-max-length="1000" use-curved-lines="true" - max-result-rows="20000"/> + compact-view="false" + save-restore-geometry="true"/> diff --git a/conf/defaults/sql-highlight.conf b/conf/defaults/sql-highlight.conf index b02abf0314..076b77692d 100644 --- a/conf/defaults/sql-highlight.conf +++ b/conf/defaults/sql-highlight.conf @@ -9,7 +9,7 @@ --> - + @@ -17,7 +17,6 @@ - @@ -85,19 +84,13 @@ - + - - - - + @@ -123,6 +116,7 @@ + @@ -146,6 +140,7 @@ + @@ -185,6 +180,7 @@ + @@ -198,6 +194,8 @@ + + @@ -339,6 +337,7 @@ + @@ -351,6 +350,8 @@ + + @@ -374,6 +375,7 @@ + @@ -382,6 +384,7 @@ + @@ -389,6 +392,7 @@ + QWidget } BaseForm, MessageBox, ConfigurationForm, ModelExportForm, ModelDatabaseDiffForm, DatabaseImportForm { - /*background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F6F5F4, stop: 1 #E0DFDE);*/ padding-bottom: 2px; } @@ -34,12 +33,14 @@ UpdateNotifierWidget > QFrame } AboutWidget > QFrame > QLabel#title_lbl, -AboutWidget > QFrame > QLabel#slogan_lbl, AboutWidget > QFrame > QLabel#about_lbl, -AboutWidget > QFrame > QLabel#pgmodeler_ver_lbl, AboutWidget > QFrame > QLabel#build_lbl, AboutWidget > QFrame > QLabel#copyright_lbl { - color: #000; + color: #000; +} + +AboutWidget > QFrame > QLabel#pgmodeler_ver_lbl { + color: #4C7DD0; } DonateWidget > QFrame > QLabel#title_lbl, @@ -75,16 +76,15 @@ NewObjectOverlayWidget > QFrame { border-radius: 6px } -NewObjectOverlayWidget > QFrame > QWidget > QToolButton +NewObjectOverlayWidget > QFrame > QGroupBox > QWidget > QToolButton { color: #000; font-style: italic; - /*font-size: 8pt;*/ border-radius: 6px; min-width: 110px } -NewObjectOverlayWidget > QFrame > QWidget > QToolButton:hover +NewObjectOverlayWidget > QFrame > QGroupBox > QWidget > QToolButton:hover { font-weight: bold; background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #80e0e0e0 , stop: 1 #80ffffff); @@ -93,7 +93,7 @@ NewObjectOverlayWidget > QFrame > QWidget > QToolButton:hover } -NewObjectOverlayWidget > QFrame > QWidget > QToolButton:pressed +NewObjectOverlayWidget > QFrame > QGroupBox > QWidget > QToolButton:pressed { background-color: #80023d86; border: 1px solid #012149; @@ -155,10 +155,6 @@ QToolBar#control_tb > QToolButton::menu-indicator border: transparent; } -QHeaderView { - /*font-size: 8pt;*/ -} - WelcomeWidget > QToolButton { border: transparent; @@ -178,16 +174,37 @@ WelcomeWidget > QToolButton::menu-indicator QToolBar#general_tb > QToolButton { - /*font-size: 7.5pt;*/ - font-weight: bold; color: #f0f0f0; min-width: 65px; - margin-bottom: 8px; - margin-left: 0; - margin-right: 0; + margin-bottom: 2px; + margin-top: 2px; + margin-left: 3px; + margin-right: 3px; +} + +QToolBar#general_tb +{ + border-right: 1px solid #202020; +} + +QToolBar#general_tb::separator +{ + background-color: #80404040; + border-top: 1px solid #202020; + border-left: 1px solid #202020; + border-right: 1px solid #606060; + border-bottom: 1px solid #606060; + height: 1px; +} + +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button +{ + min-height: 20px; } -QToolBar#general_tb > QToolButton:hover, WelcomeWidget > QToolButton:hover +QToolBar#general_tb > QToolButton:hover, +WelcomeWidget > QToolButton:hover, +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button { color: #fff; background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #80606060 , stop: 1 #80A0A0A0); @@ -197,21 +214,25 @@ QToolBar#general_tb > QToolButton:hover, WelcomeWidget > QToolButton:hover border-bottom: 1px solid #606060; } -QToolBar#general_tb > QToolButton:pressed, WelcomeWidget > QToolButton:pressed, QToolBar#general_tb > QToolButton:checked +QToolBar#general_tb > QToolButton:checked, +QToolBar#general_tb > QToolButton:pressed, +WelcomeWidget > QToolButton:pressed, +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button:hover, +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button:pressed { - background-image: url(":/styles/styles/btn_checked_bg.png"); - border-right: 1px solid #404040; - border-bottom: 1px solid #404040; - border-left: 1px solid #404040; - border-top: 1px solid #404040; - padding: 0; - color: #000 + color: #fff; + background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #804aa5ff , stop: 1 #8081cdff); + border-top: 1px solid qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #48a5fc , stop: 1 #3a86cc); + border-left: 1px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #48a5fc , stop: 1 #3a86cc); + border-right: 1px solid #3a86cc; + border-bottom: 1px solid #3a86cc; } WelcomeWidget > QToolButton:disabled { color: #404040; } + QToolBar#general_tb > QToolButton:disabled { color: #808080; @@ -321,67 +342,7 @@ QToolBar#update_tb::separator { margin-right: 2px; } - -/* QWidget#tool_btns_bar_wgt { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FFFFFF , stop: 1 #E6E6E6); - border-top: 1px solid #808080; - border-right: 1px solid #808080; - border-bottom: 1px solid #808080; - margin: 0; -} */ - -/* QWidget#tool_btns_bar_wgt > QPushButton { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F1F1, stop: 1 #A1A1A1); - margin-top: 5px; - margin-bottom: 5px; - padding: 2px; - padding-left: 5px; - padding-right: 5px; - border: 1px solid #a0a0a0; - border-radius: 2px; - font-size: 8pt; - color: #000; -} */ - -/*QWidget#tool_btns_bar_wgt > QPushButton:hover { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #1E65AB, stop: 1 #257BD1); - border: 1px solid #175089; - color: #FFFFFF; -} */ - -/*QWidget#tool_btns_bar_wgt > QPushButton#validation_btn { - margin-left: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#find_obj_btn { - margin-left: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#sql_tool_btn { - margin-left: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#objects_btn{ - margin-right: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#operations_btn{ - margin-right: 5px; -} */ - -/*QWidget#tool_btns_bar_wgt > QPushButton:checked { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #606060, stop: 1 #A0A0A0); - border-color: #808080; - color: #000; -} - -QWidget#tool_btns_bar_wgt > QPushButton:checked:hover { - color: #ffffff; -} */ - QTabWidget#models_tbw::pane { - /*background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #FFFFFF , stop: 1 #E6E6E6);*/ - /*border-bottom: 1px solid #d0d0d0;*/ border-top: transparent; } @@ -403,7 +364,6 @@ QTabWidget#models_tbw > QTabBar::close-button:hover { QTabWidget#models_tbw > QTabBar::tab { border: 1px solid #C4C4C4; text-align: center; - /*font-size: 8.5pt;*/ min-height: 30px; min-width: 50px; padding-left: 5; @@ -436,23 +396,8 @@ QTabWidget#models_tbw > QTabBar::tab:selected { margin-top: 0px; } -/*QSplitter#h_splitter::handle { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0); -} */ - -/*QSplitter#h_splitter_opr_objs::handle { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0); - border-left: 1px solid #404040; -}*/ - -/*QSplitter#v_splitter::handle, QSplitter#v_splitter1::handle,QSplitter#v_splitter2::handle { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0); -} */ - SQLToolWidget > QWidget#bg_frame { - /*background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0);*/ - /*border-bottom: 1px solid #d0d0d0; - border-top: transparent;*/ + } /* Floating hint widget member of HintTextWidget */ @@ -471,7 +416,6 @@ HintTextWidget > QWidget HintTextWidget > QWidget > QLabel { color: #0000c0; - /*font-size: 8pt;*/ } QTabWidget#databases_tbw > QTabBar::close-button { @@ -503,3 +447,8 @@ QTabWidget#sql_exec_tbw > QTabBar::close-button:hover { height: 16px; image: url(':/styles/styles/close_tab_hover.png'); } + +QWidget#menu_title_wgt { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffffff , stop: 1 #E6E6E6); + border: 1px solid #c0a0a0a0; +} diff --git a/conf/dtd/objects-style.dtd b/conf/dtd/objects-style.dtd index 52e2f8d93e..0f913cbfda 100644 --- a/conf/dtd/objects-style.dtd +++ b/conf/dtd/objects-style.dtd @@ -15,7 +15,7 @@ + constraints|object-type|ref-table|ref-column|alias|pos-info|tag|policy) "table-name"> @@ -23,4 +23,4 @@ + pos-info|tag|placeholder|policy) "table-title"> diff --git a/conf/dtd/pgmodeler.dtd b/conf/dtd/pgmodeler.dtd index cdea216667..3f1b0ead91 100644 --- a/conf/dtd/pgmodeler.dtd +++ b/conf/dtd/pgmodeler.dtd @@ -2,7 +2,7 @@ CAUTION: Do not modify this file directly on it's code unless you know what you are doing. Unexpected results may occur if the code is changed deliberately. --> - + @@ -44,18 +44,20 @@ - + + + - + @@ -66,5 +68,11 @@ + + + + + + diff --git a/conf/objects-style.conf b/conf/objects-style.conf index 79480a3415..5cc006fef7 100644 --- a/conf/objects-style.conf +++ b/conf/objects-style.conf @@ -19,6 +19,7 @@ + @@ -51,6 +52,7 @@ + diff --git a/conf/pgmodeler.conf b/conf/pgmodeler.conf index 0d280ddfa2..f26210ece4 100644 --- a/conf/pgmodeler.conf +++ b/conf/pgmodeler.conf @@ -38,7 +38,8 @@ min-object-opacity="10" history-max-length="1000" use-curved-lines="true" - max-result-rows="20000"/> + compact-view="false" + save-restore-geometry="true"/> diff --git a/conf/schemas/objects-style.sch b/conf/schemas/objects-style.sch index 51079b3b24..e23da22923 100644 --- a/conf/schemas/objects-style.sch +++ b/conf/schemas/objects-style.sch @@ -21,6 +21,7 @@ [ ] $br [ ] $br [ ] $br +[ ] $br [ ] $br [ ] $br [ ] $br @@ -52,6 +53,7 @@ $br [ ] $br [ ] $br [ ] $br +[ ] $br [ ] $br [ ] $br [ ] $br diff --git a/conf/schemas/pgmodeler.sch b/conf/schemas/pgmodeler.sch index d68dd6ad17..02af5b471e 100644 --- a/conf/schemas/pgmodeler.sch +++ b/conf/schemas/pgmodeler.sch @@ -47,10 +47,8 @@ $sp [ $br %end +%if {widgets-geometry} %then + $sp $br + $sp {widgets-geometry} + $sp $br +%end + $br diff --git a/conf/schemas/widget.sch b/conf/schemas/widget.sch index 95626c56fd..a76f05a063 100644 --- a/conf/schemas/widget.sch +++ b/conf/schemas/widget.sch @@ -20,6 +20,19 @@ $tb [ - + @@ -17,7 +17,6 @@ - @@ -85,19 +84,13 @@ - + - - - - + @@ -123,6 +116,7 @@ + @@ -146,6 +140,7 @@ + @@ -185,6 +180,7 @@ + @@ -198,6 +194,8 @@ + + @@ -339,6 +337,7 @@ + @@ -351,6 +350,8 @@ + + @@ -374,6 +375,7 @@ + @@ -382,6 +384,7 @@ + @@ -389,6 +392,7 @@ + QWidget } BaseForm, MessageBox, ConfigurationForm, ModelExportForm, ModelDatabaseDiffForm, DatabaseImportForm { - /*background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F6F5F4, stop: 1 #E0DFDE);*/ padding-bottom: 2px; } @@ -34,12 +33,14 @@ UpdateNotifierWidget > QFrame } AboutWidget > QFrame > QLabel#title_lbl, -AboutWidget > QFrame > QLabel#slogan_lbl, AboutWidget > QFrame > QLabel#about_lbl, -AboutWidget > QFrame > QLabel#pgmodeler_ver_lbl, AboutWidget > QFrame > QLabel#build_lbl, AboutWidget > QFrame > QLabel#copyright_lbl { - color: #000; + color: #000; +} + +AboutWidget > QFrame > QLabel#pgmodeler_ver_lbl { + color: #4C7DD0; } DonateWidget > QFrame > QLabel#title_lbl, @@ -75,16 +76,15 @@ NewObjectOverlayWidget > QFrame { border-radius: 6px } -NewObjectOverlayWidget > QFrame > QWidget > QToolButton +NewObjectOverlayWidget > QFrame > QGroupBox > QWidget > QToolButton { color: #000; font-style: italic; - /*font-size: 8pt;*/ border-radius: 6px; min-width: 110px } -NewObjectOverlayWidget > QFrame > QWidget > QToolButton:hover +NewObjectOverlayWidget > QFrame > QGroupBox > QWidget > QToolButton:hover { font-weight: bold; background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #80e0e0e0 , stop: 1 #80ffffff); @@ -93,7 +93,7 @@ NewObjectOverlayWidget > QFrame > QWidget > QToolButton:hover } -NewObjectOverlayWidget > QFrame > QWidget > QToolButton:pressed +NewObjectOverlayWidget > QFrame > QGroupBox > QWidget > QToolButton:pressed { background-color: #80023d86; border: 1px solid #012149; @@ -155,10 +155,6 @@ QToolBar#control_tb > QToolButton::menu-indicator border: transparent; } -QHeaderView { - /*font-size: 8pt;*/ -} - WelcomeWidget > QToolButton { border: transparent; @@ -178,16 +174,37 @@ WelcomeWidget > QToolButton::menu-indicator QToolBar#general_tb > QToolButton { - /*font-size: 7.5pt;*/ - font-weight: bold; color: #f0f0f0; min-width: 65px; - margin-bottom: 8px; - margin-left: 0; - margin-right: 0; + margin-bottom: 2px; + margin-top: 2px; + margin-left: 3px; + margin-right: 3px; +} + +QToolBar#general_tb +{ + border-right: 1px solid #202020; +} + +QToolBar#general_tb::separator +{ + background-color: #80404040; + border-top: 1px solid #202020; + border-left: 1px solid #202020; + border-right: 1px solid #606060; + border-bottom: 1px solid #606060; + height: 1px; +} + +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button +{ + min-height: 20px; } -QToolBar#general_tb > QToolButton:hover, WelcomeWidget > QToolButton:hover +QToolBar#general_tb > QToolButton:hover, +WelcomeWidget > QToolButton:hover, +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button { color: #fff; background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #80606060 , stop: 1 #80A0A0A0); @@ -197,21 +214,25 @@ QToolBar#general_tb > QToolButton:hover, WelcomeWidget > QToolButton:hover border-bottom: 1px solid #606060; } -QToolBar#general_tb > QToolButton:pressed, WelcomeWidget > QToolButton:pressed, QToolBar#general_tb > QToolButton:checked +QToolBar#general_tb > QToolButton:checked, +QToolBar#general_tb > QToolButton:pressed, +WelcomeWidget > QToolButton:pressed, +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button:hover, +QToolBar#general_tb > QToolButton#qt_toolbar_ext_button:pressed { - background-image: url(":/styles/styles/btn_checked_bg.png"); - border-right: 1px solid #404040; - border-bottom: 1px solid #404040; - border-left: 1px solid #404040; - border-top: 1px solid #404040; - padding: 0; - color: #000 + color: #fff; + background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #804aa5ff , stop: 1 #8081cdff); + border-top: 1px solid qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #48a5fc , stop: 1 #3a86cc); + border-left: 1px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #48a5fc , stop: 1 #3a86cc); + border-right: 1px solid #3a86cc; + border-bottom: 1px solid #3a86cc; } WelcomeWidget > QToolButton:disabled { color: #404040; } + QToolBar#general_tb > QToolButton:disabled { color: #808080; @@ -321,67 +342,7 @@ QToolBar#update_tb::separator { margin-right: 2px; } - -/* QWidget#tool_btns_bar_wgt { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FFFFFF , stop: 1 #E6E6E6); - border-top: 1px solid #808080; - border-right: 1px solid #808080; - border-bottom: 1px solid #808080; - margin: 0; -} */ - -/* QWidget#tool_btns_bar_wgt > QPushButton { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F1F1, stop: 1 #A1A1A1); - margin-top: 5px; - margin-bottom: 5px; - padding: 2px; - padding-left: 5px; - padding-right: 5px; - border: 1px solid #a0a0a0; - border-radius: 2px; - font-size: 8pt; - color: #000; -} */ - -/*QWidget#tool_btns_bar_wgt > QPushButton:hover { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #1E65AB, stop: 1 #257BD1); - border: 1px solid #175089; - color: #FFFFFF; -} */ - -/*QWidget#tool_btns_bar_wgt > QPushButton#validation_btn { - margin-left: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#find_obj_btn { - margin-left: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#sql_tool_btn { - margin-left: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#objects_btn{ - margin-right: 5px; -} - -QWidget#tool_btns_bar_wgt > QPushButton#operations_btn{ - margin-right: 5px; -} */ - -/*QWidget#tool_btns_bar_wgt > QPushButton:checked { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #606060, stop: 1 #A0A0A0); - border-color: #808080; - color: #000; -} - -QWidget#tool_btns_bar_wgt > QPushButton:checked:hover { - color: #ffffff; -} */ - QTabWidget#models_tbw::pane { - /*background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #FFFFFF , stop: 1 #E6E6E6);*/ - /*border-bottom: 1px solid #d0d0d0;*/ border-top: transparent; } @@ -403,7 +364,6 @@ QTabWidget#models_tbw > QTabBar::close-button:hover { QTabWidget#models_tbw > QTabBar::tab { border: 1px solid #C4C4C4; text-align: center; - /*font-size: 8.5pt;*/ min-height: 30px; min-width: 50px; padding-left: 5; @@ -436,23 +396,8 @@ QTabWidget#models_tbw > QTabBar::tab:selected { margin-top: 0px; } -/*QSplitter#h_splitter::handle { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0); -} */ - -/*QSplitter#h_splitter_opr_objs::handle { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0); - border-left: 1px solid #404040; -}*/ - -/*QSplitter#v_splitter::handle, QSplitter#v_splitter1::handle,QSplitter#v_splitter2::handle { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0); -} */ - SQLToolWidget > QWidget#bg_frame { - /*background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FAFAFA , stop: 1 #E0E0E0);*/ - /*border-bottom: 1px solid #d0d0d0; - border-top: transparent;*/ + } /* Floating hint widget member of HintTextWidget */ @@ -471,7 +416,6 @@ HintTextWidget > QWidget HintTextWidget > QWidget > QLabel { color: #0000c0; - /*font-size: 8pt;*/ } QTabWidget#databases_tbw > QTabBar::close-button { diff --git a/lang/es_ES.qm b/lang/es_ES.qm index 15fab2a28b..782ea80bfc 100644 Binary files a/lang/es_ES.qm and b/lang/es_ES.qm differ diff --git a/lang/es_ES.ts b/lang/es_ES.ts index 2ea09f6e30..dd32426573 100644 --- a/lang/es_ES.ts +++ b/lang/es_ES.ts @@ -9,259 +9,60 @@ Acerca de pgModeler - + + 0.0.0 + 0.0.0 + + + + build: + + + + PostgreSQL Database Modeler Modelador para Bases de Datos PostgreSQL - + Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. Herramienta de modelado de datos de código abierto diseñada para PostgreSQL. ¡No más comandos de DDL escritos a mano, deje a pgModeler hacer el trabajo para usted! Este software reúne los conceptos de diagramas entidad-relación y las características que PostgreSQL implementa como extensiones de estándares SQL. - - Design, configure, deploy - Diseño, configurar, implementar - - - - pgModeler is proudly a brazilian software! - pgModeler es orgullosamente un programa brasileño! + + <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" text-decoration: underline; color:#2980b9;">https://pgmodeler.io</span></a></p></body></html> + - - <a href="http://pgmodeler.com.br">http://pgmodeler.com.br</a> + + <html><head/><body><p>Copyright 2006-2018 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.io</span></a>&gt;</p></body></html> - - <html><head/><body><p>Copyright 2006-2016 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> - <html><head/><body><p>Copyright 2006-2015 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> + + pgModeler is proudly a brazilian software! + pgModeler es orgullosamente un programa brasileño! - + Hide this widget Ocultar este widget - + ... ... - - 0.0.0.0 - 0.0.0.0 - - - - Build: - Contruido: - - - + (BUILD_NUM) (NUM_CONSTRUIDO) - + License Licencia - - - Contributors - Colaboradores - - - - <html><head/><body><p>This page is dedicated to all contributors who gave a bit of their time in make pgModeler a better software somehow. The complete list of people that helped pgModeler can be found at <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>If you have a great idea to improve pgModeler please submit it <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">here</span></a>. No ideas for now but want to help? Why not donate a few bucks <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">here</span></a>!?</p></body></html> - <html><head/><body><p>Esta página está dedicada a todos los colaboradores que dieron un poco de su tiempo en hacer pgModeler un mejor software de alguna manera. La lista completa de las personas que ayudó pgModeler se puede encontrar en <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>Si usted tiene una gran idea para mejorar pgModeler favor enviarlo <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">aquí</span></a>. ¿Sin ideas por ahora, pero quiere ayudar? Por qué no donar un poco de dinero <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">aquí</span></a>!?</p></body></html> - - - - 1 - 1 - - - - 2 - 2 - - - - 3 - 3 - - - - 4 - 4 - - - - 5 - 5 - - - - 6 - 6 - - - - 7 - 7 - - - - 8 - 8 - - - - 9 - 9 - - - - Name - Nombre - - - - Country - País - - - - Contribution - Contribución - - - - Damien Degois - Damien Degois - - - - - - France - Francia - - - - French UI translation and several improvements in auxiliary scripts. - Traducción de IU francés y varias mejoras en scripts auxiliares. - - - - Ji Bin - Ji Bin - - - - China - China - - - - Chinese UI translation and small fixes. - Traducción de IU chino y pequeñas correcciones. - - - - Pierre-Samuel LE STANG - Pierre-Samuel LE STANG - - - - - French UI translation. - Traducción de IU al francés. - - - - Lisandro Damián Nicanor - Lisandro Damián Nicanor - - - - Argentina - Argentina - - - - Improvements on build scripts enabling the custom packaging in Linux distros; Per-user settings; pgModeler's package maintainer in Debian Linux. - Mejoras en scripts de construcción que permitan el embalaje personalizado en distribuciones de Linux; Por usuario ajustes; pgModeler y apos; s mantenedor de paquetes en Debian Linux. - - - - Pavel Alexeev - Pavel Alexeev - - - - Russia - Rusia - - - - Additional work for packaging in Linux distros; pgModeler's package maintainer in Fedora Linux. - El trabajo adicional para el empaquetado en la distribuciones de Linux; pgModeler's empaquetador de paquetes en Fedora Linux. - - - - Mariusz Fik - Mariusz Fik - - - - Poland - Polonia - - - - Custom packaging first ideas. Tester of first version of custom packaging patch. - Empaquetados hechos a medida primeras ideas. Probador de primera versión del parche de empaquetados personalizados. - - - - Jonathan DUPRE - - - - - Gilberto Castillo - - - - - Cuba - - - - - Spanish UI translation. - - - - - -Danúbio Viana Nogueira - - - - - Brazil - - - - - Brazilian Portuguese UI translation. - - AggregateWidget @@ -612,12 +413,12 @@ Danúbio Viana Nogueira Application - + Unknown exception caught! Excepción desconocida capturada! - + Failed to create initial configuration in `%1'! Check if the current user has write permission over that path and at least read permission over `%2'. No se pudo crear la configuración inicial en `%1'! Compruebe si el usuario actual tiene permiso de escritura sobre ese camino y al menos permiso de lectura sobre `%2'. @@ -654,7 +455,7 @@ Danúbio Viana Nogueira &Ok - + %1 properties %1 propiedades @@ -662,172 +463,177 @@ Danúbio Viana Nogueira BaseObject - + Column Columna - + Constraint Restricción - + Function Función - + Trigger Trigger - + Index Índice - + Rule Regla - + Table Tabla - + View Vista - + Domain Domínio - + Schema Esquema - + Aggregate Agregado - + Operator Operador - + Sequence Secuencia - + Role Rol - + Conversion Conversión - + Cast Cast - + Language Lenguaje - + Type Tipo - + Tablespace Tablespace - + Operator Family Família de Operadores - + Operator Class Operador de Clases - + Database Base de Dados - + Collation Colación - + Extension Extensión - + Event Trigger Evento Trigger - + Relationship Relación - + + Policy + + + + Textbox Cuadro de Texto - + Permission Permisos - + Parameter Parámetro - + Type Attribute Tipo atributo - + Tag Tag - + Basic Relationship Relación básica - + Generic SQL - + new_object nuevo_objecto @@ -856,89 +662,89 @@ Danúbio Viana Nogueira Comentario: - + Tablespace: Tablespace: - + Schema: Esquema: - + Edit object's permissions Editar permisos del objeto - + Edit permissions Editar permisos - + This object is protected thus no change in form will be applied to it. - + Disables the generated SQL code using comment tokens (--). This will disable the code of all child and referrer objects. Desactiva el código SQL generado utilizando fichas comentario (-). Esto desactivará el código de todos los objetos secundarios y referenciales. - + Disable SQL code Desactivar Código SQL - + Collation: Colación: - + Append or prepend a set of SQL commands to the object's definition. Anexar o anteponer un conjunto de comandos SQL para la definicióno bjeto's. - + Custom SQL SQL personalizado - + Owner: Propietario: - + ID: ID: - + icone icone - + Required field. Leaving this empty will raise errors! Campo requerido. Dejando este vacío elevará errores! - + Value(s) Valor(es) - + Version Versión - + The <em style='color: %1'><strong>highlighted</strong></em> fields in the form or one of their values are available only on specific PostgreSQL versions. Generating SQL code for versions other than those specified in the fields' tooltips may create incompatible code. Los campos <em style ='color: %1'><strong>resaltados</strong></em> en el formulario o uno de sus valores sólo están disponibles en versiones específicas de PostgreSQL. Generar código SQL para versiones distintas a las especificadas en las sugerencias de los campos puede crear código incompatible. @@ -947,7 +753,7 @@ Esto desactivará el código de todos los objetos secundarios y referenciales. BaseRelationship - + rel_%1_%2 rel_%1_%2 @@ -955,12 +761,12 @@ Esto desactivará el código de todos los objetos secundarios y referenciales. BaseTableView - + Toggles the extended attributes display - + Connected rels: %1 Rels conectados: %1 @@ -1059,6 +865,14 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Seleccione carpeta de destino del informe + + BulkDataEditWidget + + + Bulk data edit + + + CastWidget @@ -1120,12 +934,12 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Hace que el widget se puede cerrar solamente por tecla ESC o clic del ratón sobre otros controles. - + SQL Keyword Palabra clave SQL - + (no items found.) (No se encontraron items.) (No se encontró ninguna.) @@ -1196,17 +1010,32 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Valor por Defecto: - + + Edit the underlying sequence's attributes + + + + + Edit sequence + + + + + Identity: + + + + E&xpression: E&xpresión: - + &NOT NULL - + Se&quence: @@ -1229,37 +1058,37 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Relaciones - + Appearance Apariencia - + Connections Conexiones - + Snippets Snippets - + Plug-ins Plug-ins - + Defaults Valores por Defecto - + &Apply &Aplicar - + &Cancel &Cancelar @@ -1287,22 +1116,22 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Contraseña: - + Connection Alias: Alias de Conexión: - + Connection DB: BD Conexión: - + Host/Port: Host/Puerto: - + User: Usuario: @@ -1312,87 +1141,87 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Timeout: - + SSL Mode: Modo SSL: - + Disable Desactivado - + Diff Diff - + Export Exportar - + Import Importar - + Validation Validación - + Security Seguridad - + Allow Permitir - + Require Requerido - + AC verification Verificación de AC - + Full verification Verificación Completa - + Kerberos Server: Servidor Kerberos: - + Client Certificate: Certificado Cliente: - + Revoked Certs.: Cert. Revocados: - + Client Key: Clave Cliente: - + Root Certificate: Certificado Root: - + ~/.postgresql/root.crt ~/.postgresql/root.crt @@ -1402,17 +1231,17 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Conexiones: - + second(s) segundo(s) - + Force GSSAPI Forzar a GSSAPI - + ~/.postgresql/postgresql.crt ~/.postgresql/postgresql.crt @@ -1432,12 +1261,12 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.Testear - + ~/.postgresql/root.crl ~/.postgresql/root.crl - + ~/.postgresql/postgresql.key ~/.postgresql/postgresql.key @@ -1478,12 +1307,12 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.General - + Other params: Otros parámetros: - + Specify additional connection parameters in the form [param]=[value]. These parameters are described in the <strong>libpq</strong> chapter at PostgreSQL docs. Especifique los parámetros de conexión adicionales en la forma [param]=[valor]. Estos parámetros se describen en el capítulo <strong> libpq </strong> en la documentación de PostgreSQL. @@ -1493,12 +1322,12 @@ Esto desactivará el código de todos los objetos secundarios y referenciales. - + Automatically browses the named database when using this connection to manage databases on <strong>Manage</strong> view. Busca automáticamente la base de datos llamada cuando se utiliza esta conexión para administrar bases de datos en la vista <strong>Manage</strong>. - + Auto browse Auto explorar @@ -1931,51 +1760,46 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT - Type: - Tipo: - - - Generic INSERT INSERT genérico - + Include serial columns Incluir columnas serial - + Exclude serial columns Excluir columnas serial - + Generic SELECT SELECT genérico - + Table SELECT SELECT tabla - + Generic UPDATE - + Table UPDATE UPDATE genérico - + Generic DELETE DELETE genérico - + Table DELETE DELETE tabla @@ -2019,97 +1843,106 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT - Ctrl+X Ctrl+X - + Undo modifications Deshacer modificaciones - + Ctrl+Z Ctrl+Z - - + + Ins Ins - + Mark the selected rows to be deleted Marque las filas seleccionadas para ser borradas - - - - - + + + + + Del Del - + + Change the values of all selected cells at once + + + + + Ctrl+E + Ctrl+E + + + Duplicate the selected rows - + Ctrl+D - + Add new rows from a CSV file - + Filter the result set Filtrar el conjunto de resultados - + Table: Tabla: - + Schema: Esquema: - + in in - + Hide views Ocultar vista - + Filter expression Filtrar expresión - + Order && Limit Order && Límite - + results (Use <strong>0</strong> for no limit) - + Column: Columna: @@ -2139,183 +1972,193 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT - + ASC ASC - + Add empty rows - + DESC DESC - + Limit in: Límite en: - + Add Item Añadir Item - + Remove Item Eliminar Item - + Clear the order by columns list Desactive el orden de lista columnas - + Move selected item up Mover arriba el item seleccionado - + Move selected item down Mover abajo el item seleccionado - + Copy as CSV - + Copy as text - + Copy items - + Pase items - + Browse tables - + Duplicate row(s) - + Delete row(s) - + + Edit cell(s) + + + + <strong>WARNING: </strong> There are some changed rows waiting the commit! Do you really want to discard them and retrieve the data now? - + Rows returned: <strong>%1</strong>&nbsp;&nbsp;&nbsp; - + <em>(Limit: <strong>%1</strong>)</em> <em>(Límite: <strong>%1</strong>)</em> - + none - + + Column + + + + No objects found Objects no encontrado - + Found %1 object(s) Encontrado %1 objecto(s) - + Views can't have their data handled through this grid, this way, all operations are disabled. Las vistas no pueden tener sus datos manejados a través de esta red, de esta manera, todas las operaciones están desactivadas. - + The selected table doesn't owns a primary key! Updates and deletes will be performed by considering all columns as primary key. <strong>WARNING:</strong> those operations can affect more than one row. La tabla seleccionada no posee una clave primaria! Las actualizaciones y eliminaciones se realizarán teniendo en cuenta todas las columnas como clave primaria. <strong>WARNING:</strong> estas operaciones pueden afectar a más de una fila. - + Referenced tables - - + + (none) - + Referrer tables - + This row is marked to be %1 Esta fila se marca para ser %1 - + deleted eliminado - + updated actualizado - + inserted insertado - + [binary data] [datos binarios] - + <strong>WARNING:</strong> Once commited its not possible to undo the changes! Proceed with saving? <strong>WARNING:</strong> Una vez que su cometido no es posible deshacer los cambios! Procedo con salvar? - + delete eliminar - + update actualizar - + insert insertar @@ -2328,112 +2171,104 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT Formulario - - Toggles the display of extension objects - Cambia la visualización de extensión de objetos - - - + + Data &Grid Datos &Cuadrícula - + + Alt+G Alt+G - - - - - + + + + + ... ... - - Toggles the display of system objects. - - - - - System - - - - - Extension - Extensión - - - + Open the grid to visualize or edit data - + Open a new SQL execution pane Abrir un nuevo panel de ejecución de SQL - + Ctrl+F6 Ctrl+F6 - + Update the objects tree Actualizar el árbol de objetos - - Ctrl+S - Ctrl+S + + Toggle the display of filter widget as well the system/extension objects. + + + + + Sort items alphabetically. When unchecked, items are sorted by OID. + - + + Sort alphabetically + + + + Drop this database Eliminar esta base de datos - + Expands all items Expande todos los item - + Collapses all items Contrae todos los item - + Filters the currently loaded items in the tree by using a pattern and matching their names. If <strong>By OID</strong> is checked the pattern is interpreted as an integer value that represents the object id (OID). <br><br/><strong>HINT:</strong> if you need to search the entire database use the full refresh (<strong>Ctrl+F5</strong>) prior the filtering. - + Filter: Filtro: - + By OID Por OID - + Attribute Atributo - + Value Valor - + Show raw attributes @@ -3328,141 +3163,186 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT - - Snippets - Snippets + + Identity + - - Drop object - Drop object + + Command + - - Drop cascade + + USING expr. + + + + + CHECK expr. + + + + + Roles + Roles + + + + RLS enabled + + + + + RLS forced + + + + + Show objects filter + + + + + Show system objects + + + + + Show extension objects + + + + + Snippets + Snippets + + + + Drop object + Drop object + + + + Drop cascade Drop cascade - + Truncate Truncate - + Trunc. cascade Trunc. cascade - + Show data Mostrar dato - + Reload properties Recargar propiedades - + Update Actualizar - + Rename Renombrar - + Source code Código fuente - + Quick refresh - + Full refresh - + -- Source code unavailable for this kind of object -- - + Do you really want to drop the object <strong>%1</strong> <em>(%2)</em>? ¿De verdad quiere borrar el objeto <strong>%1</strong> <em>(%2)</em>? - + Do you really want to <strong>cascade</strong> drop the object <strong>%1</strong> <em>(%2)</em>? This action will drop all the other objects that depends on it. - + + Also restart sequences + + + + Src. table: %1 Src. column(s): %2 - + Ref. table: %1 Ref. column(s): %2 - + -- Source code genaration for buil-in and base types currently unavailable -- - + -- Source code unavailable for the object %1 (%2). -- - - + + Warning Advertencia - + You're running a demonstration version! The data manipulation feature is available only in the full version! Usted está ejecutando una versión de demostración! La función de manipulación de datos sólo está disponible en la versión completa! - + <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? <strong>ATENCION:</strong> Vas a dejar toda la base de datos <strong>%1</strong>! Todos los datos serán completamente eliminados. ¿Realmente desea continuar? - + Do you really want to truncate the table <strong>%1</strong>? ¿De verdad quiere truncar la tabla <strong>%1</strong>? - + Do you really want to <strong>cascade</strong> truncate the table <strong>%1</strong>? This action will truncate all the tables that depends on it? ¿De verdad quieres truncar en <strong>cascade</strong> la tabla <strong>%1</strong>? ¿Esta acción truncar todas las tablas que depende de ella? DatabaseImportForm - - - Database Import - Importar Bases de Datos - - - - Database import - Importar bases de datos - Settings @@ -3479,185 +3359,151 @@ Ref. column(s): %2 Conexión: - - Origin point: - Punto de origen: - - - - Starting point where objects will be put. - Punto inicial donde se colocarán el objetos. - - - - Tables per row: - Tablas por fila: - - - - Tables per row - Tablas por fila - - - - Spacing: - Espaciado: - - - - Spacing between objects - Espaciado entre objeto - - - - Schemas per row: - Esquema por fila: - - - + Automatically resolve dependencies Resolver dependencias automáticamente - - - - + + + + ... ... - + Random colors will be assigned to imported relationships facilitating the identification of links between tables mainly in large models. Colores al azar serán asignados a las relaciones importados que faciliten la identificación de los vínculos entre las tablas, principalmente en modelos de gran tamaño. - - Schemas per row - - - - + Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types, extensions. - + Random colors for relationships Colores aleatorios para las relaciones - + Enables the import of system built-in objects. It's recommend to select only those objects that are directly referenced by the ones to be imported. WARNING: Try to import a huge set of system objects can bloat the resultant model or even crash pgModeler due to memory/cpu overuse. Permite la importación de sistema de objetos integrados. Se recomienda seleccionar sólo aquellos objetos que se hace referencia directamente por las que ser importados. ADVERTENCIA: Trate de importar un enorme conjunto de objetos del sistema puede inflar el modelo resultante o incluso estrellarse pgModeler debido a la memoria / CPU uso excesivo. - + Import system objects Importa objeto del sistema - + Enables the import of objects created by extensions. Generally there is no need to check this option but if there are objects in the database that directly references this category of objects this mode must be enabled. Permite la importación de objetos creados por las extensiones. Generalmente no hay necesidad de revisar esta opción, pero si hay objetos en la base de datos que hace referencia directa a esta categoría de objetos de este modo debe estar habilitado. - + Import extension objects Importar extensiones de objetos - + pgModeler ignores import errors and will try to create as many as possible objects. By checking this option the import operation will be not aborted but an incomplete model will be constructed. This option generates a log file on pgModeler's temp directory. pgModeler ignora los errores de importación y tratará de crear el mayor número posible de objetos. Al marcar esta opción, la operación de importación no se concluye, pero un modelo incompleto se construirá. Esta opción genera un archivo de registro en el directorio temporal de pgModeler. - + Ignore import errors Ignorar errores de importación - + All catalog queries as well the created objects' source code are printed to standard output (stdout). - + + + Import database + + + + Debug mode Modo depurarión - + Create all imported objects in the current working model instead of create a new one. Crear todos los objetos importados en el modelo de trabajo actual en lugar de crear uno nuevo. - + Import objects to the working model Importar objetos al modelo de trabajo - + Database Base de datos - + Filter: Filtrar: - + Filter object by it's OID Filtrar objeto por OID - + By OID Por OID - + Select all objects Seleccionar todos los objetos - + Clear object selection Limpiar los objetos seleccionados - + Expands all items Expandir todos los item - + Collapses all items Contrae todos los item - + Output Salida - + Progress label... Etiqueta de Progreso... - + Cancel Cancelar - + &Import &Importar - + &Close &Cerrar @@ -3667,57 +3513,57 @@ Ref. column(s): %2 <strong>ATENCIÓN:</strong> Estás a punto de importar objetos al modelo actual de trabajo! Esta acción provocará cambios irreversibles a él, incluso en caso de errores críticos durante el proceso. ¿Quieres proceder? - + Importing process aborted! Proceso de Importación abortado! - + Importing process canceled by user! Proceso de Importación cancelado por usuario! - + Importing process sucessfuly ended! Proceso de Importación terminado satisfactoriamente! - + No databases found Base de datos no encontrada - + Found %1 database(s) Encontrada %1 bases de dato(s) - + Retrieving objects from database... Recuperando objetos de base de datos... - + Retrieving cluster level objects... Recuperando objetos a nivel de clúster... - + Retrieving objects of schema `%1'... Recuperando objetos del esquema `%1'... - + Retrieving objects of `%1' (%2)... - + This is a PostgreSQL built-in data type and cannot be imported. Esta es una tipo de datos incorporado PostgreSQL y no se puede importar. - + This is a pgModeler's built-in object. It will be ignored if checked by user. Esta es objeto incorporado del pgModeler. Se ignora si se activa por el usuario. @@ -3776,7 +3622,7 @@ Ref. column(s): %2 - + Assigning sequences to columns... @@ -3786,12 +3632,12 @@ Ref. column(s): %2 La importación de base de datos terminó pero algunos errores se genera y se guarda en el archivo de registro `%1'. Este archivo se prolongará hasta salga de pgModeler. - + Destroying unused detached columns... Destruyendo columnas separadas no utilizados... - + Creating table inheritances... Creación de herencias de tabla... @@ -3799,68 +3645,68 @@ Ref. column(s): %2 DatabaseModel - + The demonstration version can create only `%1' instances of each object type! You've reach this limit for the type: `%2' La versión de demostración sólo puede crear `%1' instancias de cada tipo de objeto! Tienes que llegar a este límite para el tipo: `%2' - + Loading: `%1' (%2) Cargando: `%1' (%2) - - + + Validating relationships... - - Generating %1 of the object `%2' (%3) - Generando %1 del objecto `%2' (%3) + + Generating %1 code: `%2' (%3) + - + Saving object `%1' (%2) - + Saving metadata of the object `%1' (%2) - + Metadata file successfully saved! - + Process successfully ended but no metadata was saved! - + Creating object `%1' (%2) Creando objecto `%1' (%2) - + Object `%1' (%2) already exists. Ignoring. - + Loading metadata for object `%1' (%2) - + Object `%1' (%2) not found. Ignoring metadata. - + Metadata file successfully loaded! @@ -3873,57 +3719,72 @@ Ref. column(s): %2 Atributos - + LC_COLLATE: LC_COLLATE: - + LC_CTYPE: LC_CTYPE: - + Template DB: DB Modelo: - + Model Author: Autor del Modelo: - + Encoding: Codificación: - + Connections: Conexiones: - + + Options: + Opciones: + + + + Allow connections + + + + + Is template + + + + Default Objects Objectos por Defecto - + Tablespace: Tablespace: - + Schema: Esquema: - + Collation: Colación: - + Owner: Propietario: @@ -3940,8 +3801,8 @@ Ref. column(s): %2 - - + + Default Por Defecto @@ -3949,29 +3810,44 @@ Ref. column(s): %2 DomainWidget - + + Attributes + Atributos + + + Default Value: Valor Por Defecto: - - Constraint - Resticción + + Not null + No null + + + + Check constraints + - + + Expression: + Expresión: + + + Name: Nombre: - - Not Null: - No Nulo: + + Name + Nombre - - Check Expr.: - Expr. Chequeo: + + Expression + Expresión @@ -4002,7 +3878,7 @@ Ref. column(s): %2 <html><head/><body><p>pgModeler es traído a usted gracias a un <span style=" font-style:italic;">gran esfuerzo para crear y distribuir un producto de calidad</span>. Este proyecto está alcanzando niveles de madurez nunca imaginados. Todo esto es el resultado de un trabajo conjunto entre su autor y la <span style=" font-weight:600;">comunidad Open Source </span>. <br/><br/>Este software tiene un largo camino por recorrer y con su ayuda seguiremos manteniendo el buen trabajo y trayendo nuevas mejoras en cada versión. Si te gustó pgModeler y cree que merece una contribución, haz una donación!</p></body></html> - + I want to help! ¡Quiero ayudar! @@ -4480,6 +4356,11 @@ Ref. column(s): %2 Unable to write the file `%1' due to one or more errors in the definition generation process! + + + There is already a relationship between `%1' (%2) and `%3' (%4) in the model! When using relationships of the type generalization, copy and one-to-one there can't be other relationships linked to the pair of tables. + + The configuration of the relationship `%1' generates a redundancy between the relationships `%2'. Redundancy on identifier or generalization/copy relationships are not accepted since they result in incorrect column spreading making the model inconsistent! @@ -4615,6 +4496,26 @@ Ref. column(s): %2 Failed to drop the database `%1' because it is defined as the default database for the connection `%2'! + + + The column `%1' must be `NOT NULL' because it composes the primary key of the table `%2'. You need to remove the column from the mentioned contraint in order to disable the `NOT NULL' on it! + + + + + The identity column `%1' has an invalid data type! The data type must be `smallint', `integer' or `bigint'. + + + + + Reference to an invalid affected command in policy `%1'! + + + + + Reference to an invalid special role in policy `%1'! + + Assignment of invalid type to the object! @@ -4805,11 +4706,6 @@ Ref. column(s): %2 Unable to write the file or directory `%1'! Make sure the output directory exists, or if the user has write permissions over it! Imposible escribir en el archivo `%1'! Asegurase de que el diretório existe o si el usuário tiene permisos de aceso al mismo! - - - There is already a relationship between `%1' (%2) and `%3' (%4) in the model! - Ya existe una Relación entre `%1' (%2) y `%3' (%4) en el modelo! - One or more objects were invalidated and automatically removed because they were referencing table columns which were included through relationships and which no longer exists due to disconnection of relationships or exclusion of such generated columns! @@ -5336,37 +5232,47 @@ Mensage retornada por el SGBD: `%1' Formulario - + + Hide this widget + Ocultar este widget + + + + ... + ... + + + Replace one occurrence Reemplazar una ocurrencia - + Replace Reemplazar - + Replace all occurrences Reemplazar todas las ocurrencias - + Replace All Reemplazar todas - + Replace the selection and find the next one Reemplace la selección y buscar la siguiente - + Replace && Find Reemplazar && Buscar - + Replace: Reemplazar: @@ -5434,82 +5340,82 @@ Mensage retornada por el SGBD: `%1' Filas Retornadas: - + Return Method: Método de Retorno: - + Behavior: Comportamiento: - + Set Conjunto - + Language: - + Si&mple - + Tab&le - + Return Table Tabla de retorno - + Execution Cost: Costo ejecución: - + Windown Func. Func. Ventana. - + Leakproof Prueba de fugas - + Parameters Parámetros - + Definition Definición - + Dynamic Library: Biblioteca Dinámica: - + Symbol: Símbolo: - + Library: Biblioteca: - + Source code: Código fuente: @@ -5563,7 +5469,7 @@ Mensage retornada por el SGBD: `%1' Histórico de operaciones: - + Check if there is a new version on server Compruebe si hay una nueva versión en el servidor @@ -5760,62 +5666,62 @@ Mensage retornada por el SGBD: `%1' - + SQL history max. length: - + Souce code editor: - + lines lineas - + Clear the entire SQL comand history. - + Clear history Limpiar historial - + Configurations directory: Directorio de configuraciones: - + Browse the source code editor application Examinar la aplicación del editor de código fuente - + Open in file manager Abrir en el administrador de archivos - + Check updates at startup Comprobar actualizaciones al inicio - + Souce code editor args: - + User interface language: Idioma de la interfaz de usuario: - + Overrides the default user interface language defined by the system. Requires restarting the program. <strong>NOTE:</strong> UI translations are third party collaborations thus any typo or mistake should be reported directly to their respective maintainers. @@ -6140,12 +6046,12 @@ Mensage retornada por el SGBD: `%1' - + All files (*.*) - + Load file @@ -6464,6 +6370,11 @@ Mensage retornada por el SGBD: `%1' &Diff &Diff + + + Determine the changes between model/database and another database + + Design database models @@ -6516,8 +6427,8 @@ Mensage retornada por el SGBD: `%1' - Rearrange objects on the canvas hierarchically - Reorganizar los objetos en el lienzo jerárquicamente + Rearrange objects over the canvas + @@ -6799,11 +6710,6 @@ Mensage retornada por el SGBD: `%1' Ctrl+Shift+H Ctrl+Shift+H - - - Determine the changes between model and database - Determinar los cambios entre el modelo y la base de datos - Ctrl+Shift+D @@ -6840,7 +6746,7 @@ Mensage retornada por el SGBD: `%1' Administrar base de datos existentes - + (Demo) (Demo) @@ -6850,174 +6756,189 @@ Mensage retornada por el SGBD: `%1' Guardando modelos temp - + Clear Menu Limpiar Menú - + The demonstration version can create only `one' instance of database model! La versión de demostración sólo puede crear `una' instancia de modelo de base de datos! - + Save model Guardar Modelo - + Save modified model(s) Guardar modelo(s) modificado(s) - + The following models were modified but not saved: %1. Do you really want to quit pgModeler? Los siguientes modelos fueron modificados pero no guardados: %1. ¿De verdad quieres salir de pgModeler? - + The model <strong>%1</strong> was modified! Do you really want to close without save it? Se ha modificado el modelo <strong>%1</strong>. ¿Realmente quieres cerrar sin guardarlo? - - + + Warning Advertencia - + You're running a demonstration version! The model saving feature is available only in the full version! Usted está ejecutando una versión de demostración! La función de ahorro de modelo está disponible sólo en la versión completa! - - - + + + Confirmation Confirmación - + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! It's recommended to validate it before save in order to create a consistent model otherwise the generated file will be broken demanding manual fixes to be loadable again! <strong>ADVERTENCIA:</strong> El modelo <strong>%1</strong> está invalidado! Se recomienda para validarlo antes de guardar con el fin de crear un modelo coherente de lo contrario el archivo generado se romperá exigiendo correcciones manuales que sea cargable de nuevo! - + Save anyway Guardar de todos modos - - - + + + Validate Validar - + Save '%1' as... Guardar '%1' como... - - + + Database model (*.dbm);;All files (*.*) Modelo de base de datos (*.dbm);; Todos los arquivos (*.*) - + Access support page - + You're running a demonstration version! Note that you'll be able to create only <strong>%1</strong> instances of each type of object and some key features will be disabled or limited!<br/><br/>You can purchase a full binary copy or get the source code at <a href='http://pgmodeler.com.br'>pgmodeler.com.br</a>. <strong>NOTE:</strong> pgModeler is an open source software, but purchasing binary copies or providing some donations will support the project and cover all development costs.<br/><br/> <strong>HINT:</strong> in order to test all features it's recommended to use the <strong>demo.dbm</strong> model located in </strong>Sample models</strong> at <strong>Welcome</strong> view.<br/><br/><br/><br/> - + Rearrange objects over the canvas is an irreversible operation! Would like to proceed? - + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! Before run the export process it's recommended to validate in order to correctly create the objects on database server! <strong>ADVERTENCIA:</strong> El modelo <strong>%1</strong> está invalidado. Antes de ejecutar el proceso de exportación se recomienda validar para crear correctamente los objetos en el servidor de base de datos! - + + Grid + + + + + Hierarchical + + + + + Scattered + + + + Export anyway Exportar de todas modos - + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! Before run the diff process it's recommended to validate in order to correctly analyze and generate the difference between the model and a database! <strong>ADVERTENCIA:</strong> El modelo <strong>%1</strong> está invalidado! Antes ejecutar el proceso diff se recomienda para validar el fin de analizar correctamente y generar la diferencia entre el modelo y una base de datos! - + Diff anyway Diff de todas modo - + Database model printing Imprimir modelo de Base de datos - + Changes were detected in the definitions of paper/margin of the model which may cause the incorrect print of the objects. Do you want to continue printing using the new settings? To use the default settings click 'No' or 'Cancel' to abort printing. Se detectaron cambios en las definiciones de papel / margen del modelo que pueden causar la impresión incorrecta de los objetos. ¿Quieres continuar con la impresión utilizando la nueva configuración? Para utilizar la configuración predeterminada, haga clic 'No' o 'Cancel' para abortar la impresión. - + Load model Cargar modelo - + Could not load the database model file `%1'. Check the error stack to see details. You can try to fix it in order to make it loadable again. No se pudo cargar el archivo de modelo de base de datos `%1'. Compruebe la pila de errores para ver los detalles. Usted puede tratar de arreglarlo con el fin de hacer que se puede cargar de nuevo. - + Fix model Fijar modelo - + Cancel Cancelar - + This action will open a web browser window! Want to proceed? Esta acción abrirá una ventana del navegador web! ¿Quieres continuar? - + (no samples found) (no hay ejemplos encontrados) - + save guardar - + export exportar - + diff diff - + Executing pending <strong>%1</strong> operation... Ejecución de operarienes pendientes <strong>%1</strong>... @@ -7030,74 +6951,74 @@ Mensage retornada por el SGBD: `%1' Diálogo - + msg msg - + Exceptions Excepciones - + Show raw text errors or information. Mostrar errores de texto crudos o información. - + Show/hide exceptions stack. Mostrar/ocultar pila excepciones. - + ... ... - - + + &Yes &Si - - + + &No &No - + Cancel Cancelar - + &Ok &Ok - + &Cancel &Cancelar - + Error Error - + Alert Alerta - + Information Información - + Confirmation Confirmación @@ -7359,415 +7280,453 @@ Mensage retornada por el SGBD: `%1' ModelDatabaseDiffForm - - - Database model diff - Diff de modelo de base de datos - - - - Generate diff from model - Generar diff del modelo - Settings Configuraciones - - Input database - Base de datos de entrada - - - + + Connection: Conexión: - + ... ... - + + + Database: bases de datos: - + Ignore import errors Ignorar errores de importación - - Trucate tables before alter columns - Trucate tablas antes alterar las columnas - - - + Import system objects Importar objectos del sistema - + Import extension objects Importar extensión de objecto - + For DROP command, the objects that depends on an object to be dropped will be deleted as well. For TRUNCATE command, tables that are linked to a table to be truncated will be truncate too. <strong>NOTE:</strong> this option can affect more objects than listed in the output or diff preview. Para comando DROP, los objetos que depende de un objeto que se retiren serán eliminados también. Para comando TRUNCATE, tablas que están vinculadas a una mesa para truncar se truncará también. <strong>NOTA:</strong> esta opción puede afectar a varios objetos que se enumeran en la salida o diff vista previa. - + Drop or truncate in cascade mode Drop o truncate en cascada mode - + Permissions already set on database objects will be kept.The ones configured on the model will be applied to the database. Permisos ya establecidos en los objetos de base de datos serán los kept.The configuradas en el modelo se puede aplicar a la base de datos. - + Keep object's permissions Mantenga los permisos del objeto - + Database cluster level objects like roles and tablespaces will not be dropped. No se cayeron objetos de base de datos a nivel de grupo como los roles y espacios de tabla. - + Keep cluster objects Mantenga objetos clúster - + Recreate only unmodifiable objects Recrear objetos sólo no modificables - + Force recreation of objects Forzar recreación de objetos - + Ignores errors generated by duplicated objects when exporting the diff to database. Ignora errores generados por objetos duplicados cuando se exporta el diff de base de datos. - + Ignore duplicity errors Ignorar duplicidad de errores - + Serial columns are converted to integer and having the default value changed to <strong>nextval(sequence)</strong> function call. By default, a new sequence is created for each serial column but checking this option sequences matching the name on column's default value will be reused and will not be dropped. Columnas de serie se convierten a entero y haber cambiado el valor predeterminado para llamada a la función <strong>nextval(sequence)</strong>. De forma predeterminada, se crea una nueva secuencia para cada columna de serie, pero marcando esta opción secuencias que coinciden con el nombre en valor por defecto de la columna se volverá a utilizar y no se borró. - + Reuse sequences on serial columns Reciclar secuencias sobre columnas de serial - + Diff mode Modo diff - + Override the PostgreSQL version when generating the diff. The default is to use the same version as the input database. Anular la versión de PostgreSQL al generar el diff. El valor por defecto es usar la misma versión que la base de datos de entrada. - + Use PostgreSQL: Use PostgreSQL: - + Compares the model and the input database storing the diff in a SQL file for later usage. Compara el modelo y la base de datos de entrada almacenar el diff en un archivo SQL para un uso posterior. - + File: Archivo: - + Select output file Seleccionar archivo de salida - + Compares the model and the input database generating a diff and applying it directly to the latter. <strong>WARNING:</strong> this mode causes irreversible changes on the database and in case of failure the original structure is not restored, so make sure to have a backup before proceed. Compara el modelo y la base de datos de entrada generar un diff y aplicándolo directamente a éste. < strong>ADVERTENCIA:</strong> este modo provoca cambios irreversibles en la base de datos y en caso de fallo de la estructura original no se restablece, así que asegúrese de tener una copia de seguridad antes de proceder. - + Ignores as many as possible errors on import step. This option generates an incomplete diff. - + Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production servers and always make a backup before use it. - + Import system (built-in) objects. Use this if the import step is returning errors related to missing objects. - + Import objects created by extensions. Use this if the import step is returning errors even importing built in ones. - + Instead of use an ALTER command to modify certain kind of objects a DROP and CREATE will be used in order to do a full modification. This option does not affects the database object. - + No command to rename the destination database will be generated even the model's name differ from database name. - + Preserve database name - + Avoid the generation of DROP commands for objects that exists in database but not in the model. This is useful when diff a partial model against the complete database. - + Do not drop missing objects - + Store in S&QL file - + + Diff tool + + + + + Generate diff code + + + + + Source database + + + + + Current model: + + + + + (model) + + + + + Compare to + + + + Appl&y on server - + Diff Diff - + + Froce the generation of DROP commands for columns and constraints that exist in database but not in the model. This is useful when diff a partial model against the complete database and the user needs to drop columns and constraint but preserve the rest of the objects. + + + + + Drop missing columns and constraints + + + + + Truncate tables before alter columns + + + + Import && Export - + Import Importar - + Export Exportar - + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. - + Ignore error codes - + Output Salida - + Changes: Cambios: - + Cancel Cancelar - + Progress label... Etiqueta de progreso... - + Step label... Etiqueta de pasos... - + <html><head/><body><p>Objects marked with an <span style=" font-weight:600;">ALTER</span> may not be effectively changed unless that the differences detected are in attributes that can be modified through ALTER commands otherwise no operationwill be performed or, if the force recreation is checked, the object will be dropped and created again.</p></body></html> <html><head/><body><p>Objetos marcados con un <span style=" font-weight:600;">ALTER</span> No se puede cambiar de manera efectiva a menos que las diferencias detectadas son en los atributos que se pueden modificar a través de comandos ALTER de lo contrario no se realizará ninguna operationwill o, si la fuerza de la recreación está marcada, el objeto será dado de baja y creó de nuevo.</p></body></html> - + Objects to be created Objetos que se creen - - - - + + + + 0 0 - + Objects to be dropped Objetos que se borran - + Possible objects to be changed Objetos posibles de ser cambiados - + Ignored objects (system ones or with sql disabled) Objetos ignorados (los del sistema o con sql disabilitado) - + Diff Preview Vista previa Diff - + &Apply diff &Aplicar diff - + &Generate &Generar - + &Close &Cerrar - - + + Waiting process to start... Proceso en espera para iniciar... - - Importing database <strong>%1</strong>... - Importando base de datos <strong>%1</strong>... - - - - Comparing the model <strong>%1</strong> and database <strong>%2</strong>... - Comparando el modelo <strong>%1</strong> y la base de datos <strong>%2</strong>... - - - + Confirmation Confirmación - + <strong>WARNING:</strong> The generated diff is ready to be exported! Once started this process will cause irreversible changes on the database. Do you really want to proceed? <strong>ADVERTENCIA:</strong> El diff generada está listo para ser exportado! Una vez iniciado este proceso provocará cambios irreversibles en la base de datos. ¿Realmente desea continuar? - + Apply diff Aplicar diff - + Preview diff Vista previa Diff - - Exporting diff to database <strong>%1</strong>... - Exportando diff a base de datos <strong>%1</strong>... + + model not saved yet + + + + + (none) + + + + + Step %1/%2: Importing database <strong>%3</strong>... + + + + + Step %1/%2: Comparing <strong>%3</strong> and <strong>%4</strong>... + + + + + Step %1/%2: Exporting diff to database <strong>%3</strong>... + - + Diff process paused. Waiting user action... Proceso Diff en pausa. Esperando acción del usuario... - + Saving diff to file <strong>%1</strong> Guardando diff a archivo <strong>%1</strong> - + Diff process sucessfully ended! Proceso Diff finalizado satisfactoriamente! - - + + No operations left. No hay operaciones a la izquierda. - + Operation cancelled by the user. Operación cancelada por el usuario. - + Process aborted due to errors! Proceso abortado debido a errores! - + -- SQL code purposely truncated at this point in demo version! - + -- No differences were detected between model and database. -- -- No se detectaron diferencias entre el modelo y la base de datos. -- - + Error code <strong>%1</strong> found and ignored. Proceeding with export. Error de código encontrado <strong>%1</strong> y ignorado. Procediendo con la exportación. - + Save diff as... Salvar diff como... - + SQL code (*.sql);;All files (*.*) Código SQL (*.sql);;Todos los archivos (*.*) @@ -7776,10 +7735,6 @@ Mensage retornada por el SGBD: `%1' ModelExportForm - Model Export - Exportar Modelo - - Export model Exportar Modelo @@ -8033,17 +7988,17 @@ Mensage retornada por el SGBD: `%1' - + SVG representation of database model - + SVG file generated by pgModeler - + Output file `%1' successfully written. @@ -8093,55 +8048,55 @@ Mensage retornada por el SGBD: `%1' Modo de simulación activado. - + Generating SQL for `%1' objects... Generación de SQL para los objetos `%1'... - + Destroying objects created on the server. Destruyendo los objetos creados en el servidor. - + Restoring original names of database, roles and tablespaces. Restauración de los nombres originales de base de datos, roles y tablespaces. - - + + Creating object `%1' (%2) Creando objecto `%1' (%2) - + Creating database `%1' - + Connecting to database `%1' - + Renaming `%1' (%2) to `%3' - - + + Dropping object `%1' (%2) Borrando objetos `%1' (%2) - + Changing object `%1' (%2) Cambiando objecto `%1' (%2) - + Running auxiliary command. Ejecución de comandos auxiliar. @@ -8307,127 +8262,131 @@ p, li { white-space: pre-wrap; } ModelObjectsWidget - Model Objects Modelo Objetos - + + Visible object types + + + + Hide this widget Ocultar este widget - - - - - - + + + + + + ... ... - + 1 1 - + ID ID - + Object Objecto - + Type Tipo - + Parent Object Objeto Padre - + Parent Type Tipo del Padre - - Visible Object Types - Tipos de objetos visibles - - - + Select All Marcar Todos - + Clear All Desmarcar Todos - + + Model objects + + + + Select Selecionar - + Return Retorno - + Cancel Cancelar - + Esc Esc - + Tree view Vista en árbol - + List view Vista en lista - + Objects view configuration Configuración de la Vista de objetos - + Expands all items Expande todos los items - + Collapses all items Contrae todos los items - + Filter: Filtrar: - + By ID Por ID - + New Nuevo @@ -8502,12 +8461,12 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca ModelValidationHelper - + There are pending errors! SQL validation will not be executed. Hay errores pendientes! No se ejecutará la validación de SQL. - + Operation canceled by the user. Operación cancelada por el usuario. @@ -8565,6 +8524,11 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca ... ... + + + Swap ids + + SQL Validation: @@ -8580,11 +8544,6 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Try to resolve the reported issues. Trate de resolver los problemas comunicados. - - - Apply Fix - Aplicar Fijar - Ctrl+S @@ -8625,16 +8584,16 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Esc Esc + + + Apply fixes + + Change the creation order for two objects by swapping their ids Cambiar el orden de la creación de dos objetos mediante el canje de sus ids - - - Swap Ids - Intercambiar Ids - Va&lidate @@ -8666,17 +8625,27 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca - + + The column <strong>%1</strong> on <strong>%2</strong> <em>(%3)</em> is referencing the geospatial data type <strong>%4</strong> but the <strong>postgis</strong> extension is not present in the model! + + + + <strong>HINT:</strong> try to swap the relationship by another ones that somehow are linked to it through generated columns or constraints to solve this issue. Note that other objects may be lost in the swap process. - + + <strong>HINT:</strong> Create the extension in the model or let it be created by applying the needed fixes. + + + + SQL validation not executed! No connection defined. - + Database model successfully validated. @@ -8686,32 +8655,32 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Validación de SQL ha fallado debido a un error (s) a continuación. <strong>NOTA:</strong><em> Estos errores no invalida el modelo, pero pueden afectar a las operaciones como <strong>export</strong> and <strong>diff</strong>.</em> - + <em>The above object was created by a relationship. Change the name pattern on it's generator relationship. Fix will not be applied!</em> <em>El objetivo anterior fue creado por una relación. Cambiar el patrón de nombre en él la relación de generador. Fijar no se aplicará!</em> - + Conflicting object: <strong>%1</strong> <em>(%2)</em>. Objeto en conflicto: <strong>%1</strong> <em>(%2)</em>. - + Relationship: <strong>%1</strong> [id: %2]. Relación: <strong>%1</strong> [id: %2]. - + Referrer object: <strong>%1</strong> <em>(%2)</em> [id: %3]. Objeto referente:: <strong>%1</strong> <em>(%2)</em> [id: %3]. - + Running SQL commands on server... Ejecución de comandos SQL en el servidor... - + Processing object: %1 Procesando object: %1 @@ -8719,408 +8688,420 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca ModelWidget - + One to One (1-1) Uno a Uno (1-1) - + One to Many (1-n) Uno a Muchos (1-n) - + Many to Many (n-n) Mucho a Mucho (n-n) - - + + Copy Copiar - + Inheritance Herencia - + <strong>ATTENTION:</strong> The database model is protected! Operations that could modify it are disabled! <strong>ATENCIÓN:</strong> El modelo de base de datos está protegida! Operaciones que podrían modificar la misma son habilitado! - + Source Fuente - + Alt+S Alt+S - + Show object source code Exibir el código-Fuente del objeto - - + + Properties Propiedades - + Space Espacio - + Edit the object properties Edita las propriedades del objeto - - + + Protect Proteger - - + + Unprotect Desproteger - + Protects object(s) from modifications Protege objeto(s) a partir de las modificaciones - - + + Delete Eliminar - + Del Del - - + + Del. cascade Del. cascada - + Shift+Del Shift+Del - + Select all Seleccionar todos - + + Select + Selecionar + + + Ctrl+A Ctrl+A - + Selects all the graphical objects in the model Selecciona todos los objetos gráficos en el modelo - + + Edit data + Editar datos + + + Convert Convertir - + Ctrl+C Ctrl+C - + Paste Pegar - + Ctrl+V Ctrl+V - + Cut Cortar - + Ctrl+X Ctrl+X - + Deps && Referrers Deps && Referreridos - + New Nuevo - + Add a new object in the model Adicionar un nuevo objeto en el modelo - + Quick Rápido - + Quick action for the selected object Acciones rápidas para la selección de objecto - + Rename Renombrar - + F2 F2 - + Quick rename the object Renombrar rápida del objeto - + Move to schema Mover al esquema - + Set tag Configurar tag - + Edit permissions Editar permisos - + Ctrl+E Ctrl+E - + Change owner Cambiar propietario - + Select children Seleccione los hijos - + Select tagged - - Highlight - Aspecto interesante - - - + Open relationship Abrir relación - + Custom SQL Personalizar SQL - + Alt+Q Alt+Q - + Convert to sequence Converir a secuencia - + Convert to serial Converir a serial - + Break line Saltos de líena - + Remove points Remover puntos - + Enable SQL Habilitar SQL - + Disable SQL Deshabilitar SQL - + Duplicate Duplicar - + Ctrl+D - + Extended attributes Atributos extendidos - + + Show Mostrar - + + Hide Ocultar - + Jump to table Ir a tabla - + + Schemas rectangles + + + + Fade in/out - - + + Fade in - - + + Fade out - - - + + + Relationships Relaciones - + Swap ids - + Edit the objects creation order by swapping their ids - + 90° (vertical) 90° (vertical) - + 90° (horizontal) 90° (horizontal) - + 90° + 90° (vertical) 90° + 90° (vertical) - + 90° + 90° (horizontal) 90° + 90° (horizontal) - - - + + + All objects Todos los objetos - - + + Schemas - - + + Tables Tablas - - + + Views Vistas - - + + Textboxes - + Zoom: %1% Zoom: %1% - + Do you really want to convert the relationship into an intermediate table? ¿Realmente desea convertir la relación en una tabla intermedia? - + Loading database model Cargando modelo de base de datos - + Saving database model Guardando modelo de base de datos @@ -9145,67 +9126,72 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca También copiar todas las dependencias de los objetos seleccionados? Esto minimiza la ruptura de referencias cuando los objetos copiados se pegan en otro modelo. - + Pasting objects... Pegar Objetos... - + Validating object: `%1' (%2) Validando El objeto: `%1' (%2) - + Generating XML for: `%1' (%2) Generando código XML del objeto: `%1' (%2) - + Pasting object: `%1' (%2) Pegar Objetos: `%1' (%2) - + Not all objects were pasted to the model due to errors returned during the process! Refer to error stack for more details! No todos los objetos se pegan a la modelo debido a errores devueltos durante el proceso! Consulte a un error de pila para más detalles! - + <strong>CAUTION:</strong> You are about to delete objects in cascade mode which means more objects than the selected will be dropped too. Do you really want to proceed? <strong>PRECAUCIÓN:</strong> Estás a punto de eliminar objetos en modo de cascada que significa más objetos que el seleccionado se redujo también. ¿Realmente desea continuar? - + <strong>CAUTION:</strong> Remove multiple objects at once can cause irreversible invalidations to other objects in the model causing such invalid objects to be deleted too. Do you really want to proceed? <strong>PRECAUCIÓN:</strong> Eliminar varios objetos a la vez puede causar invalidaciones irreversibles a otros objetos en el modelo que causa este tipo de objetos no válidos para ser borrados también. ¿Realmente desea continuar? - + <strong>CAUTION:</strong> Remove a relationship can cause irreversible invalidations to other objects in the model causing such invalid objects to be deleted too. Do you really want to proceed? <strong>PRECAUCIÓN:</strong> Eliminar una relación puede causar invalidaciones irreversibles a otros objetos en el modelo que causa este tipo de objetos no válidos para ser borrados también. ¿Realmente desea continuar? - + Do you really want to delete the selected object? ¿Realmente desea eliminar el objeto seleccionado? - + The cascade deletion found some problems when running! Some objects could not be deleted or registered in the operation's history! Please, refer to error stack for more details. La eliminación en cascada encontró algunos problemas al ejecutar! Algunos objetos no podían ser borrados o registrados en la historia de la operación! Por favor, consulte a un error de la pila para obtener más detalles. - + (no objects) (no hay objetos) - + + None + + + + Source code Código fuente - + Constraints Restricciones @@ -9213,32 +9199,32 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca ModelsDiffHelper - + Processing object `%1' (%2)... Procesando objecto `%1' (%2)... - + Skipping object `%1' (%2)... Omitiendo objeto `%1' (%2)... - + Processing diff infos... Procesando diff infos... - + Processing `%1' info for object `%2' (%3)... - + No differences between the model and database. - + Preparing diff code... @@ -9251,78 +9237,78 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Formulario - + Role Rol - + Tag Tag - + Cast Cast - + A A - + Language Lenguaje - + Textbox Textbox - + Event Trigger Evento Trigger - + Tablespace Tablespace - + Schema Esquema - + Domain Dominio - + Conversion Conversión - + Aggregate Agregado - + Collation Collation - + Table Tabla - + Type Tipo @@ -9332,12 +9318,12 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Op. Familia - + Sequence Sequencia - + Extension Extensión @@ -9347,12 +9333,12 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Función - + Op. Class Op. Clase - + Operator Operador @@ -9362,13 +9348,13 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Vista - + Permissions Permisos - + Rule Regla @@ -9388,37 +9374,42 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Restricción - + Generic SQL - + Trigger Trigger - + + Policy + + + + Many-to-many Muchos-a-muchos - + One-to-many Uno-a-muchos - + One-to-one Uno-a-uno - + Inheritance Herencia - + Copy Copia @@ -9519,6 +9510,7 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca + 9 9 @@ -9548,37 +9540,37 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca B - + 8 8 - + 1 1 - + 2 2 - + 3 3 - + 5 5 - + 4 4 - + 0 0 @@ -9586,63 +9578,67 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca NumberedTextEditor - - + Load file - + Load the object's source code from an external file - - Edit source + + Load + Cargar + + + + Edit - + Edit the source code in the preferred external editor - + Clear Limpiar - + Upper case - + Lower case - + Ident right - + Ident left - + SQL file (*.sql);;All files (*.*) Archivo SQL (*.sql);;Todos los archivos (*.*) - - The source code is currently being edited in the application `%1' (pid: %2)! Only one instance of the source code editor application is allowed. + + The source editor `%1' is running on `pid: %2'. - + Could not start the source code editor application `%1'! Make to sure that the source editor path defined in the general settings points to a valid executable and the current user has permission to run the application. Error message returned: `%2' @@ -9718,113 +9714,135 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Formulario - + Pattern: Patrón: - + Find Buscar - + Defines the search filter Define el filtro de búsqueda - + Filter Filtro - + Clears the search results Limpiar los resultados de la búsqueda - + Clear Limpiar - - Highlight graphical objects when selecting them or their children on the result list - Resaltar objetos gráficos al seleccionar a ellos oa sus hijos en la lista de resultados - - - - Highlight - Resaltar - - - - + + ... ... - + Hide this widget Ocultar este widget - + + (Un)selects the graphical objects in the results grid + + + + + Select + Selecionar + + + Regular Expression Expresión Regular - + Exact Match Resultado Exacto - + Select All Selecionar todos - + Clear All Limpiar Todos - + Case Sensitive Sensible Case - + ID ID - + Object Objecto - + Type Tipo - + Parent Object Objecto Padre - + Parent Type Tipo del Padre - + + Fades outs all the graphical objects in the results grid (or those not listed). The current fade in/out state of all objects is modified. + + + + + Fade out + + + + + + Listed + + + + + + Not listed + + + + Found <strong>%1</strong> object(s). Encontrado objecto(s) <strong>%1</strong>. - + No objects found. Objetos no encontrados. @@ -9876,131 +9894,131 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Seleccionar Objecto - + Select %1 - ObjectTableWidget + ObjectsTableWidget - + Form - Formulario + Formulario - + Add Item - Adicionar Item + - + Ins - Ins + Ins - + Remove Item - Remover Item + - + Del - Del + Del - + Update Item - Actualizar Item + Actualizar Item - + Alt+R - Alt+R + Alt+R - + Remove All - Remover Todo + - + Shift+Del - Shift+Del + Shift+Del - + Duplicate item - + Ctrl+D - + Edit Item - Editar Item + Editar Item - + Space - Espacio + Espacio - + Move Up - Mover Arriba + Mover Arriba - + Ctrl+Up - Ctrl+Up + Ctrl+Up - + Move Down - Mover Abajo + Mover Abajo - + Ctrl+Down - Ctrl+Down + Ctrl+Down - + Move to start - Mover al inicio + Mover al inicio - + Ctrl+Home - Ctrl+Home + Ctrl+Home - + Move to end - Mover al final + Mover al final - + Ctrl+End, Ctrl+S - Ctrl+End, Ctrl+S + Ctrl+End, Ctrl+S - - + + Confirmation - Confirmación + Confirmación - + Do you really want to remove the selected item? - ¿Realmente desea eliminar el elemento seleccionado? + ¿Realmente desea eliminar el elemento seleccionado? - + Do you really want to remove all the items? @@ -10321,13 +10339,13 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca - + Roles Roles - + Privileges Privilégios @@ -10382,32 +10400,27 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca Vista previa Código - - Type: - Tipo: - - - - Role - Rol - - - + Id Id - - Leave the <em><strong>Roles</strong></em> empty to create a permission applicable to <strong><em>PUBLIC</em></strong>. - Deje los <em><strong>Roles</strong></em> vacío para crear un permiso aplicable a <strong><em>PUBLIC</em></strong>. + + Name + Nombre - + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + + + + -- No permissions defined for the specified object! -- No hay permisos definidos para el objeto especificado! - + /* Could not generate the SQL code preview for permissions! / * No se pudo generar el código SQL para previsualización permisos! @@ -10415,384 +10428,674 @@ The requested size %1 x %2 was too big and there was not enough memory to alloca PgModelerCLI - + Unrecognized option '%1'. Opción no reconocido '%1'. - + Value not specified for option '%1'. El valor no se especifica para la opción '%1'. - + Option '%1' does not accept values. Opción '%1' no acepta valores. - - Connection aliased as '%1' was not found on configuration file. - Conexión con alias como '%1' no se ha encontrado en el archivo de configuración. - - - + Usage: pgmodeler-cli [OPTIONS] El uso: pgmodeler-cli [OPTIONS] - - + + command line interface. interfaz de línea de comandos. - - PostgreSQL Database Modeler Project - pgmodeler.com.br - Proyecto Modelador Base de datos PostgreSQL - pgmodeler.com.br - - - - Copyright 2006-2015 Raphael A. Silva <raphael@pgmodeler.com.br> - Copyright 2006-2013 Raphael A. Silva <rkhaotix@gmail.com> - - - - This CLI tool provides the operations to export pgModeler's database models without -the need to load them on graphical interface as well to fix model files to the most recent -accepted structure. All available options are described below. - Esta herramienta proporciona una manera de exportar pgModeler's modelos de base de datos sin -la necesidad de cargarlos en la interfaz gráfica. Todos los disponibles exportación -modos se describen a continuación. - - - + General options: Opciones Generales: - + DBMS export options: Opciones de exportación del SGDB: - + Miscellaneous options: Otros Opciones: - + There are no connections configured. No hay conexiones configuradas. - - Available connections (alias : conn. string) - Conexiones disponibles (alias:. Conn cadena) - - - - No export mode specified! - No se especifica el modo de exportación! - - - - Export, fix model and update mime operations can't be used at the same time! - Las operaciones de exportación, modelo fijo y actualización mime no se pueden utilizar al mismo tiempo! - - - - No input file specified! - Sin archivo de entrada especificado! - - - - No output file specified! - Sin archivo de salida especificado! - - - + Input file must be different from output! Archivo de entrada debe ser diferente de la salida! - + Incomplete connection information! Información de conexión incompleto! - + Invalid zoom specified! Inválido Zoom especificado! - + Invalid action specified to update mime option! Acción inválida para actualizar opción mimo! - + Starting model fixing... Iniciar fijación modelo... - + Starting mime update... Iniciar actualización de mime... - + Starting model export... Comenzando del modelo de exportación ... + + + Model successfully fixed! + Modelo fijado correctamente! + + + + PNG and SVG export options: + + + + + Connection aliased as '%1' was not found in the configuration file. + + + + + PostgreSQL Database Modeler Project - pgmodeler.io + + + + + Copyright 2006-2018 Raphael A. Silva <raphael@pgmodeler.io> + + + + + This CLI tool provides several operations over models and databases without the need to perform them +in pgModeler's graphical interface. All available options are described below. + + + + + %1, %2 [FILE] Input model file (.dbm). This is mandatory for fix, export operations. + + + + + %1, %2 [DBNAME] Input database name. This is mandatory for import operation. + + + + + %1, %2 [FILE] Output file. This is mandatory for fixing model or exporting to file, png or svg. + + + + + %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + + + + + %1, %2 [NUMBER] Model fix tries. When reaching the maximum count the invalid objects will be discarded. + + + + + %1, %2 Export the input model to a sql script file. + + + + + %1, %2 Export the input model to a png image. + + + + + %1, %2 Export the input model to a svg file. + + + + + %1, %2 Export the input model directly to a PostgreSQL server. + + + + + %1, %2 Import a database to an output file. + + + + + %1, %2 Compares a model and a database or two databases generating the SQL script to synch the latter in relation to the first. + + + + + %1, %2 Force the PostgreSQL version of generated SQL code. + + + + + %1, %2 Silent execution. Only critical messages and errors are shown during process. + + + + + %1, %2 Show this help menu. + + + + + Connection options: + + + + + %1, %2 List available connections in file %3. + + + + + %1, %2 [ALIAS] Connection configuration alias to be used. + + + + + %1, %2 [HOST] PostgreSQL host in which a task will operate. + + + + + %1, %2 [PORT] PostgreSQL host listening port. + + + + + %1, %2 [USER] PostgreSQL username. + + + + + %1, %2 [PASSWORD] PostgreSQL user password. + + + + + %1, %2 [DBNAME] Connection's initial database. + + - Loading input file: - Cargando archivo de entrada: + %1, %2 Draws the grid in the exported image. + + + + + %1, %2 Draws the page delimiters in the exported image. + + + + + %1, %2 Each page will be exported in a separated png image. (Only for PNG images) + + + + + %1, %2 [FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG images) + - Fixed model file: - Fijando archivo de modelo: + %1, %2 Ignores errors related to duplicated objects that eventually exist in the server. + + + + + %1, %2 [CODES] Ignores additional errors by their codes. A comma-separated list of alphanumeric codes should be provided. + + + + + %1, %2 Drop the database before execute a export process. + + + + + %1, %2 Runs the DROP commands attached to SQL-enabled objects. + + + + + %1, %2 Simulates an export process by executing all steps but undoing any modification in the end. + + + + + %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + + + + + Database import options: + - Model successfully fixed! - Modelo fijado correctamente! + %1, %2 Ignore all errors and try to create as many as possible objects. + - - PNG and SVG export options: + + %1, %2 Import system built-in objects. This option causes the model bloating due to the importing of unneeded objects. - - %1, %2=[FILE] Input model file (.dbm). Mandatory use when fixing a model or exporting it. + + %1, %2 Import extension objects. This option causes the model bloating due to the importing of unneeded objects. - - %1, %2=[FILE] Output file. Mandatory use when fixing model or export to file or png. + + %1, %2 Run import in debug mode printing all queries executed in the server. - - %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + + Diff options: - - %1, %2 Model fix tries. When reaching the maximum count the invalid objects will be discard. + + %1, %2 [DBNAME] The database used in the comparison. All the SQL code generated is applied to it. - - %1, %2 Export to a sql script file. + + %1, %2 Save the generated diff code to output file. - - %1, %2 Export to a png image. + + %1, %2 Apply the generated diff code on the database server. - - %1, %2 Export to a svg file. + + %1, %2 Don't preview the generated diff code when applying it to the server. - - %1, %2 Export directly to a PostgreSQL server. + + %1, %2 Drop cluster level objects like roles and tablespaces. - - %1, %2 List available connections on %3 file. + + %1, %2 Revoke permissions already set on the database. New permissions configured in the input model are still applied. - - %1, %2 Version of generated SQL code. Only for file or dbms export. + + %1, %2 Drop missing objects. Generates DROP commands for objects that are present in the input model but not in the compared database. - - %1, %2 Silent execution. Only critical errors are shown during process. + + %1, %2 Force the drop of missing columns and constraints. Causes only columns and constraints to be dropped, other missing objects aren't removed. - - %1, %2 Show this help menu. + + %1, %2 Rename the destination database when the names of the involved databases are different. - - %1, %2 Draws the grid on the exported png image. + + %1, %2 Don't drop or truncate objects in cascade mode. - - %1, %2 Draws the page delimiters on the exported png image. + + %1, %2 Truncate tables prior to alter columns. Avoids errors related to type casting when the new type of a column isn't compatible to the old one. - - %1, %2 Each page will be exported on a separated png image. (Only for PNG) + + %1, %2 Don't reuse sequences on serial columns. Drop the old sequence assigned to a serial column and creates a new one. - - %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG) + + %1, %2 Don't force the recreation of objects. Avoids the usage of a DROP and CREATE commands to create a new version of the objects. - - %1, %2 Ignores errors related to duplicated objects that eventually exists on server side. + + %1, %2 Don't recreate the unmodifiable objects. These objects are the ones which can't be changed via ALTER command. - - %1, %2=[CODES] Ignores additional errors by their codes. A comma-separated list of alphanumeric codes should be provided. + + %1, %2 [ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. - - %1, %2 Drop the database before execute a export process. + + ** The diff process allows the usage of the following options related to import and export operations: - - %1, %2 Runs the DROP commands attached to SQL-enabled objects. + + * Export: - - %1, %2 Simulates a export process. Actually executes all steps but undoing any modification. + + * Import: - - %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + + ** When running the diff using two databases (%1 and %2) there's the need to specify two connections/aliases. - - %1, %2=[ALIAS] Connection configuration alias to be used. + + If only one connection is set it will be used to import the input database as well to retrieve database used in the comparison. - - %1, %2=[HOST] PostgreSQL host which export will operate. + + A second connection can be specified by appending a 1 on any connection configuration parameter listed above. - - %1, %2=[PORT] PostgreSQL host listening port. + + Available connections (alias : connection string) - - %1, %2=[USER] PostgreSQL username. + + No operation mode was specified! - - %1, %2=[PASSWORD] PostgreSQL user password. + + Export, fix model, import database, diff and update mime operations can't be used at the same time! - - %1, %2=[DBNAME] Connection's initial database. + + Multiple export mode was specified! - - %1, %2=[ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + + No input file was specified! - - Multiple export mode specified! + + No input database was specified! - - Mime database successfully updated. + + No output file was specified! - - Export to PNG image: - Exportar a imagen PNG: + + No input file or database was specified! + + + + + The input file and database can't be used at the same time! + + + + + No database to be compared was specified! + - - Export to SVG file: + + No diff action (save or apply) was specified! - - Export to SQL script file: - Exportar a archivo de comandos SQL: + + No output file for the diff code was specified! + - - Export to DBMS: - Exportar a SGDB: + + ** Error code `%1' found and ignored. Proceeding with export. + - - Export successfully ended! - Exportación terminó correctamente! + + ** Command: %1 + - + Extracting objects' XML... Exportando objetos XML... - + Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! Archivo de entrada no es válido! Parece que no es un modelo pgModeler generada o el archivo está dañado! - + Recreating objects... Recreando objetos... - - -** Object(s) that couldn't fixed: - -** Objeto(s) que no podían ser fijado: + + +** Object(s) that couldn't fixed: + +** Objeto(s) que no podían ser fijado: + + + + WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) + ADVERTENCIA: Hay objetos que tal vez no se pueden arreglar. Tratando de nuevo ... (Trata %1/%2) + + + + + Loading input file: %1 + + + + + Fixed model file: %1 + + + + + Export to PNG image: %1 + + + + + Export to SVG file: %1 + + + + + Export to SQL script file: %1 + + + + + Export to DBMS: %1 + + + + + Export successfully ended! + + + + + + Starting database import... + + + + + + Input database: %1 + + + + + Saving the imported database to file... + + + + + Import successfully ended! + + + + + + Starting diff process... + + + + + Input model: %1 + + + + + Compare to: %1 + + + + + Loading input model... + + + + + + Importing the database `%1'... + + + + + Comparing the generated models... + + + + + No differences were detected. + + + + + Saving diff to file `%1' + + + + + ** WARNING: You are about to apply the generated diff code to the server. Data can be lost in the process! + + + + + ** Proceed with the diff applying? (yes/no) > + + + + + yes + + + + + + no + + + + + Diff code not applied to the server. + + + + + Applying diff to the database `%1'... + + + + + Diff successfully ended! + + - - WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) - ADVERTENCIA: Hay objetos que tal vez no se pueden arreglar. Tratando de nuevo ... (Trata %1/%2) + + Mime database successfully updated! + + - + Database model files (.dbm) are already associated to pgModeler! Archivos de modelo de base de datos (.dbm) ya están asociados a pgModeler! - + There is no file association related to pgModeler and .dbm files! No hay ninguna asociación de archivos relacionados con pgModeler y archivos .dbm! - + Mime database operation: %1 Operación Mime de base de datos: %1 - + Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. No se puede borrar el archivo% 1! Compruebe si el usuario actual tiene permisos para eliminarlo y si existe el archivo. - + Running update-mime-database command... Ejecución de comando update-mime-database... @@ -10818,17 +11121,17 @@ modos se describen a continuación. PgModelerUiNS - + Do you want to apply the <strong>SQL %1 status</strong> to the object's references too? This will avoid problems when exporting or validating the model. ¿Desea aplicar el <strong>SQL %1 estatus</strong> a las referencias del objeto también? Esto evitará problemas al exportar o validar el modelo. - + disabling deshabilitando - + enabling habilitando @@ -10967,18 +11270,66 @@ modos se describen a continuación. Biblioteca + + PolicyWidget + + + Basics + + + + + Command: + + + + + Permissive + + + + + Roles + Roles + + + + Expressions + Expresiones + + + + USING: + + + + + CHECK: + + + + + Name + Nombre + + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + + + QObject - + new_database new_database - - - - + + + + %1 (line: %2) %1 (line: %2) @@ -11554,74 +11905,82 @@ modos se describen a continuación. por Defecto - + Referer View: Vista Intermedia: - + Referer view references one or more columns of a table to construct it's own columns. Vista Intermedia hace referencia a una o más columnas de una tabla de construir es propias columnas. - + Referenced table has its columns referenced by a view in order to construct the columns of this latter. Tabla referenciada tiene sus columnas referenciadas por una vista para construir las columnas de este último. - + Referer Table: Tabla Intermedia: - + Referer table references one or more columns of a table through foreign keys. This is the (n) side of relationship. Tabla intermedia referencia a una o más columnas de una tabla a través de claves externas. Este es el lado (n) de relación. - + Referenced table has its columns referenced by a table's foreign key. This is the (1) side of relationship. Tabla referenciada tiene sus columnas referenciadas por una mesa y apos; s clave externa. Esta es la (1) lado de relación. - + Referenced Table: Tabla Referenciada: - - - + + + Reference Table: Tabla Referencia: - + Reference table has the columns from its primary key will copied to the receiver table in order to represent the linking between them. This is the (1) side of relationship. Tabla de referencia tiene las columnas de su clave primaria se copian en la tabla del receptor con el fin de representar a la vinculación entre ellos. Esta es la (1) lado de relación. - + Receiver Table: Tabla Receptora: - + Receiver (or referer) table will receive the generated columns and the foreign key in order to represent the linking between them. This is the (n) side of relationship. Receptor tabla (o intermedia) recibirá las columnas generadas y la clave externa con el fin de representar a la vinculación entre ellos. Este es el lado (n) de relación. - + In many-to-many relationships both tables are used as reference to generate the table that represents the linking. Columns from both tables are copied to the resultant table and two foreign keys are created as well in order to reference each participant table. En muchos-a-muchos relación ambas tablas se utilizan como referencia para generar la tabla que representa la vinculación. Las columnas de ambas tablas se copian en la tabla resultante y dos claves externas se crean así con el fin de hacer referencia a cada mesa participante. - - + + is required es requerido + + ResultSetModel + + + [binary data] + [datos binarios] + + RoleWidget @@ -11631,7 +11990,7 @@ modos se describen a continuación. - + Validity Validez @@ -11652,54 +12011,59 @@ modos se describen a continuación. - Inherit Permissions - Heredar Permisos + Inherit permissions + - Can create Database - Puede Crear Base de Datos + Can create database + - Can Login - Permitir Login + Bypass RLS + - Can create Role - Puede Crear Rol + Can use replication + - Can use Replication - Puede usar Replicación + Can login + Puede login + + + + Can create role + - - + + Members Miembros - - + + Member of Miembro de - - + + Members (Admin.) Miembros (Admin.) - + Password: Contraseña: - + Encrypted Encriptada @@ -11709,7 +12073,7 @@ modos se describen a continuación. - + Role Rol @@ -11760,7 +12124,7 @@ modos se describen a continuación. Formulario - + Save SQL commands Guardar comandos SQL @@ -11805,218 +12169,221 @@ modos se describen a continuación. - - Ctrl+S - Ctrl+S - - - + Run the specified SQL command Ejecutar un comando SQL especificada - + Run SQL Ejecutar SQL - + F6 F6 - + Clear sql input field and results Limpiar campo de entrada de SQL y resultados - + Clear All Limpiar Todos - - + + Export results to a CSV file Exportar resultados a un acchivo CSV - + Snippe&ts Snippe&ts - + + Alt+T + + + + E&xport E&xportar - + + Alt+X + + + + Toggles the output pane - + &Output - + Alt+O Alt+O - + Current working database - - - + + + Results - + Messages - + History - - ... ... - + SQL file (*.sql);;All files (*.*) Archivo SQL (*.sql);;Todos los archivos (*.*) - + Load Cargar - + Save - + Save as Guardar como - + [binary data] [datos binarios] - + No results retrieved or changes done due to the error above. - - + + Messages (%1) - + Results (%1) - - [%1]: SQL command successfully executed. <em>%2 <strong>%3</strong></em> + + [%1]: SQL command successfully executed in <em><strong>%2</strong></em>. <em>%3 <strong>%4</strong></em> - + Rows affected - + Rows retrieved - + Load SQL commands Cargar comandos SQL - + Save CSV file Guardar archivos CSV - + Comma-separated values file (*.csv);;All files (*.*) Archivo de valores separados por comas (*.csv);;Todos los archivos (*.*) - + The SQL input field and the results grid will be cleared! Want to proceed? El campo de entrada de SQL y la cuadrícula de resultados se borrará! ¿Quieres continuar? - + Copy selection Copiar la selección - + Plain format - + CVS format - + This action will wipe out all the SQL commands history for all connections! Do you really want to proceed? - + Clear history Limpiar historial - + Save history - + Reload history - + Find in history - + Hide find tool - + This action will wipe out all the SQL commands history for the current connection! Do you really want to proceed? @@ -12113,20 +12480,20 @@ modos se describen a continuación. - - + + Currently selected object(s) - - + + Dimensions of the selected object(s) - - + + Current zoom factor @@ -12162,40 +12529,50 @@ modos se describen a continuación. SequenceWidget - + Cyclic: Cíclico: - + Start: Inicio: - + Maximum: Maximo: - + Minimum: Minimo: - + + Defualt values: + + + + Increment: Incremento: - + Cache: Cache: - + Owner Col.: Dueño Col.: + + + User defined + + SnippetsConfigWidget @@ -12372,82 +12749,77 @@ modos se describen a continuación. PostgreSQL - + iconecodigo iconecodigo - + SQL SQL - + Code display: Visualización de Código: - + Original Originales - + Original + depedencies' SQL Originales + SQL dependientes - + Original + children's SQL Originales + SQL hijos - + Save the SQL code to a file. Guardar el código SQL code para un archivo. - + Save SQL Guardar SQL - + XML XML - - - Type: - Tipo: - Source code visualization Visualización del código fuente - + <strong>Original:</strong> displays only the original object's SQL code.<br/><br/> <strong>Dependencies:</strong> displays the original code including all dependencies needed to properly create the selected object.<br/><br/> <strong>Children:</strong> displays the original code including all object's children SQL code. This option is used only by schemas, tables and views. - + Save SQL code as... Guardar código SQL como... - + SQL code (*.sql);;All files (*.*) Código SQL (*.sql);;Todos los archivos (*.*) - + Generating source code... Generación de código fuente... - + -- NOTE: the code below contains the SQL for the selected object -- as well for its dependencies and children (if applicable). -- @@ -12472,19 +12844,19 @@ modos se describen a continuación. - + -- SQL code purposely truncated at this point in demo version! - + -- SQL code unavailable for this type of object -- -- Código SQL disponible para este tipo de objeto -- - + <!-- XML code preview disabled in demonstration version --> <!-- Código XML previsualización desactivado en la versión de demostración --> @@ -12571,12 +12943,12 @@ modos se describen a continuación. Table - + new_table nueva_tabla - + In demonstration version tables can have only `%1' instances of each child object type or ancestor tables! You've reach this limit for the type: `%2' En la demostración mesas versión sólo pueden tener `%1' instancias de cada tipo de objeto hijo o antepasado de la tabla! Tienes que llegar a este límite para el tipo: `%2' @@ -12589,104 +12961,179 @@ modos se describen a continuación. - + + Copy items on the grid + + + + + Copy + + + + Add empty rows - + + Add row + + + + Ins Ins - + + Delete column + + + + + Paste items on the grid + + + + + Paste + Pegar + + + + Ctrl+V + Ctrl+V + + + Fills the grid using a CSV file - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + + <html><head/><body><p>Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely ignored when generating the <span style=" font-weight:600;">INSERT</span> commands.</p></body></html> + + + + + Add column + + + + + Duplicate rows + + + + + Change the values of all selected cells at once + + + + + Bulk data edit + + + + + Ctrl+E + Ctrl+E + + + + Delete all columns + + + + + Delete rows - - Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely igored when generating the <strong>INSERT</strong> commands. + + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> - + Add an empty column - + Remove all rows from the grid preserving columns - + + Delete all rows + + + + Shift+Del Shift+Del - + Delete the selected rows - - + + Del Del - + Duplicate the selected rows - + Ctrl+D - + Delete the selected columns - + Remove all columns (and rows) from the grid - + Ctrl+Shift+Del - + Delete columns is an irreversible action! Do you really want to proceed? - + Remove all rows is an irreversible action! Do you really want to proceed? - + Remove all columns is an irreversible action! Do you really want to proceed? - - + + Unknown column - + Duplicated column @@ -12694,7 +13141,7 @@ modos se describen a continuación. TableObjectView - + Relationship: %1 @@ -12709,162 +13156,213 @@ Relación: %1 Opciones - + Tag: Tag: - + With OID Con OIDs - + Generate ALTER for columns/constraints Generar ALTER para columnas/restricciones - + Unlogged Invitados - + + Enable row level security + + + + + Force RLS for owner + + + + &Columns &Columnas - + Co&nstraints - + Tri&ggers - + &Rules &Reglas - + &Indexes &Indíces - + + &Policies + + + + &Tables &Tablas - + Edit data Editar datos - + Define initial data for the table Definir los datos iniciales de la tabla - - - - - - + + + + + + + Name Nombre - + Schema Esquema - - - + + + Type Tipo - + PK - + Default Value Valor por defecto - + Attribute(s) Atributo(s) - + It is not possible to mark a column as primary key when the table already has a primary key which was created by a relationship! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. - + It is not possible to mark a column created by a relationship as primary key! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. - + ON DELETE ON DELETE - + ON UPDATE ON UPDATE - + Refer. Table Tabla Refer - + Firing Firing - + Events Eventos - + Execution Ejecución - + Event Evento - + Indexing Indezado - + + Command + + + + + Permissive + + + + + USING expression + + + + + CHECK expression + + + + + Roles + Roles + + + Parent Padre - + Copy Copia + + + Yes + Si + + + + No + No + TablespaceWidget @@ -12964,7 +13462,7 @@ Relación: %1 Subrayado - + Select text color Seleccionar color del texto @@ -13389,132 +13887,162 @@ Relación: %1 Referencias - + Expression Alias: Alias Expresión: - + Column: Columna: - + Table: Tabla: - + Table Alias: Alias Tabla: - + Used in: Usado en: - + Column Columna - + Expression Expresión - + Reference Type: Tipo de Referencia: - - SELECT-FROM - SELECT-FROM + + View Definition + Definición de Vista + + + + Expression: + Expresión: + + + + Column Alias: + Alias de Columna: + + + + The element will be used as part of the SELECT statement to retrieve columns or expressions that will compose the view's columns + - - FROM-WHERE - FROM-WHERE + + SELECT ... + - - After WHERE - After WHERE + + The element will be used as part of the WHERE clause in form of conditional expression + - View Definition - Definición de Vista + WHERE ... + - - Expression: - Expresión: + + The element is used in the FROM portion of the command in order to reference tables or construct JOIN statements + - Column Alias: - Alias de Columna: + FROM ... + + + + + The element's expression is used exclusively as the view's definition + + + + + The element will be appended to the very end of the view's definition. This is useful when using GROUP BY/HAVING statements + + + + + End expression + - + Triggers Triggers - + Rules Reglas - + Indexes Índices - + Table Expression Expresión de tabla - + Code Preview Vista previa código - + Options Opciones - + Tag: Tag: - + Mode: Modo: - + Ordinary Ordinario - + Recursi&ve - + &Materialized - + With no data Sin datos @@ -13535,8 +14063,8 @@ Relación: %1 - Flags: SF FW AW VD - Banderas: SF FW AW VD + Flags: SF FW AW EX VD + @@ -13581,7 +14109,7 @@ Relación: %1 Evento - + /* Could not generate the SQL code. Make sure all attributes are correctly filled! / * No se pudo generar el código SQL. Asegúrese de que todos los atributos se rellenan correctamente! diff --git a/lang/fr_FR.qm b/lang/fr_FR.qm index 7b1f0ecfd4..ebcebe06c4 100644 Binary files a/lang/fr_FR.qm and b/lang/fr_FR.qm differ diff --git a/lang/fr_FR.ts b/lang/fr_FR.ts index c10f2c124d..ba610dacee 100644 --- a/lang/fr_FR.ts +++ b/lang/fr_FR.ts @@ -4,661 +4,647 @@ AboutWidget + About pgModeler À propos de pgModeler - PostgreSQL Database Modeler - PostgreSQL Database Modeler - - - Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. - Outil de modéliation entité-association pour PostgreSQL. Plus aucun ordre LDD à saisir à la main, laissez PgModeler le faire pour vous ! Ce logiciel fusionne le concept de modélisation entité-association et toutes les fonctionnalités étendues que propose PostgreSQL en plus des standards SQL. - - - Design, configure, deploy - Concevoir, configurer, déployer - - - <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" font-size:11pt; font-style:italic; text-decoration: underline; color:#0057ae;">http://pgmodeler.com.br</span></a></p></body></html> - <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" font-size:11pt; font-style:italic; text-decoration: underline; color:#0057ae;">http://pgmodeler.com.br</span></a></p></body></html> - - - pgModeler is proudly a brazilian software! - pgModeler est un logiciel brésilien et fier de l'être! - - - <html><head/><body><p>Copyright 2006-2015 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> - <html><head/><body><p>Copyright 2006-2015 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> - - - Contributors - Contributeurs - - - <html><head/><body><p>This page is dedicated to all contributors who gave a bit of their time in make pgModeler a better software somehow. The complete list of people that helped pgModeler can be found at <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>If you have a great idea to improve pgModeler please submit it <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">here</span></a>. No ideas for now but want to help? Why not donate a few bucks <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">here</span></a>!?</p></body></html> - <html><head/><body><p>Cette page est dédiée à tous les contributeurs qui ont donné un peu de leur temps afin de rendre ce logiciel meilleur d'une manière ou d'une autre. La liste complète des personnes est disponible sur <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>Si vous avez une idée géniable afin d'améliorer pgModeler n'hésitez pas à la soumettre <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">ici</span></a>. Vous n'avez pas d'idée mais vous voulez aider ? Pourquoi ne pas un don <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">ici</span></a> !?</p></body></html> - - - 1 - 1 - - - 2 - 2 - - - 3 - 3 - - - 4 - 4 - - - 5 - 5 - - - 6 - 6 - - - Name - Nom - - - Country - Pays - - - Contribution - Contribution - - - Damien Degois - Damien Degois - - - France - France - - - French UI translation and several improvements in auxiliary scripts. - Francisation IHM et amélioration de scripts. - - - Ji Bin - Ji Bin - - - China - Chine - - - Chinese UI translation and small fixes. - Traduction en lagnue chinoise et quelques corrections. - - - Pierre-Samuel LE STANG - Pierre-Samuel LE STANG + + 0.0.0 + 0.0.0 - French UI translation. - Francisation IHM. + + build: + - Lisandro Damián Nicanor - Lisandro Damián Nicanor + + PostgreSQL Database Modeler + Modeleur de base de données PostgreSQL - Argentina - Argentine + + Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. + Outil open source de modélisation de bases de données PostgreSQL. Plus aucun ordre LDD à saisir à la main, laissez pgModeler le faire pour vous ! Ce logiciel fusionne le concept de modélisation entité-association et toutes les fonctionnalités étendues que propose PostgreSQL en plus des standards SQL. - Russia - Russie + + <html><head/><body><p>Copyright 2006-2018 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.io</span></a>&gt;</p></body></html> + - N/A - Inconnu + + pgModeler is proudly a brazilian software! + pgModeler est un logiciel brésilien et fier de l'être ! - Hide this widget - Cacher ce widget + + <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" text-decoration: underline; color:#2980b9;">https://pgmodeler.io</span></a></p></body></html> + + ... ... - 0.0.0.0 - 0.0.0.0 - - - License - Licence - - - Build: - Build: - - - (CODE_NAME) - - - + (BUILD_NUM) - - - - Improvements on build scripts enabling the custom packaging in Linux distros; Per-user settings; pgModeler's package maintainer in Debian Linux. - - - - Pavel Alexeev - - - - Additional work for packaging in Linux distros; pgModeler's package maintainer in Fedora Linux. - - - - Mariusz Fik - - - - Poland - - - - Custom packaging first ideas. Tester of first version of custom packaging patch. - - - - <a href="http://pgmodeler.com.br">http://pgmodeler.com.br</a> - - - - <html><head/><body><p>Copyright 2006-2016 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> - <html><head/><body><p>Copyright 2006-2015 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> {2006-2016 ?} {0057a?} - - - 7 - 7 - - - 8 - 8 - - - Jonathan DUPRE - - - - Gilberto Castillo - + - Cuba - + + License + - Spanish UI translation. - + + Hide this widget + Cacher ce widget AggregateWidget - Form - Formulaire - - + Final Function: - Fonction finale: + Fonction finale : + Sort Operator: - Opérateur de tri: + Opérateur de tri : + Initial Condition: - Condition initiale: + Condition initiale : + Funtion Inputs Entrées de la fonction + Function State État de la fonction + Transition Func.: - Fonction de transition: + Fonction de transition : + Input Data Type Type de donnée en entrée + State Data Type Type de donnée d'état + An aggregate function that accepts the types <em><strong>typeA</strong></em> and <em><strong>typeB</strong></em> as input types and which type of state is <em><strong>state_type</strong></em>, must obey the following rules: <br/><br/> <strong> &nbsp;&nbsp;&nbsp;• Final Function:</strong> <em>void final_function(<strong>state_type</strong>)</em><br/> <strong> &nbsp;&nbsp;&nbsp;• Transition Function:</strong> <em><strong>state_type</strong> transition_function(<strong>state_type</strong>, <strong>typeA</strong>, <strong>typeB</strong>)</em> - Une fonction d'agrégation qui accepte les types <em><strong>typeA</strong></em> et <em><strong>typeB</strong></em> comme types d'entrées et dont le type d'état est <em><strong>type_etat</strong></em>, doit obéir aux règles suivantes:<br/><br/> <strong> &nbsp;&nbsp;&nbsp;• Fonction Finale:</strong> <em>void fonction_finale(<strong>type_etat</strong>)</em><br/> <strong> &nbsp;&nbsp;&nbsp;• Fonction de Transition,:</strong> <em><strong>type_etat</strong> fonction_transition(<strong>type_etat</strong>, <strong>typeA</strong>, <strong>typeB</strong>)</em> + Une fonction d'agrégat qui accepte les types <em><strong>typeA</strong></em> et <em><strong>typeB</strong></em> en types d'entrée et dont le type d'état est <em><strong>state_type</strong></em>, vous devez respecter les règles suivantes : <br/> <strong>&nbsp;&nbsp;&nbsp;• Fonction finale : </strong><em>void final_function (<strong>state_type</strong>)</em><br/> <strong>&nbsp;&nbsp;&nbsp;• Fonction de transition: </strong><em><strong>state_type</strong> transition_function(<strong>state_type</strong>,<strong>typeA</strong>, <strong>typeB</strong>)</em> AppearanceConfigWidget + Form Formulaire + Element: - Élement: + Élément : + Global: Font style - Global: Style de police + Global : Style de police + Global: Constraints descriptor - Global: Marqueurs de contraintes + Global : Marqueurs de contraintes + Global: Object selection - Global: Selection d'objet + Global : Sélection d'objet + Global: Position hint text - Global: Texte de la boite de coordonées + Global : Texte de la boite de coordonnées + Global: Position hint box - Global: Fond de la boite de coordonées + Global : Fond de la boite de coordonnées + Global: Objects type - Global: Type de colonne + Global : Type de colonne + Global: Lock arc - Global: Cadenas (objet vérouillé, couleur de l'arceau) + Global : Cadenas (objet verrouillé, couleur de l'arceau) + Global: Lock body - Global: Cadenas (objet vérouillé, couleur du corps) + Global : Cadenas (objet verrouillé, couleur du corps) + Table: Schema name - Table: Nom du schema + Table : Nom du schéma + Table: Table name - Table: Nom de la table + Table : Nom de la table + Table: Columns box - Table: Zone des colonnes + Table : Zone des colonnes + Table: Extended attributes box - Table: Zone d'attributs étendus + Table : Zone d'attributs étendus + Table: Title box - Table: Zone de titre + Table : Zone de titre + Rule: Name - Règle: Nom + Règle : Nom + Rule: Descriptor - Règle: Couleur de l'icône + Règle : Couleur de l'icône + Index: Name - Index: Nom + Index : Nom + Index: Descriptor - Index: Couleur de l'icône + Index : Couleur de l'icône + Trigger: Name - Déclencheur: Nom + Déclencheur : Nom + Trigger: Descriptor - Déclencheur: Couleur de l'icône + Déclencheur : Couleur de l'icône + View: Schema name - Vue: Nom du schema + Vue : Nom du schéma + View: View name - Vue: Nom de la vue + Vue : Nom de la vue + View: References box - Vue: Couleur d'arriere plan + Vue : Couleur d'arrière plan + View: Extended attributes box - Vue: Dialogue des attributs étendus + Vue : Dialogue des attributs étendus + View: Title box - Vue: Couleur d'arriere plan de la barre de titre + Vue : Couleur d'arrière plan de la barre de titre + View: Table / columns alias - Vue: Alias de table / colonne + Vue : Alias de table / colonne + View: Referenced column - Vue: Colonne référencée + Vue : Colonne référencée + View: Referenced table - Vue: Table référencée + Vue : Table référencée + View: Reference descriptor - Vue: Couleur de l'icône des références + Vue : Couleur de l'icône des références + Textbox: Body - Zone de texte: Corps + Zone de texte : Corps + Column: Column name - Colonne: Nom de la colonne + Colonne : Nom de la colonne + Column: Descriptor - Colonne: Couleur de l'icône + Colonne : Couleur de l'icône + Column: Included / Inherited by relationship - Colonne: Incluses / Héritées par associations + Colonne : Incluses / Héritées par associations + Column: Protected - Colonne: Protégée + Colonne : Protégée + Column (pk): Column name - Colonne (pk): Nom de la colonne + Colonne (pk) : Nom de la colonne + Column (pk): Descriptor - Colonne (pk): Couleur de l'icône + Colonne (pk) : Couleur de l'icône + Column (fk): Column name - Colonne (fk): Nom de la colonne + Colonne (fk) : Nom de la colonne + Column (fk): Descriptor - Colonne (fk): Couleur de l'icône + Colonne (fk) : Couleur de l'icône + Column (uq): Column name - Colonne (uq): Nom de la colonne + Colonne (uq) : Nom de la colonne + Column (uq): Descriptor - Colonne (uq): Couleur de l'icône + Colonne (uq) : Couleur de l'icône + Column (nn): Column name - Colonne (nn): Nom de la colonne + Colonne (nn) : Nom de la colonne + Column (nn): Descriptor - Colnne (nn): Couleur de l'icône + Colonne (nn) : Couleur de l'icône + Relationship: Descriptor - Associations: Couleur de l'icône + Associations : Couleur de l'icône + Relationship: Label text - Associations: Texte de l'étiquette + Associations : Texte de l'étiquette + Relationship: Label box - Relations: Arrière plan de l'étiquette + Relations : Arrière plan de l'étiquette + Relationship: Attribute text - Relations: Texte des attributs + Relations : Texte des attributs + Relationship: Attribute descriptor - Relations: Couleur de l'icône des attributs + Relations : Couleur de l'icône des attributs + Tag: Name Nom + Tag: Body Corps + Font: - Police: + Police : + pt pt + Bold Gras + Italic Italique + Colors: - Couleur: + Couleur : + Underline Souligné + Placeholder: Body - + Placeholder : Corps + + + + Constraint: Name + Contrainte : Nom + + + + Constraint: Descriptor + Contrainte : Descripteur Application + Unknown exception caught! - Exception inconnue générée! + Exception inconnue générée ! + Failed to create initial configuration in `%1'! Check if the current user has write permission over that path and at least read permission over `%2'. - Impossible de créer les fichiers de configuration initiale dans `%1'! Vérifiez si vous avez la permission d'écriture dans ce dossier. Vérifiez l'existence et d'avoir les droits en lecture sur le dossier `%2'. + Impossible de créer les fichiers de configuration initiaux dans `%1' ! Vérifiez que le dossier existe que vous avez la permission d'écriture dans `%2'. + + + + BaseConfigWidget + + + A backup of the previous settings was saved into <strong>%1</strong>! + Une sauvegarde des paramètres précédents a été enregistrée dans <strong>%1</strong> ! BaseForm + Dialog Dialogue + + &Apply &Appliquer - &Cancel - A&nnuler - - + &Ok &Ok + + &Cancel + A&nnuler + + + %1 properties - + %1 propriétés BaseObject + Column Colonne + Constraint Contrainte + Function Fonction + Trigger Déclencheur + Index Index + Rule Règle + Table Table + View Vue + Domain Domaine + Schema Schéma + Aggregate Fonction d'agrégat + Operator Opérateur + Sequence Séquence + Role Rôle + Conversion Convertion + Cast Convertion de type + Language Langage + Type Type + Operator Family Famille d'opérateurs + Operator Class Classe d'opérateurs + Database Base de données + Extension Extension + Relationship Relation + Collation Collation + Textbox - Zone de texte + Boite de texte + Event Trigger Déclencheur sur évènement + + Policy + Politique + + + Permission Permission + Parameter Paramètre + Type Attribute Attribut de type + Basic Relationship Relation simple + Tag - Tag + Balise + + + + Generic SQL + SQL générique + new_object - IMPOSSIBLE ! PROBLEME AU LANCEMENT SI %N EST PRESENT nouvel_objet nouveaux_objets + Tablespace - Intuitif - Tablespace + Espace de stockage BaseObjectView + SQL off SQL désactivé @@ -666,287 +652,293 @@ BaseObjectWidget - Form - Formulaire - - + Name: - Nom: + Nom : + ID: - Identifiant: + Identifiant : + icone icône + Comment: - Commentaire: + Commentaire : + Tablespace: - Tablespace: + Espace de stockage : + Edit object's permissions - Editer les permissions de l'objet + Modifier les permissions de l'objet + Disables the generated SQL code using comment tokens (--). This will disable the code of all child and referrer objects. - Désactivez le SQL généré en utilisant les marqueurs de commentaire (--). -Ceci désactivera le SQL pour les objets enfants dont cet objet est le parent. + Désactivez le code SQL généré en utilisant les marqueurs de commentaire (--). +Ceci désactivera également le code SQL pour ses objets enfants. + Append or prepend a set of SQL commands to the object's definition. - Doutes Ajouter des commandes SQL avant ou après la définition de cet objet. + Custom SQL Code SQL Libre + Owner: - Propriétaire: + Propriétaire : + Schema: - Schéma: + Schéma : + Disable SQL code Désactiver le code SQL + Collation: - Collation: + Collation : + Edit permissions - Editer les permissions + Modifier les permissions + This object is protected thus no change in form will be applied to it. - L'objet est vérouillé, par conséquent aucun changement dans le formulaire ne lui sera appliqué. - - - Create / Edit: - Créer / Éditer: + L'objet est verrouillé, par conséquent aucun changement dans le formulaire ne lui sera appliqué. + Required field. Leaving this empty will raise errors! - Champ requis. Laisser ce champ vide génèrera une erreur! + Champ requis. Laisser ce champ vide génèrera une erreur ! + Value(s) Valeur(s) + Version - Version - - - The <em style='color: %1'><strong>highlighted</strong></em> fields on the form are available only on specific PostgreSQL versions. When generating SQL code for versions other than those specified on fields' tooltips pgModeler will ignore their values. - Les champs en <em style='color: %1'><strong>surbrillance</strong></em> dans le formulaire sont disponibles pour certaines versions de PostgreSQL uniquement. Ils seront ignorés s'il est demandé un export SQL pour une version de PostgreSQL non spécifiée dans l'infobulle du champ. + + The <em style='color: %1'><strong>highlighted</strong></em> fields in the form or one of their values are available only on specific PostgreSQL versions. Generating SQL code for versions other than those specified in the fields' tooltips may create incompatible code. - + Les champs <em style='color:%1'><strong>en surbrillance</strong></em> dans le formulaire ou de l'une des valeurs ne sont disponibles que sur des versions spécifiques de PostgreSQL. La génération de code SQL pour des versions autres que celles spécifiées dans les info-bulles des champs peut créer un code incompatible. BaseRelationship + rel_%1_%2 rel_%1_%2 + + BaseTableView + + + Toggles the extended attributes display + (Dés)activer l'affichage des attributs étendus + + + + Connected rels: %1 + Rels connectés : %1 + + BugReportForm + Bug Report Signaler un bug + Bug report Signaler un bug + Create Créer + &Cancel A&nnuler + Use the form below to generate a complete bug report. Please, try to be as clear as possible when describing the actions that can reproduce the bug. Additionally, it's important to attach a sample database model so that the bug can be quickly discovered and fixed! Utilisez le formulaire ci-dessous pour générer un rapport d'erreur complet. Merci d'être le plus clair possible dans la description de vos actions afin que le bug puisse être reproduit. De plus, il est important de joindre un modèle de base dans lequel le bug puisse être rapidement découvert, et par la même occasion rapidement corrigé ! + Report Rapport + Issue details Détails du problème + Output: Sortie : + Select the report's output folder Sélectionnez un dossier de sortie pour écrire le rapport d'erreur + + ... ... + <html><head/><body><p>If you prefer it's possible to report this issue anytime on pgModeler's project repository at <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#0057ae;">GitHub</span></a>. </p></body></html> - <html><head/><body><p>Il vous est également possible de signaler un bug à tout moment via le dépôt du projet pgModeler sur <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#0057ae;">GitHub</span></a>. </p></body></html> + <html><head/><body><p>Il vous est également possible de signaler un bug à tout moment via le dépôt du projet pgModeler sur <a href="http ://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration : underline; color :#0057ae;">GitHub</span></a>. </p></body></html> + Database Model Modèle de base - In none occasion the models sent within the report will be published. They are kept safe and are used only for debug purpose. - Les modèles de base de données joints avec les rapports d'erreur NE SONT EN AUCUN CAS publiés. Ils ne sont utilisés qu'à des fins de debogage. - - + Attach the below database model file to be debugged. Joindre le fichier modèle ci-dessous pour débogage. + Attach a different database model Joindre un autre modèle de base + Bug report successfuly generated! Please, send the file <strong>%1</strong> to <em>%2</em> in order be analyzed. Thank you for the collaboration! Le rapport de bug a été généré avec succès ! S'il vous plait, veuillez envoyer le fichier <strong>%1</strong> à <em>%2</em> pour expertise. Merci de votre collaboration ! + Load model - Sélectionner un modèle + Charger un modèle + Database model (*.dbm);;All files (*.*) Modèle de base de données (*.dbm);; Tous les fichiers (*.*) + Select report output folder - Sélection du dossier de sortie + Sélectionner le dossier de sortie du rapport - CastWidget + BulkDataEditWidget - Form - Formulaire + + Bulk data edit + Modification de données en masse + + + CastWidget + Conversion Func.: - Fonction de conversion: + Fonction de conversion : + Cast Type: - Conversion de type: - - - Explicit - Explicite - - - Implicit - Implicite + Conversion de type : + Assignment Affectation + Input / Output Entrée / Sortie + Source data type Type de donnée source + Target data type Type de donnée cible + The function to be assigned to a cast from <em><strong>typeA</strong></em> to <em><strong>typeB</strong></em> must have the following signature: <em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>. - La fonction à affecter à une convertion de <em><strong>typeA</strong></em> vers <em><strong>typeB</strong></em> doit avoir la signature suivante: <em><strong>typeB</strong> fonction(<strong>typeA</strong>, integer, boolean)</em>. + La fonction convertissant de <em><strong>typeA</strong></em> vers <em><strong>typeB</strong></em> doit avoir la signature suivante : <em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>. + I&mplicit - + I&mplicite + E&xplicit - - - - - Catalog - - Object type: %1 - ? - - Type d'objet: %1 - Types d'objets: %1 - - - - - CentralWidget - - Form - Formulaire - - - New model - Nouveau modèle - - - Open model - Ouvrir modèle - - - Sample models - Modèles de démo - - - Recent models - Modèles récents - - - Last session - Dernière session + E&xplicite CodeCompletionWidget - Make persistent - Rentre persistant + + Make &persistent + Rendre &persistant + Makes the widget closable only by ESC key or mouse click on other controls. Rendre ce widget refermable uniquement par la touche Échap ou par un clic sur les autres contrôles. + SQL Keyword Mot-clé SQL + (no items found.) (aucun élément trouvé.) @@ -954,30 +946,33 @@ Ceci désactivera le SQL pour les objets enfants dont cet objet est le parent. CollationWidget - Form - Formulaire - - + Locale: - Locale: + Locale : + Encoding: - Encodage: + Encodage : + LC_COLLATE: - LC_COLLATE: + LC_COLLATE : + LC_CTYPE: - LC_CTYPE: + LC_CTYPE : + The fields <strong><em>Collation</em></strong>, <strong><em>Locale</em></strong>, <strong><em>LC_COLLATE & LC_CTYPE</em></strong> are mutually exclusive, so you have to set only one of them in order to properly handle a collation. - Les champs <strong><em>Collation</em></strong>, <strong><em>Locale</em></strong> et <strong><em>LC_COLLATE & LC_CTYPE</em></strong> sont mutuellement exclusifs, vous ne devez en définir qu'un de manière à gérer correctement la collation. + Les champs <strong><em>Collation</em></strong>, <strong><em>Locale</em></strong> et <strong><em>LC_COLLATE & LC_CTYPE</em></strong> sont mutuellement exclusifs, vous ne devez en définir qu'un seul de manière à gérer correctement la collation. + + Not defined Non défini @@ -985,18 +980,22 @@ Ceci désactivera le SQL pour les objets enfants dont cet objet est le parent. ColorPickerWidget + Form Formulaire + Generate random color(s) Génération aléatoire de couleur(s) + Alt+R Alt+R + Select color Sélectionner une couleur @@ -1004,2272 +1003,3003 @@ Ceci désactivera le SQL pour les objets enfants dont cet objet est le parent. ColumnWidget - Form - Formulaire - - + Default Value: - Valeur par défaut: + Valeur par défaut : - Expression: - Expression: + + E&xpression: + E&xpression : - NOT NULL - Non-Null + + &NOT NULL + &NON NULL - Sequence: - Séquence: + + Se&quence: + Sé&quence : - E&xpression: + + Edit the underlying sequence's attributes - &NOT NULL + + Edit sequence - Se&quence: - + + Identity: + Identité : ConfigurationForm + pgModeler Configuration Paramètres de pgModeler + Relationships Associations + Appearance Apparence + Connections Connexions + Snippets - Snippets + Extraits de code + &Apply &Appliquer + &Cancel A&nnuler + Defaults Défauts + General Général + Plug-ins Extensions - Any modification made until now in the current section will be lost! Do you really want to restore default settings? - Toutes les modifications réalisées jusqu'à présent dans la section actuelle seront perdues! Souhaitez vous réellement restaurer les paramètres par défaut? + + In some cases restore the default settings related to it may solve the problem. Would like to do that? + Dans certains cas, restaurer les paramètres liés par défaut peut résoudre le problème. Voulez-vous le faire ? + + + + Restore + Restaurer - - - Connection - ERROR: trying to open an already stablished connection. - ERREUR: impossible de démarrer une connection déjà établie. + + Any modification made until now in the current section will be lost! Do you really want to restore default settings? + Toutes les modifications réalisées jusqu'à maintenant dans la section actuelle seront perdues ! Souhaitez-vous réellement restaurer les paramètres par défaut ? ConnectionsConfigWidget - Form - Formulaire - - + Connections: - Connexions: + Connexions : + Create new connection Créer une nouvelle connexion + Cancel edition Annuler l'édition + Duplicate the selected connection Dupliquer la connexion sélectionnée + Edit selected connection - Editer la connexion sélectionnée + Modifier la connexion sélectionnée + Delete selected connection Supprimer la connexion sélectionnée + Connection Alias: - Alias de la connexion: + Alias de la connexion : + Connection DB: - Nom de la base: + Nom de la base : + Host/Port: - Hôte/Port: + Hôte/Port : + User: - Utilisateur: + Utilisateur : + Password: - Mot de passe: + Mot de passe : + Timeout: - Délai d'expiration: + Délai d'expiration : + second(s) seconde(s) + SSL Mode: - Mode SSL: + Mode SSL : + Disable Désactivé + Allow Autorisé + Require Requis + AC verification Vérification des AC + Full verification Vérification complète + Client Certificate: - Certificat Client: + Certificat client : + ~/.postgresql/postgresql.crt ~/.postgresql/postgresql.crt + Automatically browses the named database when using this connection to manage databases on <strong>Manage</strong> view. - Parcourir et afficher automatiquement le contenu de la base de données indiquée ci-contre lors de l'utilisation de cette connexion dans le <strong>Manager</strong>. + Parcourt automatiquement la base de données nommée lors de l'utilisation de cette connexion pour gérer les bases de données dans la vue <strong>Gérer</strong>. + Auto browse Toujours montrer + Client Key: - Clef client: + Clé client : + ~/.postgresql/postgresql.key ~/.postgresql/postgresql.key + Root Certificate: - Certificat racine: + Certificat racine : + ~/.postgresql/root.crt ~/.postgresql/root.crt + Revoked Certs.: - Liste de révocations: + Liste de révocations : + ~/.postgresql/root.crl ~/.postgresql/root.crl - Kerberus Server: - Serveur Kerberos: - - + Force GSSAPI Forcer GSSAPI - Options: - Options: - - + Add Ajouter + Update Mettre à jour + Test Tester + Success Succès - Connection successfuly stablished! - -Server details: - -PID: `%1' -Protocol: `%2' -Version: `%3' - Connexion établie avec succès! - -Détails du serveur : - -PID: `%1' -Protocole: `%2' -Version: `%3' - - - There is an unsaved connection! Want to save it? - Le paramétrage de la connexion n'a pas été sauvegardé! Voulez-vous enregistrer les changements? - - + + Edit database connections - + Modifier les connexions de la base de données + General - Général + Général + Other params: - + Autres paramètres : + Specify additional connection parameters in the form [param]=[value]. These parameters are described in the <strong>libpq</strong> chapter at PostgreSQL docs. - + Spécifier des paramètres de connexion supplémentaires sous la forme [param]=[valeur]. Ces paramètres sont décrits dans le chapitre <strong>libpq</strong> de la doc de PostgreSQL. + Default for: - + Par défaut pour : + Diff - Différencier + Différencier + Export - Exporter + Exporter + Import - Importer + Importer + Validation - + Validation + Security - + Sécurité + Kerberos Server: - + Serveur Kerberos : + Indicates in which operations (diff, export, import or validation) the connection is used if none is explicitly specified by the user. - + Indique dans quelles opérations (differencier, exporter, importer ou validation) la connexion est utilisée si aucune n'est explicitement spécifiée par l'utilisateur. - There is a connection being created or edited! Do you want to save it? - - + + Connection successfully established! + +Server details: + +PID: `%1' +Protocol: `%2' +Version: `%3' + Connexion établie avec succès ! + +Détails du serveur : + +PID : `%1' +Protocole : `%2' +Version : `%3' + + + + There is a connection being created or edited! Do you want to save it? + Une connexion est en cours de création ou d'édition ! Voulez-vous la sauvegarder ? + + Found %1 connection(s) - + %1 connexion(s) trouvée(s) + No connections found - + Aucune connexion trouvée + Edit connections - + Modifier les connexions ConstraintWidget - Form - Formulaire - - + Constraint Type: - Type de contrainte: + Type de contrainte : + Fill Factor: - Taux de remplissage: + Taux de remplissage : + Match: - Comparaison: + Comparaison : + This attribute cannot be changed once the object is created. Cet attribut ne peut pas être modifié une fois l'objet créé. + Expression: - Expression: + Expression : + Deferrable: - Différable: + Reportable : + Deferral: - Report: + Report : + ON DELETE: - ON DELETE: + ON DELETE : + ON UPDATE: - ON UPDATE: + ON UPDATE : + Columns Colonnes + + Column: - Colonne: + Colonne : + Referenced Columns Colonnes référencées + Table: - Table: + Table : + Indexing: - Indexation: + Indexation : + Exclude Elements - Élements exclus + Éléments exclus + No inherit: - Pas d'héritage: + Pas d'héritage : + + Column Colonne + + Type Type + Columns which were included by relationship can not be added / removed manually from the primary key. If done such changes they can raise errors. To create primary key using columns included by relationship use the following options: identifier field, attributes & constraints tab or primary key tab on the relationship form. - Les colonnes inclues dans la relation de peuvent être ajoutées/retirés manuellement de la clef primaire sous peine d’erreur. Pour créer une clef primaire utilisant des colonnes contenues dans une relation, veuillez utiliser une des options suivantes: champ identifiant, l'onglet attributs et contraintes ou l'onglet clef primaire du formulaire de la relation. + Les colonnes inclues dans la relation ne peuvent être ajoutées/retirées manuellement de la clé primaire sous peine d’erreur. Pour créer une clé primaire utilisant des colonnes contenues dans une relation, veuillez utiliser une des options suivantes: champ identifiant, l'onglet attributs et contraintes ou l'onglet clé primaire du formulaire de la relation. ConversionWidget - Form - Formulaire - - + Source Encoding: - Encodage de la source: + Encodage de la source : + Target Encoding: - Encodage de la destination: + Encodage de la destination : + Conversion Func.: - Fonction de conversion: + Fonction de conversion : + Default Conversion: - Convertion par défaut: + Conversion par défaut : + The function to be assigned to an encoding conversion must have the following signature: <em>void function(integer, integer, cstring, internal, integer)</em>. - La fonction à affecter à une convertion d'encodage doit avoir la signature suivante: <em>void function(integer, integer, cstring, internal, integer)</em>. + La fonction de convertion d'encodage doit avoir la signature suivante : <em>void function(integer, integer, cstring, internal, integer)</em>. CrashHandlerForm + Crash Handler Gestionnaire d'incident + Stack trace - Piles d'exécution + Pile d'exécution + Input: - Entrée: + Entrée : + Load report file for analysis - Ouvrir un rapport d'erreur pour analyse + Charger un rapport d'erreur pour analyse + Save the attached model file on the filesystem - Sauvegarder le modèle joint sur le système de fichiers + Enregistrer le modèle joint sur le système de fichiers + pgModeler bug report (*.bug);;All files (*.*) Rapport de bug pgModeler (*.bug);;Tous les fichiers (*.*) + Load report - Ouvrir un rapport d'erreur + Charger un rapport + Save model Enregistrer le modèle + Database model (*.dbm);;All files (*.*) Modèle de base de données (*.dbm);; Tous les fichiers (*.*) + Crash handler Gestionnaire d'incident + Bug report analysis mode activated. Mode d'analyse de rapport d'erreur activé. + Oops! pgModeler just crashed! - Oh oh! pgModeler s'est planté ! + Oups ! pgModeler a planté ! + We apologize for what happened! It is clear that a nasty bug caused that. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. - Nous vous prions de nous excuser pour ce qui vient de se passer ! Il est clair qu'un vilain bug soit à l'origine de tout cela. Veuillez renseigner le formulaire ci-dessous en décrivant les actions qui vous avez faites avant que pgModeler ne sombre de manière inopinée. Ceci nous aidera à exterminer ce bug et ainsi améliorer le logiciel. + Veuillez nous excuser pour ce qui vient de se passer ! Il est clair qu'un vilain bug est à l'origine de tout cela. Veuillez renseigner le formulaire ci-dessous en décrivant les actions que vous avez faites avant que pgModeler ne sombre de manière inopinée. Cela nous aidera à exterminer ce bug et ainsi, à améliorer le logiciel. - CustomSQLWidget + CsvLoadWidget + Form - Formulaire + Formulaire + + + + Load CSV + Charger un fichier CSV + + + + CSV File: + Fichier CSV : + + + + Select output file + Sélectionner un fichier de sortie + + + + ... + + + + + Separator: + Séparateur : + + + + Use the first row as column names in the CSV file. By unchecking this option the first row is used as data. + Utiliser la 1ère ligne comme noms de colonne pour le fichier CSV. En décochant cette option, la 1ère ligne est utilisée comme données. + + + + Columns in the first row + Colonnes dans la 1ère ligne + + + + Load + Charger + + + + Semicolon (;) + Point virgule (;) + + + + Comma (,) + Virgule (,) + + + + Space + Espace + + + + Tabulation + + + + + Other + Autre + + + + ; + + + + + Text delimiter: + Délimiteur : + + + + " + + + + + Load CSV file + Charger un fichier CSV + + Comma-separted values (*.csv);;All files (*.*) + Valeurs séparées par une virgule (*.csv);;Tous les fichiers (*.*) + + + + CustomSQLWidget + + SQL code Code SQL + Puts an SELECT command template at current cursor position. Insère une commande SELECT à la position courante du curseur. + &SELECT &SELECT + Puts an INSERT command template at current cursor position. Insère une commande INSERT à la position courante du curseur. + &INSERT &INSERT + Puts an UPDATE command template at current cursor position. Insère une commande UPDATE à la position courante du curseur. + Puts an DELETE command template at current cursor position. Insère une commande DELETE à la position courante du curseur. + &DELETE &DELETE + &Clear E&ffacer + Append SQL Code SQL suffixé + + Append the SQL code at the very end of model definition. Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE command. Ajouter le code SQL à la toute fin de la définition du modèle Sinon (décoché) pgModeler ajoutera ce code après la commande SQL CREATE DATABASE. + Append at end of model definition. Suffixer à la fin de la définition du modèle. + Prepend SQL Code SQL préfixé + Prepend at beginning of model definition. Préfixer au tout début de la définition du modèle. + <html><head/><body><p>Use custom commands with extreme caution because you can change the semantics of the entire model when running SQL validation or export processes. Additionally, depending on the amount of commands, those processes can have their performance sensibly degradated.</p></body></html> <html><head/><body><p>Utilisez cet espace pour y inscrire vos commandes SQL personnalisées avec précaution. Vous pourriez créer des incohérences qui peuvent interférer avec les fonctionnalités de validation et d'export du modèle. De plus, selon la nature des commandes entrées ces fonctionnalités peuvent être ralenties.</p></body></html> - Append / Prepend SQL code - Code SQL préfixé/suffixé - - - Type: - Type: - - + Generic INSERT INSERT générique + Include serial columns - Inclure les colonnes de type "serial" + Inclure les colonnes en série + Exclude serial columns - Exclure les colonnes de type "serial" + Exclure les colonnes en série + Generic SELECT - SELECT générique + Faut-il le traduire ? + + Table SELECT - Table SELECT + Faut-il le traduire ? + + Generic UPDATE - UPDATE générique + Faut-il le traduire ? + + Table UPDATE - Table UPDATE + Faut-il le traduire ? + + Generic DELETE - DELETE générique + Faut-il le traduire ? + + Table DELETE - Table DELETE + Faut-il le traduire ? + + &UPDATE - &UPDATE + Faut-il le traduire ? + + Add custom SQL code - + Ajouter un code SQL personnalisé DataManipulationForm + Data Manipulation Édition des données + &Close &Fermer - Rows returned: - Lignes retournées: - - - 0 - 0 - - - Maximum limit of listed rows - Nombre maximum de lignes en retour de résulat - - - (Limit: 0) - (Limit: 0) - - - Empty values are assumed as <strong>DEFAULT</strong>. To use special values like <strong>NULL</strong>, a function call like <strong>now()</strong> or a specific data escaping, enclose values in <strong>&lt;&gt;</strong>. To use <strong>&lt;</strong> or <strong>&gt;</strong> as part of the value prepend the backslash character, e.g., <strong>\&lt;</strong> or <strong>\&gt;</strong>. - Les valeurs vides sont affichées en tant que <strong>DEFAULT</strong>. Pour utiliser les valeurs spéciales telles que <strong>NULL</strong>, un appel à une fonction comme <strong>now()</strong> ou toute autre fonction d'échappement spécifique, entourez ces valeurs/fonctions avec <strong>&lt;&gt;</strong>. Pour utiliser <strong>&lt;</strong> ou <strong>&gt;</strong> en tant que caractères à part entière, protégez-les avec un antislash : <strong>\&lt;</strong> ou <strong>\&gt;</strong>. - - + Refresh listing Actualiser la liste - Refresh - Actualiser - - + F5 F5 + Save changes Enregistrer les changements - Save - Enregistrer - - + Ctrl+S Ctrl+S - Copy the selection as CSV buffer - Copier la sélection avec un formatage de type CSV - - - Copy - Copier - - - Ctrl+C - Ctrl+C - - + Export results to CSV file Exporter les résultats vers un fichier CSV - Export - Exporter - - + Ctrl+X Ctrl+X + Undo modifications Annuler les modifications - Undo - Annuler - - + Ctrl+Z Ctrl+Z - Add data - Ajouter une ligne - - - Add - Ajouter - - + + Ins Ins + Mark the selected rows to be deleted Marquer les lignes sélectionner pour suppression - Delete - Supprimer - - + + + + + Del Suppr + Filter the result set Filtrer les résultats + Table: - Table: + Table : + Schema: - Schéma: + Schéma : + in dans + Hide views Masquer les vues + Filter expression Expression pour filtrer + Order && Limit - Order && Limit + Ordre && Limite + Column: - Colonne: + Colonne : + Limit in: - Limit : - - - 000000 - 000000 - - - 100 - 100 - - - results - lignes + Limite : + Add Item Ajouter un élément + Remove Item Supprimer un élément + Clear the order by columns list Effacer la liste + Move selected item up Déplacer vers le haut + Move selected item down Déplacer vers le bas + + Copy as CSV + Copier en CSV + + + + Copy as text + Copier en texte + + + + Copy items + Copier les éléments + + + + Pase items + Coller les éléments + + + + Browse tables + Navigateur de tables + + + + Duplicate row(s) + Dupliquer ligne(s) + + + + Delete row(s) + Effacer ligne(s) + + + + Edit cell(s) + Modifier cellule(s) + + + <em>(Limit: <strong>%1</strong>)</em> - <em>(Limit: <strong>%1</strong>)</em> + <em>(Limite : <strong>%1</strong>)</em> + + + + Column + Colonne + No objects found Aucun objet trouvé + Found %1 object(s) - %1 objets trouvés + %1 objet(s) trouvé(s) + Views can't have their data handled through this grid, this way, all operations are disabled. - Les données des vues ne sont pas modifiables par le biais de cette grille de résultats, de ce fait, aucune opération de modification n'est permise. + Les données des vues ne sont pas modifiables via cette grille, de ce fait, toutes les opérations sont bloquées. + The selected table doesn't owns a primary key! Updates and deletes will be performed by considering all columns as primary key. <strong>WARNING:</strong> those operations can affect more than one row. - La table sélectionnée ne comporte pas de clé primaire ! Les mises à jour et les suppressions seront réalisées en considérant que l'ensemble des colonnes constitue une clé primaire. <strong>ATTENTION:</strong> ces opérations peuvent affecter plus d'une ligne. + La table sélectionnée n'a pas sa propre clé primaire ! Les mises à jour et les suppressions seront réalisées en considérant que l'ensemble des colonnes constitue une clé primaire. <strong>ATTENTION :</strong> ces opérations peuvent affecter plus d'une ligne. + + + + Referenced tables + Tables référencées + + + + + (none) + (aucun) + + + + Referrer tables + Tables de référence + This row is marked to be %1 - Cette ligne est estampillée pour être %1 + Cette ligne est marquée pour être %1 + deleted - supprimée + supprimé + updated mise à jour + inserted - insérée + inséré + [binary data] [données binaires] + <strong>WARNING:</strong> Once commited its not possible to undo the changes! Proceed with saving? - <strong>ATTENTION:</strong> Une fois validés (Commit), il ne sera plus possible d'annuler les changements ! Sauvegarder les changements ? + <strong>ATTENTION :</strong> Une fois validés, il ne sera plus possible d'annuler les changements ! Sauvegarder les changements ? + + + + delete + effacer + update - update + mettre à jour + insert - insert + inserer + ASC - Intuitif ASC + DESC - Intuitif DESC - delete - delete - - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> - - - + Add empty rows - + Ajouter des lignes vides + Duplicate the selected rows - - - - Duplicate - + Dupliquer les lignes sélectionnées + Ctrl+D - + Ctrl+D + results (Use <strong>0</strong> for no limit) - + résultats (Utiliser <strong>0</strong> pour ne pas limiter) + <strong>WARNING: </strong> There are some changed rows waiting the commit! Do you really want to discard them and retrieve the data now? - + <strong>ALERTE :</strong> Des lignes modifiées attendent d'être soumises ! Voulez-vous vraiment les jeter et récupérer les données maintenant ? + Rows returned: <strong>%1</strong>&nbsp;&nbsp;&nbsp; - + Lignes retournées : <strong>%1</strong>&nbsp;&nbsp;&nbsp; + none - + aucun - - - DatabaseExplorerWidget - Form - Formulaire + + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + <html><head/><body><p>Les valeurs vides sont supposées être <span style="font-weight :600;">DEFAULT</span>. Pour utiliser des valeurs spéciales comme <span style="font-weight :600;">NULL</span>, un appel de fonction comme <span style="font-weight :600;">now()</span> ou un échappement des données spécifiques, entourer les valeurs de deux barres obliques, par exemple <span style="font-weight :600;">/valeur/</span>. Pour utiliser une barre oblique dans le cadre de la valeur, ajouter le caractère barre oblique inverse, par exemple <span style="font-weight :600;">/</span>.</p></body></html> - Toggles the display of system objects. - Basculer l'affichage des objets système. + + Copy items on the grid + Copier les éléments sur la grille - Sys. objects - Objets syst. + + Paste items on the grid + Copier les éléments sur la grille - Toggles the display of extension objects - Basculer l'affichage des objets issus des extensions + + Ctrl+V + - Ext. objects - Objets ext. + + Browse referenced tables + Parcourir les tables référencées - Open the grid to visualize or edit data. - Ouvre l'éditeur de données. + + Add new rows from a CSV file + Ajouter de nouvelles lignes depuis un fichier CSV - Data &Grid - &Grille des données + + Change the values of all selected cells at once + Modifier d'un coup les valeurs de toutes les cellules sélectionnées - Alt+G - Alt+G + + Ctrl+E + Ctrl+E + + + DatabaseExplorerWidget - Open a new SQL execution pane. - Ouvre un nouvel onglet d'exécution SQL. + + Form + Formulaire - ... - ... + + + Data &Grid + &Grille des données - Ctrl+F5 - Ctrl+F5 + + + Alt+G + Alt+G - Update the objects tree. - Actualiser l'arbre des objets. + + + + + + ... + ... + Expands all items Ouvre tous les nœuds de l'arborescence + Collapses all items Ferme tous les nœuds de l'arborescence + Filter: - Filtrer: + Filtrer : + By OID Par OID + + Attribute Attribut + Value Valeur - Show raw attributes names - Afficher le nom réel des attributs - - + (not found, OID: %1) - (inconnu, OID: %1) + (OID: %1 non trouvé) + By value - Par valeur + Par valeur + Collatable - Collatable - - - Collation - Collation + Assemblable + + Constraint - Contrainte + Contrainte + Default - Défaut + Défaut + Definition - Définition - - - Dimension - Dimension + Définition + Element - Élement + Élément + Encrypted - Encrypté + Chiffré + Enumerations - Énumérations - - - Expression - Expression + Énumérations + Function - Fonction + Fonction + Language - Langage + Langage + Length - Longueur + Longueur + Library - Bibliothèque + Bibliothèque + Materialized - Matérialisée + Matérialisée + Name - Nom - - - Permissions - Permissions + Nom + Precision - Précision + Précision + Preferred - Préféré + Préféré + Schema - Schéma + Schéma + Storage Stockage + Superuser Super utilisateur + Tablespace - Espace de stockage logique - - - Type - Type + Espace de stockage + Unlogged - Unlogged + Déconnecté + Validity - Validité + Validité + Subtype - Sous-type + Sous-type - Arguments - Arguments + + + + Columns + Colonnes - Table - Table + + Event + Évènement - Columns - Colonnes + + Client encoding + Codage du client - Event - Evènement + + Configuration file + Fichier de configuration - Unique - Unique + + Data directory + Dossier de données - Snippets - Snippets + + Dynamic library path + Chemin de la bibliothèque dynamique - Drop object - Supprimer l'objet + + Dynamic shared memory + Mémoire partagée dynamique - Drop cascade - Supprimer en cascade + + Hba file + Fichier hba - Truncate - Truncate + + Listen addresses + Écouter des adresses - Trunc. cascade - Trunc. cascade + + Max. connections + Connexions max. - Show data + + Listen port + Écouter port + + + + Server encoding + Encodage serveur + + + + SSL ca file + Fichier ca SSL + + + + SSL cert file + Fichier cert SSL + + + + SSL crl file + Fichier crl SSL + + + + SSL key file + Fichier clé SSL + + + + Server version + Version serveur + + + + Ident file + Fichier d'identité + + + + Password encryption + Mot de passe de chiffrement + + + + Connection ID + ID connexion + + + + Server PID + PID serveur + + + + Server protocol + Protocole serveur + + + + Identity + Identité + + + + Command + Commande + + + + Roles + Rôles + + + + Show objects filter + Afficher les objets filtrés + + + + Show system objects + Afficher les objets système + + + + Show extension objects + Afficher les objets d'extension + + + + Snippets + Bouts de code + + + + Drop object + Supprimer l'objet + + + + Drop cascade + Supprimer en cascade + + + + Truncate + Tronquer + + + + Trunc. cascade + Tronquer en cascade + + + + Show data Afficher les données + Reload properties Recharger les propriétés + Update Mettre à jour - Do you really want to drop the object <strong>%1</strong> <em>(%2)</em>? - Voulez-vous vraiment supprimer l'objet <strong>%1</strong> <em>(%2)</em> ? + + -- Source code unavailable for this kind of object -- + -- Code source indisponible pour ce type d'objet -- - Do you really want to <strong>cascade</strong> drop the object <strong>%1</strong> <em>(%2)</em>? This action will drop all the other objects that depends on it? - Voulez-vous vraiment supprimer EN CASCADE l'objet <strong>%1</strong> <em>(%2)</em>? Cette action sera susceptible de supprimer en plus d'autres objets qui en dépendent. + + Do you really want to drop the object <strong>%1</strong> <em>(%2)</em>? + Voulez-vous vraiment supprimer l'objet <strong>%1</strong> <em>(%2)</em> ? + Do you really want to truncate the table <strong>%1</strong>? - Voulez-vous vraiment vider la table <strong>%1</strong> ? + Voulez-vous vraiment tronquer la table <strong>%1</strong> ? + Do you really want to <strong>cascade</strong> truncate the table <strong>%1</strong>? This action will truncate all the tables that depends on it? - Voulez-vous vraiment vider EN CASCADE la table <strong>%1</strong> <em>(%2)</em>? Cette action sera susceptible de supprimer d'autres lignes dans les tables qui en dépendent. + Voulez-vous vraiment tronquer en <strong>cascade</strong> la table <strong>%1</strong> ? Cette action tronquera toutes les tables qui en dépendent ! + Admin. roles - + Rôles admin. + Alignment - + Alignement + Analyze func. - + Fonc. d'analyse + Arg. count - + Nombre d'arg. + Arg. default count - + Nombre d'arg. par défaut + Arg. defaults - + Arg. par défaut + Arg. modes - + Modes des arg. + Arg. names - + Noms des arg. + Arg. types - + Types des arg. + Behavior type - + Type de comportement + Cast type - + Type de conversion + Category - + Catégorie + Comment - + Commentaire + Commutator Op. - + Commutateur Op. - Configuration - + + Collation + + Conn. limit - + Limite conn. + + + + Configuration + + Create DB - + Créer DB + Create role - + Créer rôle + Curr. version - + Version courante + Default value - + Valeur par défaut + Delimiter - + Délimiteur + Dest. type - + Type de dest. + + + + Dimension + + Directory - + Répertoire + Dest. encoding - + Encodage de dest. + Encoding - + Encodage + Exec. cost - + Exec. du coût + Op. family - + Famille d'op. + + + + Expression + + Final func. - + Fonc. finale + Func. type - + Type de fonc. + Handler func. - + Gestionnaire de fonc. + Handles type - + Type de poignées + Hashes + Index type - + Type d'index + Inherit - + Hérité + Ini. condition - + Condition ini. + Inline func. - + Func. en ligne + Input func. - + Fonc. d'entrée + Internal length - + Longueur interne + Interval type - + Type d'interval + I/O cast - + Conversion E/S + Join func. - + Fonc. de jointure + LC COLLATE + Faut-il le traduire ? + LC CTYPE + Faut-il le traduire ? + Leak proof - + Étanche + Left type - + Type gauche + Can login - + Peut se connecter + Member roles - + Rôles des membres + Merges - + Fusionne + Negator op. - + Négateur op. + Not null - + Non nul + Object type - - - - OID - + Type d'objet + With OIDs - + Avec OIDs + Old version + Ancienne version + + + + OID + Faut-il le traduire ? + Operator - + Opérateur + Operator func. - + Fonc. de l'opérateur + Output func. - + Func. de sortie + Owner - + Propriétaire + Owner column - + Colonne propriétaire + Parents - + + Password - + Mot de passe + + + + Permissions + + Range attributes - + Attributs de plage + Receive func. - + Fonc. de réception + Ref. roles - + Rôles de ref. + Replication - + Reproduction + Restriction func. - + Fonc. de restriction + Return type - + Type de retour + Returns SETOF - + Retours SETOF + Right type - + Type droit + Rows amount - + Montant des lignes + Security type - + Type de sécurité + Send func. - + Fonc. d'envoi + Sort op. - + Op. de tri + Source type - + Type de source + Src. encoding - + Encodage de la src. + State type - + Type d'état + Type mod. in func. - + Type de mod. dans la fonc. + Type mod. out func. - + Type de mod. hors fonc. + Transition func. - + Fonc. de transition + Trusted - + Fiable + Type attribute - + Attribut de type + + + + Type + + Types - + + Validator func. - + Fonc. de validateur + Windows func. - + Fonc. de fenêtre + false - + faux + true - + vrai + Cache value - + Valeur du cache - Cycle - + + Increment + Incrément - Increment - + + Cycle + + Max. value - + Valeur max + Min. value - + Valeur min + Start value - + Valeur de départ + Last value - + Dernière valeure + Op. class - + Classe d'op. + Canonical func. - + Fonc. de Canonical + Subtype diff func. - + Fonc de comparaison de sous-type + Deferrable - + Reportable + For each row - + Pour chaque ligne + Firing - + Déclencheur + On insert - + À l'insertion + + On delete - + À la suppression + + On update - + À la mise à jour + On truncate - + Au tronquage + + + + Arguments + + + + + Table + + Trigger func. - + Fonc. de déclenchement + Condition - + + Deferment - + Ajournement + Execution mode - + Mode d'exécution + Commands - Commandes + Commandes - Position - + + Comparison type + Type de comparaison - Comparison type - + + Position + + Ref. columns - + Colonnes de ref. + Expressions - + + Fill factor - + Facteur de remplissage + No inherit - + Non hérité + Op. classes - + Classes op. + Operators - + Opérateurs + Ref. table - + Table de ref. - Predicate - + + Unique + - Collations - + + Predicate + Prédicat + Inherited - + Hérité - System - + + Collations + - Extension - Extension + + SSL + - Open the grid to visualize or edit data - + + Referrers + Référents - Open a new SQL execution pane + + USING expr. + Faut-il le traduire ? - Ctrl+F6 - Ctrl+F6 - - - Update the objects tree + + CHECK expr. + Faut-il le traduire ? - Ctrl+S - Ctrl+S - - - Drop this database + + RLS enabled - Filters the currently loaded items in the tree by using a pattern and matching their names. If <strong>By OID</strong> is checked the pattern is interpreted as an integer value that represents the object id (OID). <br><br/><strong>HINT:</strong> if you need to search the entire database use the full refresh (<strong>Ctrl+F5</strong>) prior the filtering. + + RLS forced - Show raw attributes + + Also restart sequences - -- Source code not generated! Hit F7 or middle-click the item to load it. -- - + + + Warning + Avertissement + + + + You're running a demonstration version! The data manipulation feature is available only in the full version! + Vous utilisez une version de démonstration ! Cette fonctionnalité de manipulation de données est uniquement disponible dans la version complète ! + + + + <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? + <strong>ATTENTION :</strong> Vous êtes sur le point de supprimer l'intégralité de la base de données <strong>%1</strong> ! Toutes les données seront définitivement détruites. Voulez-vous vraiment le faire ? + + + + Open the grid to visualize or edit data + Ouvrir la grille pour visualiser ou modifier les données + + + + Open a new SQL execution pane + Ouvrir un nouveau panneau d'exécution de code SQL + + + + Ctrl+F6 + + + + + Update the objects tree + Mettre à jour l'arborescence des objets + + + + Drop this database + Supprimer cette base de données + + + + Filters the currently loaded items in the tree by using a pattern and matching their names. If <strong>By OID</strong> is checked the pattern is interpreted as an integer value that represents the object id (OID). <br><br/><strong>HINT:</strong> if you need to search the entire database use the full refresh (<strong>Ctrl+F5</strong>) prior the filtering. + Filtre les éléments actuellement chargés dans l'arborescence en utilisant un motif et en faisant correspondre leurs noms. Si <strong>Par OID</strong> est coché, le motif est interprété comme une valeur entière qui représente l'identifiant de l'objet (OID).<br><br/><strong>ASTUCE :</strong> si vous devez effectuer une recherche dans toute la base de données, utilisez l'actualisation complète (<strong>Ctrl+F5</strong>) avant le filtrage. + + + + Show raw attributes + Afficher les attributs brutes + + + + -- Source code not generated! Hit F7 or middle-click the item to load it. -- + -- Code source non généré ! Appuyer sur F7 ou faire un clic molette sur l'élément pour le charger. -- + Rename - Renommer + Renommer + Source code - Code source + Code source + Quick refresh - + Rafraîchissement rapide + Full refresh - + Rafraîchissement complet + Do you really want to <strong>cascade</strong> drop the object <strong>%1</strong> <em>(%2)</em>? This action will drop all the other objects that depends on it. - + Voulez-vous vraiment supprimer en <strong>cascade</strong> l'objet <strong>%1</strong><em> (%2)</em> ? Cette action supprimera tous les autres objets qui en dépendent. + Src. table: %1 Src. column(s): %2 - + Table src. : %1 +Colonne(s) src. : %2 + Ref. table: %1 Ref. column(s): %2 - + Table de ref. : %1 +Colonne(s) de ref. : %2 + -- Source code genaration for buil-in and base types currently unavailable -- - + -- Génération de code source pour les types intégrés et les type de base actuellement indisponibles -- + -- Source code unavailable for the object %1 (%2). -- - + -- Code source indisponible pour l'objet %1 (%2). -- + + + + Toggle the display of filter widget as well the system/extension objects. + (Dés)activer l'affichage du widget de filtre ainsi que les objets système/extension. + + + + Sort items alphabetically. When unchecked, items are sorted by OID. + Trier les éléments par ordre alphabétique. Lorsque ce n'est pas coché, les éléments sont triés par OID. + + + + Sort alphabetically + Trier par ordre alphabétique DatabaseImportForm - Database Import - Import d'une base de données - - + &Import &Importer + &Close &Fermer + Options Options - Starting point where objects will be put. - Point d'origine à partir duquel les objets seront créés sur le schéma. - - - Spacing: - Espacement: - - + Enables the import of objects created by extensions. Generally there is no need to check this option but if there are objects in the database that directly references this category of objects this mode must be enabled. - Active l'importation des objets créés par les extensions. Généralement il n'y a pas lieu d'activer cette option sauf si des objets en base référencent directement ce type d'objet. + Active l'import des objets créés par les extensions. Généralement il n'y a pas lieu d'activer cette option sauf si des objets en base référencent directement ce type d'objet. + Import extension objects Importer les objets des extensions + Connection: - Connexion: + Connexion : + Ignore import errors Ignorer les erreurs + pgModeler ignores import errors and will try to create as many as possible objects. By checking this option the import operation will be not aborted but an incomplete model will be constructed. This option generates a log file on pgModeler's temp directory. - pgModeler ignorera les erreurs qui pourront survenir lors de l'importation et essayera de créer autant d'objets qui lui sera possible. En activant cette fonction le processus d'importation ne sera pas interrompu, toutefois vous pourrez vous retrouver avec un modèle incomplet. Cette option active la génération d'un fichier log dans le dossier temporaire de pgModeler. + pgModeler ignorera les erreurs qui pourront survenir lors de l'import et essayera de créer autant d'objets qui lui sera possible. En activant cette fonction le processus d'import ne sera pas interrompu, toutefois vous pourrez vous retrouver avec un modèle incomplet. Cette option active la génération d'un fichier log dans le dossier temporaire de pgModeler. + Enables the import of system built-in objects. It's recommend to select only those objects that are directly referenced by the ones to be imported. WARNING: Try to import a huge set of system objects can bloat the resultant model or even crash pgModeler due to memory/cpu overuse. - Active l'importation des objets système. Il est recommandé d'utiliser ce mode uniquement lorsque le reste du modèle y fait directement référence (afin de conserver une intégrité). ATTENTION : Ceci va entrainer la création de beaucoup d'élements qui peuvent rendre difficile la lecture du schéma, voir même provoquer un plantage de pgModeler en cas de saturation mémoire ou CPU. + Active l'importation d'objets intégrés au système. Il est recommandé de sélectionner uniquement les objets directement référencés par ceux à importer. AVERTISSEMENT : Essayer d'importer un grand nombre d'objets système peut gonfler le modèle résultant ou même planter pgModeler en raison de la surutilisation de la mémoire/cpu. + Import system objects Importer les objets système + Automatically resolve dependencies Résoudre automatiquement les dépendances - Resolve some of the object's dependencies by query the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types and extensions. - Résoudre certaines dépendances entre les objets en interrogeant le catalogue lorsqu'un objet n'existe pas dans la base à importer. Dans certains cas il vous sera nécessaire de combiner cette option avec celles ci-dessous. Cette option ne s'applique pas aux objets situés au niveau du cluster tels que les rôles, les tablespaces, les langues, les types de données ou encore les extentions. - - - Origin point: - Point d'origine: - - - Connect and list available databases - Connecter et lister les bases de données disponibles - - + + + + ... ... + Debug mode Activer le mode debug - All catalog queries as well the created objects' source code are printed to standard outupt (stdout). - Toutes les requêtes effectuées sur le catalogue ainsi que le code source de tous les objets créés sera affiché sur la sortie standard (stdout). - - - Spacing between objects - Espacement inter-objets - - - Schemas per row - Nombre maximal de schémas pouvant être placés sur une seule ligne (en longueur) - - - Tables per row: - Tables sur une ligne: - - - Schemas per row: - Schémas sur une ligne: - - - Tables per row - Nombre maximal de tables pouvant être placées sur une seule ligne (en longueur) - - - Database import - Importation d'une base (Base existante vers modèle) - - + Settings Paramètres + Random colors will be assigned to imported relationships facilitating the identification of links between tables mainly in large models. - Coloriser les associations de manière aléatoire afin de faciliter l'identification des liens entre les tables, cela peut être utile sur de grands modèles. + Colorer les associations de manière aléatoire afin de faciliter l'identification des liens entre les tables, cela peut être utile sur de grands modèles. + Random colors for relationships - Coloriser les associations de manière aléatoire + Colorer les associations de manière aléatoire + Database Base de données + Select all objects Tout cocher + Clear object selection Tout décocher + Expands all items Développer tous les éléments + Collapses all items Replier tous les éléments + Filter: - Filtrer: + Filtrer : + Filter object by it's OID Filtrer un objet par son OID + By OID Par OID + Output Sortie + Progress label... Indicateur de progression... + Cancel Annuler + Retrieving objects from database... - Récupération des objets à partir de la base de données... + Récupération des objets depuis la base de données... + Importing process aborted! - Processus d'importation en erreur ! + Processus d'import abandonnée ! + Importing process canceled by user! - Processus d'importation interrompu par l'utilisateur ! + Processus d'import interrompu par l'utilisateur ! + Importing process sucessfuly ended! - Processus d'importation terminé avec succès ! + Processus d'import terminé avec succès ! + No databases found Aucune base de données trouvée + Found %1 database(s) %1 base(s) de données trouvée(s) + Retrieving cluster level objects... Récupération des objets du cluster... + Retrieving objects of schema `%1'... Récupération des objets du schéma `%1'... - Retrieving objects of table `%1'... - Récupération des objets de la table `%1'... + + Retrieving objects of `%1' (%2)... + Réccupération des objets de `%1' (%2)... + This is a PostgreSQL built-in data type and cannot be imported. - Ce type de données est déjà intégré nativement dans PostgreSQL. Il ne peut être importé. + C'est un type de données nativement intégré à PostgreSQL. Il ne peut être importé. + This is a pgModeler's built-in object. It will be ignored if checked by user. - Cet objet fait partie intégrante de pgModeler. Il sera ignoré même si vous le cochez. + C'est un objet nativement intégré à pgModeler. Il sera ignoré s'il est coché par l'utilisateur. + Create all imported objects in the current working model instead of create a new one. - + Créer tous les objets importés dans le modèle de travail actuel au lieu d'en créer un nouveau. + Import objects to the working model - + Importer les objets dans le modèle de travail en cours + <strong>ATTENTION:</strong> You are about to import objects to the current working model! This action will cause irreversible changes to it even in case of critical errors during the process. Do you want to proceed? - - - - Schemas per row - + <strong>ATTENTION :</strong> Vous êtes sur le point d'importer des objets dans le modèle de travail actuel ! Cette action entraînera des modifications irréversibles même en cas d'erreurs critiques au cours du processus. Voulez-vous poursuivre ? + Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types, extensions. - + Résoudre certaines dépendances de l'objet en interrogeant le catalogue. Dans certains cas, il est nécessaire de combiner cette option avec les autres ci-dessous. Cette option ne s'applique pas aux objets du niveau de la base de données, tels que le rôle, l'espace de stockage et la langue, pour les types de données et les extensions. + All catalog queries as well the created objects' source code are printed to standard output (stdout). - + Toutes les requêtes de catalogue ainsi que le code source des objets créés sont imprimés sur la sortie standard (stdout). + + + + + Import database + Importer une base de données DatabaseImportHelper + Retrieving system objects... `%1' Récupération des objets système... `%1' + + Retrieving objects... `%1' Récupération des objets... `%1' + Creating table inheritances... Création des tables héritées... - Creating objects permissions... - Création des permissions... - - + Creating object `%1' (%2)... Création de l'objet `%1' (%2)... - Trying to recreate object `%1' (%2)... - Tentative de recréation de l'objet `%1' (%2)... - - + Creating columns permissions... Création des permissions sur les champs... - Update relationships of `%1' (%2)... - Mise à jour des associations de `%1' (%2)... - - + Destroying unused detached columns... - Suppression des colonnes détachées de la table parent (héritage)... + Destruction des colonnes détachées inutilisées... + The database import ended but some errors were generated and saved into the log file `%1'. This file will last until pgModeler quit. - L'import de la base a échoué mais les erreurs rencontrées ont été sauvegardées dans le fichier journal `%1'. Ce fichier sera disponible jusqu'à la fermeture de pgModeler. + L'import de la base de données est términée mais des erreurs ont été générées et sauvegardées dans le journal `%1'. Ce fichier sera disponible jusqu'à la fermeture de pgModeler. + + + + Creating object `%1' (%2), oid `%3'... + Création de l'objet `%1' (%2), oid `%3'... + + + + Trying to recreate object `%1' (%2), oid `%3'... + Tentative de création de l'objet `%1' (%2), oid `%3'... + Import failed to recreate some objects in `%1' tries. - + L'import a échoué à recréer certains objets à `%1' reprise(s). + Creating permissions for object `%1' (%2)... - + Création des autorisations pour l'objet `%1' (%2)... + Updating relationships of `%1' (%2)... - + Mise à jour des relations de `%1' (%2)... + Validating relationships... - + Validation des relations... + Assigning sequences to columns... - + Affectation des séquences aux colonnes... DatabaseModel + The demonstration version can create only `%1' instances of each object type! You've reach this limit for the type: `%2' - Cette version de démonstration peut créer seulement `%1' instances pour chaque type d'objet ! Cette limite a été atteinte pour les objets de type : `%2' + Cette version de démonstration peut seulement créer `%1' instances pour chaque type d'objet ! Cette limite a été atteinte pour les objets de type : `%2' + Loading: `%1' (%2) - Chargement: `%1' (%2) + Chargement : `%1' (%2) - Generating %1 of the object `%2' (%3) - Génération %1 de l'objet `%2' (%3) + + + Validating relationships... + Validation des relations... - Validating relationships... + + Generating %1 code: `%2' (%3) + Saving object `%1' (%2) - + Enregistrement de l'objet `%1' (%2) + Saving metadata of the object `%1' (%2) - + Enregistrement des métadonnées de l'objet `%1' (%2) + Metadata file successfully saved! - + Fichier de métadonnées enregistré avec succès ! + Process successfully ended but no metadata was saved! - + Le processus s'est terminé avec succès mais aucune métadonnée n'a été enregistrée ! + Creating object `%1' (%2) - + Création de l'objet `%1' (%2) + Object `%1' (%2) already exists. Ignoring. - + L'objet `%1' (%2) existe déjà et a été ignoré. + Loading metadata for object `%1' (%2) - + Chargement des métadonnées de l'objet `%1' (%2) + Object `%1' (%2) not found. Ignoring metadata. - + Objet`%1' (%2) introuvable. Métadonnée ignorée. + Metadata file successfully loaded! - + Fichier de métadonnées chargé avec succès ! DatabaseWidget - Form - Formulaire - - + Attributes Attributs + Template DB: - Modèle de BDD: + Modèle de BDD : + Model Author: - Auteur du modèle: + Auteur du modèle : + Encoding: - Encodage: + Encodage : + Default Objects Attributs par défaut des objets + Tablespace: - Tablespace: + Espace de stockage : + Schema: - Schéma: + Schéma : + Collation: - Collation: + Collation : + Owner: - Propriétaire: + Propriétaire : + LC_COLLATE: - LC_COLLATE: + LC_COLLATE : + Connections: - Connexions: + Connexions : + LC_CTYPE: - LC_CTYPE: + LC_CTYPE : + The fields <strong>LC_COLLATE</strong> and <strong>LC_CTYPE</strong> have pre-configured values based upon the running system. You can freely modify those values if you intend to export the model to another host. - Les champs <strong>LC_COLLATE</strong> et <strong>LC_CTYPE</strong> ont déjà des valeur pré-configurées basées sur le système. Vous pouvez librement les modifier si vous deviez exporter le modèle pour une autre machine hôte. + Les champs <strong>LC_COLLATE</strong> et <strong>LC_CTYPE</strong> ont déjà des valeurs pré-configurées basées sur le système. Vous pouvez librement les modifier si vous devez exporter le modèle vers une autre machine hôte. + Use the above fields to specify the default attributes assigned to new objects created on the database model. Leaving a field empty will cause PostgreSQL to use the default values when exporting the model. - Utilisez les champs ci-dessus pour spécifier les attributs par défaut à assigner aux futurs objets qui seront créés dans le modèle. Laisser ces champs vides fera en sorte que PostgreSQL utilise ses valeurs par défaut lors de l'exportation du modèle. + Utilisez les champs ci-dessus pour spécifier les attributs par défaut à assigner aux nouveaux objets créés dans le modèle. Laisser un champ vide fera que PostgreSQL utilisera ses valeurs par défaut lors de l'export du modèle. + + + + Default Défaut + + + Options: + Options : + + + + Allow connections + Autoriser les connexions + + + + Is template + Est le modèle + DomainWidget - Form - Formulaire + + Name: + Nom : - Constraint - Contrainte + + Default Value: + Valeur par défaut : - Name: - Nom: + + Attributes + Attributs - Not Null: - Non Null: + + Not null + Non nulle - Check Expr.: - Expr. de vérif.: + + Check constraints + Vérifier les contraintes - Default Value: - Valeur par défaut: + + Expression: + Expression : + + + + Name + Nom + + + + Expression + DonateWidget + Form - Formulaire + Formulaire + Donate to pgModeler - + Faire un don à pgModeler + Hide this widget - + Cacher ce widget + ... - ... + ... + <html><head/><body><p>pgModeler is brought to you thanks to a <span style=" font-style:italic;">great effort to create and distribute a quality product</span>. This project is reaching out levels of maturity never imagined. All this is the result of a joint work between its author and the <span style=" font-weight:600;">Open Source community</span>. <br/><br/>This software has a long way to go yet and with your help we'll keep maintaining the good job and bringing new improvements on each release. If you did like pgModeler and thinks it deserves a contribution please make a donation!</p></body></html> - + <html><head/><body><p>pgModeler vous est offert grâce à un <span style=" font-style :italic;">gros effort pour créer et distribuer un produit de qualité </span>. Ce projet atteint un niveau de maturité jamais imaginé. Tout ceci est le résultat d'un travail conjoint entre son auteur et la <span style="font-weight :600;">Communauté Open Source</span>.<br/><br/>Ce logiciel a encore un long chemin à parcourir mais avec votre aide, nous continuerons à faire du bon travail et à apporter de nouvelles améliorations à chaque version. Si vous avez aimé pgModeler et pensez qu'il mérite une contribution, faites un don ! </p></body></html> + I want to help! - + Je veux aider ! ElementsWidget + Form Formulaire + Column: - Colonne: + Colonne : + Expression: - Expression: + Expression : + Collation: - Collation: + Collation : + Operator Class: - Classe d'opérateurs: + Classe d'opérateurs : + Operator: - Opérateur: + Opérateur : + Sorting: - Tri: + Tri : + Ascending Ascendant + Descending Descendant + Nulls first Null en premier + Element - Élement + Élément + Type - Type + + Operator Class Classe d'opérateur + Sorting Tri + Nulls First - Null en premier + Vides en premier + Collation - Collation + + Operator Operateur + Expression - Expression + + Yes Oui + No Non @@ -3277,1069 +4007,1330 @@ Ref. column(s): %2 EventTriggerWidget - Form - Formulaire - - + Event: - Evènement: + Évènement : + Function: - Fonction: + Fonction : + Filter Filtrer + Tag: - Tag: + Étiquette : + Tag command - Commande de déclenchement + Balise de la commande Exception + Assignment of a pseudo-type to the type of the column! - Utilisation d'un pseudo-type comme type de la colonne! - - - Zero length assignment! - Affectation de longueur nulle! + Utilisation d'un pseudo-type comme type de la colonne ! + Assignment of a precision greater than the length of the type! - Utilisation d'une précision est plus grande que la longueur du type! + Utilisation d'une précision est plus grande que la longueur du type ! + Assignment of an invalid precision to type time, timestamp or interval. The precision in this case must be equal to or less than 6! - Utilisation d'une précision de type time, timestamp ou interval invalide. La précision de ces types doit être inférieure ou égale à 6! + Utilisation d'une précision de type time, timestamp ou interval invalide. La précision de ces types doit être inférieure ou égale à 6 ! + Reference to a column which index is out of the capacity of the column list! - Référence à une colonne dont l'index dépasse la capacité de la liste des colonnes! + Référence à une colonne dont l'index dépasse la capacité de la liste des colonnes ! + Assignment of not allocated object! - Indefini ? - Utilisation d'un objet non référencé! + Utilisation d'un objet non référencé ! + Assigning object of an invalid type! - Assignation d'un objet dont le type est invalide! + Assignation d'un objet dont le type est invalide ! + Removing an object of an invalid type! - Suppression d'un objet dont le type est invalide! + Suppression d'un objet dont le type est invalide ! + Obtaining an object of an invalid type! - L'objet obtenu est de type invalide! + L'objet obtenu est de type invalide ! + Assignment of empty name to table return type! - Affectation d'un nom vide au type retourné par la table! + Affectation d'un nom vide au type retourné par la table ! + Reference to an event which does not belongs to trigger! - Qui ne provient ? - Référence à un évènement qui n'appartient pas au déclencheur! + Référence à un évènement qui n'appartient pas au déclencheur ! + Assignment of a function which language is invalid! - Définition d'une fonction dont le langage est invalide! + Définition d'une fonction dont le langage est invalide ! + Assignment of empty name to an object! - Affectation d'un nom vide à l'objet! + Affectation d'un nom vide à l'objet ! + Assignment of schema object which type is invalid! - Affectation d'un schema dont le type est invalide! + Affectation d'un schema dont le type est invalide ! + Assignment of tablespace object with invalid type! - Utilisation d'un tablespace dont le type est invalide! + Utilisation d'un espace logique dont le type est invalide ! + Assignment of tablespace to an invalid object! - Affectation d'un tablespace à un objet invalide! + Affectation d'un espace logique à un objet invalide ! + Assignment of tablespace to a constraint which type is invalid! To belong to a tablespace the constraint must be a primary key or unique! - Affectation d'un tablespace à une contrainte dont le type est invalide! Pour appartenir à un tablespace une contrainte doit être une clef primaire ou unique! + Affectation d'un espace logique à une contrainte dont le type est invalide ! Pour appartenir à un espace logique une contrainte doit être une clé primaire ou unique ! + Assignment of owner object which type is invalid! - Affectation d'un propiétaire dont le type est invalide! + Affectation d'un propiétaire dont le type est invalide ! + Assignment of owner to an invalid object! - Affectation d'un propriétaire à un objet invalide! + Affectation d'un propriétaire à un objet invalide ! + Reference to a function with invalid type! - Référence à une fonction dont le type est invalide! + Référence à une fonction dont le type est invalide ! + Reference to an argument of the operator with invalid type! - Référence à un argument de l'opérateur dont le type est invalide! + Référence à un argument de l'opérateur dont le type est invalide ! + Reference to an operator with invalid type! - Référence à un opérateur dont le type est invalide! + Référence à un opérateur dont le type est invalide ! + Assignment of value to an invalid option type on role! - Utilisation d'un attribut invalide pour un rôle! + Utilisation d'un attribut invalide pour un rôle ! + Reference to an invalid role type! - Référence à un type de rôle invalide! + Référence à un type de rôle invalide ! + Insertion of empty command to the rule! - Ajout d'une commande vide dans cette règle! + Insertion d'une commande vide dans cette règle ! + Is not possible to create a self generalization/copy relationship! The table can not inherit or copy their own attributes! - Impossible de créer une association de généralisation/copie avec elle même! Une table ne peut hériter ou copier ses propres attributs! + Impossible de créer une association de généralisation/copie de relation avec elle même ! Une table ne peut hériter ou copier ses propres attributs ! + Assignment of an object that already belongs to another table! - Utilisation d'un objet appartenant déjà à une autre table! + Utilisation d'un objet appartenant déjà à une autre table ! + Assignment of a schema to the sequence which differs from the schema of the owner table! - Affectation d'un schéma à la séquence diffèrent du schéma de la table! + Affectation d'un schéma à la séquence diffèrent du schéma de la table ! + Assignment of an invalid value to one of the sequence attributes! - Utilisation d'une valeur invalide comme attribut de séquence! + Utilisation d'une valeur invalide comme attribut de séquence ! + Assignment of a minimum value to the sequence which is greater than the maximum value! - La valeur minimale de la séquence est supérieure à la valeur maximale! + La valeur minimale de la séquence est supérieure à la valeur maximale ! + Assignment of a null increment value to the sequence! - La valeur de l'incrément de la séquence est nulle! + La valeur de l'incrément de la séquence est nulle ! + Assignment of null cache value to the sequence! - La valeur cache de la séquence est nul! + La valeur cache de la séquence est nulle ! + Allocation of object with invalid type! - Le type de l'objet alloué est invalide! + Le type de l'objet alloué est invalide ! + Assignment of not allocated language! - Indéfini ? - Utilisation d'un langage inconnu! + Utilisation d'un langage inconnu ! + Assignment of language object which type is invalid! - Définition d'un objet langage dont le type est invalide! + Définition d'un objet langage dont le type est invalide ! + Reference to data type with an index outside the capacity of data types list! - Référence à un type de donnée dont l'index est en dehors de la capacité de la liste des types de données! + Référence à un type de donnée dont l'index est en dehors de la capacité de la liste des types de données ! + Assignment of invalid type to the object! - Affectation d'un type invalide à l'objet! + Affectation d'un type invalide à l'objet ! + Obtaining types with invalid quantity! - Utilisation d'une quantité de types invalide! + Utilisation d'une quantité de types invalide ! + Insertion of item which already exists in the attributes list of the type! - Ajout d'un attribut déjà présent dans la définition de ce type! + Insertion d'un attribut déjà présent dans la définition de ce type ! + Insertion of invalid item in the attributes list of the type! - Ajout d'un attribut invalide à la liste des attributs de ce type! + Insertion d'un attribut invalide à la liste des attributs de ce type ! + Insertion of item which already exists in the enumarations list of the type! - Ajout d'un élément déjà existant dans l'énumeration! + Insertion d'un élément déjà existant dans l'énumeration ! + Insertion of invalid item in the enumerations list of the type! - Ajout d'un élément invlaide dans l'énumeration! + Insertion d'un élément invlaide dans l'énumeration ! + Assignment of invalid configuration to the type! - La configuration assigné au type est invalide! + La configuration assigné au type est invalide ! + Assignment of an operator which input type count is invalid to aggregate function! - Utilisation d'un opérateur dont le nombre d'argument est invalide avec une fonction d'agrégation (un et seulement un)! + Utilisation d'un opérateur dont le nombre d'argument est invalide avec une fonction d'agrégation ! + Assignment of an operator which types of arguments is invalid! - Utilisation d'un opérateur dont le type des arguments est invalide! + Utilisation d'un opérateur dont le type des arguments est invalide ! + + There is already a relationship between `%1' (%2) and `%3' (%4) in the model! When using relationships of the type generalization, copy and one-to-one there can't be other relationships linked to the pair of tables. + Il y a déjà une relation entre `%1 '(%2) et `%3' (%4) dans le modèle ! Lors de l'utilisation de relations de type généralisation, copie et un-à-un, il ne peut y avoir d'autres relations liées à la paire de tables. + + + A view reference must be used in at least one these SQL scopes: View Definition, SELECT-FROM, FROM-WHERE or After WHERE! - Lors de la définition d'une vue, une référence doit utiliser au moins une des options suivantes:SELECT-FROM, FROM-WHERE ou Après WHERE! + Lors de la définition d'une vue, une référence doit utiliser au moins un des champs SQL : SELECT-FROM, FROM-WHERE ou après WHERE ! + + + + Unable to load the configuration file `%1'! Please check if file exists in its folder and/or if it is not corrupted! + Impossible de charger le fichier de configuration `%1'! Merci de vérifier que le fichier existe dans son dossier et / ou s'il n'est pas corrompu ! + Could not find the default settings file `%1'! To restore default settings check the existence of the file and try again! Impossible de trouver le fichier des préférences par défaut `%1' ! Pour restaurer les préférences par défaut veuillez vérifier l'existance de ce fichier et réessayez ! + Could not load the plugin `%1' from the library `%2'! Message returned by plugin manager: `%3' Impossible de charger l'extension `%1' depuis la bibliothèque`%2' ! Message retourné par le gestionnaire d'extension : `%3' - Unknown attribute `%1' in file %2, line %3, column %4! - Attribut `%1' incconu dans le fichier %2, ligne %3, colonne %4 ! + + Failed to drop the database `%1' because it is defined as the default database for the connection `%2'! + Impossible de supprimer la base de données `%1 'car elle est définie comme base de données par défaut pour la connexion`%2' ! + + + + The column `%1' must be `NOT NULL' because it composes the primary key of the table `%2'. You need to remove the column from the mentioned contraint in order to disable the `NOT NULL' on it! + La colonne `%1' doit être `NOT NULL' car elle compose la clé primaire de la table `%2'. Vous devez supprimer la colonne de la contrainte mentionnée afin de désactiver le `NOT NULL' dessus ! + + + + The identity column `%1' has an invalid data type! The data type must be `smallint', `integer' or `bigint'. + La colonne d'identité `%1' a un type de données invalide ! Le type de données doit être `smallint', `integer' ou `bigint'. - Invalid use of a view referece as whole SQL definition! The assigned reference must be an expression! - À contrôler - Utilisation invalide d'une vue en tant que définition SQL! La référence doit être une expression! + + Reference to an invalid affected command in policy `%1'! + Référence à une commande affectée invalide dans la règle `%1' ! + + Reference to an invalid special role in policy `%1'! + Référence à un rôle spécial invalide dans la politique `%1' ! + + + Assignment of a second definition expression to the view! - Assignation d'une seconde expression à la vue! + Assignation d'une seconde expression à la vue ! + Assignment of collation object which type is invalid! - À contrôler - Utilisation d'un objet collation invlaide! + Utilisation d'un objet collation invalide ! + Collations must be created at least with attributes LC_COLLATE and LC_CTYPE defined! - Les collations doivent être définies avec les attributs LC_COLLATE et LC_CTYPE renseignés! + Les collations doivent être définies avec les attributs LC_COLLATE et LC_CTYPE renseignés ! + Reference to an invalid copy table option! - Référence à une option invalide de copie de table! + Référence à une option invalide de copie de table ! + The INSTEAD OF mode cannot be used on triggers that belongs to tables! This is available only for view triggers! - Le mode AU LIEU DE (INSTEAD OF) ne peut être utilisé comme trigger de table! Ce n'est valable que pour les triggers de vue! + Le mode AU LIEU DE (INSTEAD OF) ne peut être utilisé comme déclencheur de table ! Ce n'est valable que pour les déclencheurs de vue ! + The TRUNCATE event can only be used when the trigger executes for each statement and belongs to a table! - L'événement TRUNCATE ne peut être utilisé que lors d'un trigger sur chaque ligne et qu'il appartient à une table! + L'événement TRUNCATE ne peut être utilisé que lors d'un déclencheur sur chaque ligne et que s'il appartient à une table ! + The INSTEAD OF mode cannot be used on view triggers that executes for each statement! - Le mode AU LIEU DE (INSTEAD OF) ne peut être utilisé avec triggeurs de vues qui s’exécutent à chaque requête! + Le mode AU LIEU DE (INSTEAD OF) ne peut être utilisé avec des déclencheurs de vues qui s’exécutent à chaque requête ! + Constraint triggers can only be executed on AFTER events and for each row! - Les triggeurs de contraintes ne peuvent être exécutés qu'après (AFTER) et pour chaque lignes! + Les déclencheurs de contraintes ne peuvent être exécutés qu'APRÈS les événements et pour chaque ligne ! + A view trigger cannot be AFTER/BEFORE when it executes for each row! - Les triggeurs de vues ne peuvent être AFTER/BEFORE quand il sont configuré pour une exécution sur chaque ligne! + Les déclencheurs de vues ne peuvent être AFTER/BEFORE quand il sont configurés pour une exécution sur chaque ligne ! + A trigger cannot make reference to columns when using INSTEAD OF mode and UPDATE event! - Un triggeur ne peut faire référence aux colonnes quand il est utilisé en mode INSTEAD OF sur un événement de type UPDATE! + Un déclencheur ne peut faire référence aux colonnes quand il est utilisé en mode INSTEAD OF sur un événement de type UPDATE ! + Only constraint triggers can be deferrable or reference another table! - Seuls les déclencheurs de contraintes peuvent être déférés ou référencer une autre table! - - - Reference to a function id which is incompatible whit the user define type configuration! - Doutes - Référence faite à un identifiant de fonction incompatible avec le type configuré! + Seuls les déclencheurs de contraintes peuvent être déférés ou référencer une autre table ! + The validation process failed due to an error triggered by the validation helper. For more details about the error check the exception stack! - La procédure de validation a échouée à cause d'une erreur levée par l'assistant de validation. Pour de plus amples informations, referez vous à la pile des exceptions! + La procédure de validation a échouée à cause d'une erreur levée par l'assistant de validation. Pour de plus d'informations, referez-vous à la pile des exceptions ! + Assignment of an invalid strategy/support number to an operator class element! - Hum ... numéro de stratégie/support ? - Affectation d'un numéro de stratégie/support invalide à un élément de la classe 'operator'! + Affectation d'un numéro de stratégie/support invalide à un élément de la classe 'operator' ! + Insertion of element which already exists in the element list! - Insertion d'un élément déjà existant dans la liste des éléments! + Insertion d'un élément déjà existant dans la liste des éléments ! + Reference to a parameter which index is out of the parameter list bounds! - Référence un paramètre dont l'index est hors des limites de la liste de ces derniers! + Référence un paramètre dont l'index est hors des limites de la liste de ces derniers ! + Reference to an argument which index is out of argument list bounds! - Référence un argument dont l'index est hors des limites de la liste de ces derniers! + Référence un argument dont l'index est hors des limites de la liste de ces derniers ! + Assignment of a name which contains invalid characters! - Utilisation de caractères invalides dans le nom! + Utilisation de caractères invalides dans le nom ! + Assignment of a name which length exceeds the maximum of 63 characters! - Utilisation de plus de 63 caractères dans le nom! + Utilisation de plus de 63 caractères dans le nom ! + Reference to a role which index is out of role list bounds! - Référence un rôle dont l'index est hors des limites de la liste de ces derniers! + Référence un rôle dont l'index est hors des limites de la liste de ces derniers ! + Reference to a command which index is out of the command list bounds! - Référence une commande dont l'index est hors des limites de la liste de ces dernières! + Référence une commande dont l'index est hors des limites de la liste de ces dernières ! + Assignment of a start value to the sequence which is extrapolating the range defined by minimum and maximum values! - À contrôler. - Affectation de la valeur de départ de la séquence en dehors des limites de cette dernière (min et max)! + Affectation de la valeur de départ de la séquence en dehors de la plage de cette dernière définie par les valeurs min et max ! + Reference to a label which index is out of labels list bounds! - Référence un label dont l'index est hors des limites de la liste de ces derniers! + Référence un label dont l'index est hors des limites de la liste de ces derniers ! + Reference to an attribute which index is out of the attributes list bounds! - Référence un attribut dont l'index est hors des limites de la liste de ces derniers! + Référence un attribut dont l'index est hors des limites de la liste de ces derniers ! + Reference to an enumeration which index is out of the enumerations list bounds! - Référence une énumération dont l'index est hors des limites de la liste de ces dernières! + Référence une énumération dont l'index est hors des limites de la liste de ces dernières ! + Reference to an element which index is out of element list bounds! - Référence un élément dont l'index est hors des limites de la liste de ces derniers! + Référence un élément dont l'index est hors des limites de la liste de ces derniers ! + Reference to an object which index is out of object list bounds! - Référence un objet dont l'index est hors des limites de la liste de ces derniers! + Référence un objet dont l'index est hors des limites de la liste de ces derniers ! + Removal of an object not allocated! - Suppression d'un objet non alloué! + Suppression d'un objet non alloué ! + The object `%1' (%2) can not be manipulated because it is reserved to PostgreSQL! This object is present in the database model only as a reference! - L'objet `%1' (%2) ne peut être modifié car il est est réservé à PostgreSQL! Cet objet apparaît dans le modèle uniquement comme référence! - - - Unsupported PostgreSQL version (%1) detected! Valid versions are: %2 - Une version non supportée de PostgreSQL (%1) a été détectée! Les versions supportées sont: %2 + L'objet `%1' (%2) ne peut être modifié car il est est réservé à PostgreSQL ! Cet objet apparaît dans le modèle uniquement comme référence ! + Operation with object(s) which type(s) is invalid! - Opérations sur des objet(s) dont le(s) type(s) sont invalides! + Opérations sur un ou des objets dont les types sont invalides ! + Reference to object with invalid type! - Référence à un objet ayant un type invalide! + Référence à un objet ayant un type invalide ! + Operation with object not allocated! - Opération sur des objets non alloués! + Opération sur des objets non alloués ! + The relationship of the type 1-1 where both tables are mandatory participation is not implemented because it requires fusion between the tables that breaks the modeling done by the user! - Une association de type 1-1, quand les deux tables sont obligatoires, n'est pas implémentée car celà requiert la fusion des tables, ce qui casse le modèle réalisé par l'utilisateur! + Une association de type 1-1, quand les deux tables sont obligatoires, n'est pas implémentée car cela requiert la fusion des tables, ce qui casse le modèle réalisé par l'utilisateur ! + Assignment of an invalid expression to the object! - Affectation d'une expression invalide à l'objet! + Affectation d'une expression invalide à l'objet ! + Assignment of a primary key to a table which already has one! - Impossible de définir une clef primaire à une table qui en possède déjà une! + Impossible de définir une clé primaire à une table qui en possède déjà une ! + Identifier relationship can not be created for a self relationship, relationships of the type n-n, copy or generalization! - Review needed ! Doutes ... - Seules des associations de type 1:1 ou 1:n peuvents être utilisé comme identifiant. En aucun cas les autoassociations, associations n:n, généralisations ou copies ne le peuvent! + La relation d'identifiant ne peut pas être créée pour une relation vers elle même, pour les relations de type n-n, pour la copie ou pour la généralisation! + An attribute can not be added to a copy or generalization relationship! - Un attribut ne peut être ajouté à une relation copie ou généralisation! + Un attribut ne peut être ajouté à une relation copie ou généralisation ! + A foreign key can not be added to a relationship because is created automatically when this is connected! - Une clef étrangère ne peut être ajoutée à une relation car elle est créée automatiquement lors de la mise en relation! + Une clé étrangère ne peut être ajoutée à une relation car elle est créée automatiquement lors de la mise en relation ! + Reference to an user-defined data type that not exists in the model! - Référence à un type de donné défini par l'utilisateur qui n'existe pas dans le modèle! + Référence à un type de donné défini par l'utilisateur qui n'existe pas dans le modèle ! + Assignment of invalid maximum size to operation list! - La taille maximum affectée à la liste d'opérations est invalide! + La taille maximum affectée à la liste d'opérations est invalide ! + One or more objects were invalidated and automatically removed because they were referencing table columns which were included through relationships and which no longer exists due to disconnection of relationships or exclusion of such generated columns! - Un ou plusieurs objets ont été invalidés et automatiquement supprimés car ils référençaient des colonnes qui étaient incluses dans des relations et qui n'existaient plus du fait de la suppression de relation ou d'exclusion de ces colonnes! + Un ou plusieurs objets ont été invalidés et automatiquement supprimés car ils référençaient des colonnes qui étaient incluses dans des associations et qui n'existaient plus du fait de la suppression de l'associations ou de l'exclusion de ces colonnes ! + Reference to an invalid privilege type! - Référence à un type de privilège invalide! + Référence à un type de privilège invalide ! + Insertion of a role which already exists in the role list of the permission! - Ajout d'un rôle déjà existant dans la liste de cette permission! + Insertion d'un rôle déjà existant dans la liste de cette permission ! + Assignment of privilege incompatible with the type of object referenced by permission! - Utilisation d'un privilège incompatible avec le type d'objet référencé par la permission! + Utilisation d'un privilège incompatible avec le type d'objet référencé par la permission ! + It is not possible to create arrays of domains or sequences (dimension >= 1)! PostgreSQL does not yet implement this feature! - Il est impossible de créer des tableaux de domaines ou séquences (dimension >= 1)! PostgreSQL n'inplémente pas encore cette fonctionnalité! + Il est impossible de créer des tableaux de domaines ou de séquences (dimension >= 1) ! PostgreSQL n'inplémente pas encore cette fonctionnalité ! + Assignment of invalid name to the table generated from N-N relationship! - Le nom de la table générée par la relation N-N est invalide! + Le nom de la table générée par la relation N-N est invalide ! + Reference to a column of the objects table with invalid index! - Référence à une colonne de la table ayant un index invalide! + Référence à une colonne de la table ayant un index invalide ! + Reference to a row of the objects table with invalid index! - Référence à une ligne de la table ayant un index invalide! + Référence à une ligne de la table ayant un index invalide ! + Constraints like primary key, foreign key or unique must have at least one column related to them! For foreign keys must be selected, in addition, the referenced columns! - Les contraintes telles que clef primaire, clef étrangère ou l'unicité doivent avoir au moins une colonne associée! Pour les clefs étrangères, les colonnes référencées doivent également être sélectionnées! - - - Unable to load one or more configuration files! Please check if files exists in the configuration folder and if they are not corrupted to preventing this error to occur again on the next startup! - Impossible de charger un ou plusieurs fichiers de configuration! Veuillez vérifier que les fichiers existent bien dans le dossier de configuration et qu'ils ne soient pas corrompus pour éviter que l'erreur ne se produise à nouveau au prochain lancement! + Les contraintes telles que clé primaire, clé étrangère ou unicité doivent avoir au moins une colonne associée ! Pour les clés étrangères, les colonnes référencées doivent également être sélectionnées ! + The export process failed due to an error triggered by the PostgreSQL server in an attempt to execute a SQL command. For more details about the error check the exception stack! ** Executed SQL command: ** %1 - Le process d'exportation a échoué suite à une erreur déclenchée par le serveur PostgreSQL lors de la tentative d'exécution d'une commande SQL. Pour plus de détails concernant l'erreur vérifiez la pile d'exceptions! + Le process d'exportat a échoué suite à une erreur déclenchée par le serveur PostgreSQL lors de la tentative d'exécution d'une commande SQL. Pour plus de détails concernant l'erreur vérifiez la pile d'exceptions ! ** Commande SQL exécutée: ** %1 + One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details. - Une ou plusieurs extensions n'ont pas été activée(s) car des erreurs sont apparues lors du processus de chargment. Pour plus de détails, consultez la pile d'exceptions. - - - Invalid syntax in file %1, line %2, column %3! - Syntaxe invalide dans le fichier %1, ligne %2, colonne %3! + Une ou plusieurs extensions n'ont pas été activées suite à la survenue d'erreurs lors du chargement. Pour plus de détails, consultez la pile d'exceptions. + Assignment of empty XML buffer to parser! - Passage d'un tampon XML vide au parseur! - - - Could not access the file or directory %1! Make sure that it exists or if the user has access permissions on it! - Impossible d'accéder au fichier ou dossier %1! Assurez vous qu'il existe et que l'utilisateur a le droit d'y accéder! + Passage d'un tampon XML vide à l'analyseur ! + Assignment of empty DTD file name! - Le nom du fichier DTD est vide! + Le nom du fichier DTD est vide ! + Assignment of empty name to the DTD declaration! - Le nom de la DTD est vide! + Le nom de la déclaration DTD est vide ! + Operation on unallocated element tree! It is necessary to load the XML parser buffer and interpret it so that the tree is generated! - Opération sur un élément de l'arbre XML non initialisé! Il est nécessaire de remplir le tampon de l'analyseur XML et de lancer l'interprétation pour que l'arbre soit généré! - - - Could not load file %1. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! - Impossible de charger le fichier %1. Le fichier semble incohérent ou une de ses dépendances (fichiers DTD) contient des erreurs ou est manquantes! + Opération sur l'arbre d'élément non alloué ! Il est nécessaire de charger le tampon d'analyseur XML et de l'interpréter pour que l'arbre soit généré ! + Operation with unallocated tree element! - Opération sur un élément non alloué de l'arbre! + Opération avec un élément de l'arbre non alloué ! + Operation with element which does not exists in the element tree currently loaded! - Opération sur un élément inexistant dans l'arbre des élément actullement chargé! + Opération avec un élément inexistant dans l'arbre des éléments actullement chargé ! + Assignment of a value to an invalid connection parameter! - Affectation d'une valeur à un paramètre de connexion invalide! + Affectation d'une valeur à un paramètre de connexion invalide ! + Operation on connection not established! - Opération sur une connexion non établie! + Opération sur une connexion non établie ! + Attempt to connect without define configuration parameters! - Tentative de connexion sans paramètre de configuration défini! + Tentative de connexion sans paramètre de configuration défini ! + Assignment of not allocated SQL command result! - indéfini ? - Affectation d'un résultat de commande SQL non alloué! + Affectation d'un résultat de commande SQL non alloué ! + Unable to allocate the result of the SQL command because the response from the DBMS was not understood by the client! - Impossible de retourner le résultat de la commande SQL car la réponse du SGBD n'a pas été comprise par le client! + Impossible de retourner le résultat de la commande SQL car la réponse du SGBD n'a pas été comprise par le client ! + Reference to a column of tuple with invalid index! - Référence à une colonne de tuple dont l'index est invalide! + Référence à une colonne de tuple dont l'index est invalide ! + Reference to a column of tuple with invalid name! - Référence à une colonne de tuple dont le nom est invalide! - - - Reference to a tuple with index invalid or the result is empty (no tuples)! - Référence à un tuple avec un index invalide ou le résultat est vide (pas de tuple)! + Référence à une colonne de tuple dont le nom est invalide ! + Assignment of a not allocated column to object `%1' (%2)! - + Affectation d'une colonne non allouée à l'objet `%1 '(%2) ! + Assignment of a not allocated schema to object `%1' (%2)! - + Affectation d'un schéma non allouée à l'objet `%1 '(%2) ! + The object `%1' (%2) has inconsistent SQL or XML definition! - + L'objet `%1 '(%2) a une définition SQL ou XML incohérente ! + The object `%1' (%2) already exists on `%3' (%4)! - + L'objet `%1 '(%2) existe déjà sur `%3' (%4) ! + The object `%1' (%2) cannot be assigned because there is already exists in the container object `%3'! - + L'objet `%1 '(%2) ne peut être assigné car il existe déjà dans l'objet conteneur `%3' ! + The insertion of the parameter `%1' will not be possible because there is another parameter with same name in the function `%2'! - + L'insertion du paramètre `%1' ne sera pas possible car il existe un autre paramètre avec le même nom dans la fonction `%2' ! + The insertion of the table return type `%1' will not be possible because there is another return type with the same name in the `%2'! - + L'insertion du type de retour de la table `%1' ne sera pas possible car il existe un autre type de retour avec le même nom dans le`%2' ! + The column `%1' cannot be assigned to the trigger `%2' because they belongs to different parent tables! - + La colonne `%1' ne peut pas être affectée au déclencheur `%2' car ils appartiennent à des tables parentes différentes ! + Assignment of a not allocated function to object `%1' (%2)! - + Affectation d'une fonction non allouée à l'objet `%1' (%2) ! + Assignment of a function which return type is different from `%1'! - + Affectation d'une fonction dont le type de retour est différent de `%1' ! + Assignment of a function which parameter count is invalid to the object `%1' (%2)! - + Affectation d'une fonction dont le nombre de paramètres n'est pas valide pour l'objet `%1' (%2) ! + Event trigger function must be coded in any language other than SQL! - + La fonction de déclenchement d'événement doit être codée dans n'importe quelle langue autre que SQL ! + Assignment of not allocated table to object `%1' (%2)! - + Affectation de la table non allouée à l'objet `%1' (%2) ! + Assignment of appended or prepended SQL to an invalid object! - + Affectation de code SQL ajouté ou préfixé à un objet invalide ! + The insertion of the role `%1' is not possible because this is already being referenced by role `%2'! - + L'insertion du rôle `%1 n'est pas possible car il est déjà référencé par le rôle `%2' ! + Reference redundancy detected by having the role `%1' referencing the role `%2'! - + Redondance de références détectée en ayant le rôle `%1' référençant le rôle `%2' ! + The role `%1' can not be listed as a member of itself! - + Le rôle `%1' ne peut pas être listé comme un membre de lui-même ! + Assignment of owner table which is not in the same schema as the sequence `%1'! - + Affectation de la table propriétaire qui n'est pas dans le même schéma que la séquence `%1' ! + Assignment of owner table which does not belong to the same owner of the sequence `%1'! - + Affectation de la table propriétaire qui n'appartient pas au même propriétaire de la séquence `%1' ! + Assignment of a nonexistent owner column to the sequence `%1'! - + Affectation d'une colonne propriétaire inexistante à la séquence `%1' ! + Assignment of an owner column to the sequence `%1' that is not related to any table! - + Affectation d'une colonne propriétaire à la séquence `%1' qui n'est liée à aucune table ! + Assignment of a function with invalid return type to object `%1' (%2)! - + Affectation d'une fonction avec un type de retour invalide à l'objet `%1' (%2) ! + Assignment of a function with invalid parameter(s) type(s) to object `%1' (%2)! - + Affectation d'une fonction avec un (des) paramètre(s) non valide(s) à l'objet `%1' (%2) ! + Assignment of an empty directory to object `%1' (%2)! - + Affectation d'un répertoire vide à l'objet `%1' (%2) ! + Assignment of system reserved name to the object `%1' (%2)! - + Affectation du nom réservé au système à l'objet `%1' (%2) ! + One function with invalid configuration is been used by the object `%1' (%2)! - + Une fonction avec une configuration invalide est utilisée par l'objet `%1' (%2) ! + The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4)! - + L'objet `%1' (%2) ne peut pas être supprimé car il est référencé par l'objet `%3' (%4) ! + The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4) that belongs to `%5' (%6)! - + L'objet `%1' (%2) ne peut pas être supprimé car il est référencé par l'objet `%3' (%4) appartenant à `%5' (%6) ! + The creation of the relationship `%1' between the table `%2' and `%3' can not be done because one does not have a primary key. If the relationship is of the type n-n both tables must have primary keys! - + La création de la relation `%1' entre la table `%2' et `%3' ne peut pas être effectuée car il n'y a pas de clé primaire. Si la relation est du type n-n, les deux tables doivent avoir des clés primaires ! + Unable to create a copy relationship because the column `%1' in table `%2' already exists in table `%3'! - + Impossible de créer une relation de copie car la colonne `%1' de la table `%2' existe déjà dans la table `%3' ! + Unable to create the generalization relationship because the column `%1' in table `%2' can not be merged with the column `%3' of table `%4' because they have incompatible types! - + Impossible de créer la relation de généralisation car la colonne `%1' de la table `%2' ne peut pas être fusionnée avec la colonne `%3' de la table `%4' car ils ont des types incompatibles ! + The object `%1' (%2) is referencing the object `%3' (%4) which was not found in the model! - + L'objet `%1' (%2) fait référence à l'objet `%3' (%4) qui n'a pas été trouvé dans le modèle ! + Unable to write the file or directory `%1'! Make sure the output directory exists, or if the user has write permissions over it! - - - - There is already a relationship between `%1' (%2) and `%3' (%4) in the model! - + Impossible d'écrire le fichier ou le répertoire `%1' ! Assurez-vous que le répertoire de sortie existe et que l'utilisateur a les droits d'écriture dedans ! + The primary key `%1' can only be allocated if declared within a block of code that defines a table or relationship! - + La clé primaire `%1' ne peut être allouée que si elle est déclarée dans un bloc de code qui définit une table ou une relation ! + There is already a permission on object `%1' (%2) which has one or more equal roles from those present on permission to be assigned to the object! - + Il y a déjà une permission sur l'objet `%1' (%2) qui a un ou plusieurs rôles égaux à ceux présents dans l'autorisation à assigner à l'objet ! + A permission is referencing the object `%1' (%2) which was not found in the model! - + Une permission fait référence à l'objet `%1' (%2) qui n'a pas été trouvé dans le modèle ! + The object `%1' (%2) can not be created because its not being assigned to any schema! - + L'objet `%1' (%2) ne peut pas être créé car il n'est affecté à aucun schéma ! + The tablespace `%1' can not be inserted into the model because it points to the same directory as the tablespace `%2'! - + L'espace de stockage `%1' ne peut pas être inséré dans le modèle car il pointe sur le même répertoire que l'espace de table `%2' ! + The function `%1' can not get a source code as a definition because its language is set to C. Use the attributes symbol and dynamic library instead! - + La fonction `%1' ne peut pas obtenir un code source en tant que définition car sa langue est définie sur C. Utilisez plutôt le symbole d'attributs et la bibliothèque dynamique ! + The function `%1' can have the attributes symbol and dynamic library configured only if the language is set to C. For all other cases you must specify a source code that defines it in the DBMS! - + La fonction `%1' peut avoir le symbole des attributs et la bibliothèque dynamique configurés uniquement si la langue est définie sur C. Dans tous les autres cas, il faut spécifier un code source qui le définit dans le SGBD ! + The operator `%1' can not be assigned as a comutator of operator `%2' because it has incompatible settings! - + L'opérateur `%1' ne peut pas être affecté en tant que commutateur de l'opérateur `%2'car il comporte des paramètres incompatibles ! + The operator `%1' can not be assigned as negator of operator `%2' because it has incompatible settings! - + L'opérateur `%1' ne peut pas être affecté en tant que négateur de l'opérateur `%2' car il a des paramètres incompatibles ! + The type `%1' can not self refer in the attributes `element' or `copy type' or be used as a data type of an attribute in the configuration of a composite type! - + Le type `%1' ne peut pas se référer à lui-même dans les attributs `element' ou `copy type' ou être utilisé comme type de données d'un attribut dans la configuration d'un type composite ! + Assignment of invalid element to type `%1'! - + Affectation d'un élément invalide de type `%1' ! + Assignment of invalid alignment to type `%1'! - + Affectation de l'alignement invalide de type `%1' ! + The relationship `%1' can not make use of the special primary key because it is marked as identifier or it is a self relationship! - + La relation `%1' ne peut pas utiliser la clé primaire spéciale car elle est marquée comme identifiant ou c'est une association d'elle-même ! + The object `%1' (%2) can not be edited or deleted because it was automatically included through a relationship! If the object is an attribute or constraint the modifications must be done on the relationship editing form. - + L'objet `%1' (%2) ne peut pas être modifié ou supprimé car il a été automatiquement inclus dans une association ! Si l'objet est un attribut ou une contrainte, les modifications doivent être effectuées sur le formulaire d'édition de la relation. + The object `%1' (%2) can not be deleted because it is protected! - + L'objet `%1' (%2) ne peut pas être supprimé car il est protégé ! + The group `%1' has already been declared earlier! - + Le groupe `%1' a déjà été déclaré ! + The group `%1' can not be built in the groups declaration block (%2)! - + Le groupe `%1' ne peut pas être construit dans le bloc de déclaration de groupe (%2) ! + The group `%1' was built but not declared in the groups declaration block (%2)! - + Le groupe `%1' a été construit mais pas déclaré dans le bloc de déclaration de groupe (%2) ! + The group `%1' can not be built without possessing child elements! - + Le groupe `%1' ne peut pas être construit sans posséder d'éléments enfants ! + The group `%1' can not be built once more because this was done in previous blocks! - + Le groupe `%1' ne peut pas être construit une fois de plus car cela a été fait dans les blocs précédents ! + The group `%1' has been declared but not built! - + Le groupe `%1' a été déclaré mais pas construit ! + The new configuration of the function invalidates the object `%1' (%2)! In this case it is needed to undo the relationship between the affected object and function in order to the new configuration to take effect! - + La nouvelle configuration de la fonction invalide l'objet `%1' (%2) ! Dans ce cas, il est nécessaire d'annuler la relation entre l'objet affecté et la fonction afin que la nouvelle configuration prenne effet ! - Invalid instruction `%1' on file %2, line %3, column %4! - + + Error while interpreting XML buffer at line %1 column %2. +Message generated by the parser: %3. %4 + Erreur lors de l'interprétation du tampon XML à la ligne %1, colonne %2. +Message généré par l'analyseur : %3. %4 - Invalid metacharacter `%1' in file %2, line %3, column %4! - + + Attempt to start a connection already stablished! + Tentative de lancement d'une connexion déjà établie ! - Invalid operator `%1' in comparison expression, file %2, line %3, column %4! - + + Could not connect to the database. +Message returned: `%1' + Impossible de se connecter à la base de données. +Message renvoyé : `%1' - Attribute `%1' with an undefined value in file %2, line %3, column %4! - + + Unable to allocate command result for the SQL because the server has generated a fatal error! +Message returned by the DBMS: `%1' + Impossible d'allouer le résultat de la commande SQL car le serveur a généré une erreur fatale ! +Message renvoyé par le SGBD : `%1' - Attribute `%1' with an invalid name in file %2, line %3, column %4! - - - - Error while interpreting XML buffer at line %1 column %2. -Message generated by the parser: %3. %4 - - - - Attempt to start a connection already stablished! - - - - Could not connect to the database. -Message returned: `%1' - - - - Unable to allocate command result for the SQL because the server has generated a fatal error! -Message returned by the DBMS: `%1' - - - - Reference to a column of a tuple which was not yet initialized (tuple navigation not started)! - + + Reference to a column of a tuple which was not yet initialized (tuple navigation not started)! + Référence à une colonne d'un tuple qui n'a pas encore été initialisé (navigation en tuple non démarrée) ! + Could not execute the SQL command. Message returned: `%1' - + Impossible d'exécuter la commande SQL. + Message renvoyé : `%1' + It is not possible mix ordinary references (SELECT-FROM, FROM-WHERE, After WHERE) with references used as view SQL definition! - + Il n'est pas possible de mélanger des références ordinaires (SELECT-FROM, FROM-WHERE, Après WHERE) avec des références utilisées comme vue de définition SQL ! + The object `%1' (%2) cannot reference itself! This operation is not permitted for this kind of object! - + L'objet `%1' (%2) ne peut pas se référencer lui-même ! Cette opération n'est pas autorisée pour ce genre d'objet ! + Only operator families which uses `btree' as indexing method are accepted by operator class elements! - + Seules les familles d'opérateurs qui utilisent `btree 'comme méthode d'indexation sont acceptées par les éléments de classe d'opérateur ! + Copy relationship between tables `%1' and `%2' cannot be done because the first one already copies attributes from `%3'! Tables can have only one copy table! - + L'association de copie entre les tables `%1' et `%2' ne peut pas être effectuée car la première copie déjà les attributs de `%3' ! Les tables ne peuvent avoir qu'une seule table de copie ! + Assignment of a column which has no parent table to the object `%1' (%2)! - + Affectation d'une colonne qui n'a pas de table parent à l'objet `%1' (%2) ! + The operator class assigned to the object `%1' (%2) must use `btree' as indexing method! - + La classe d'opérateur affectée à l'objet `%1' (%2) doit utiliser` btree' comme méthode d'indexation ! + The extension `%1' is registered as a data type and cannot have the attribute `handles datatype' modified! - + L'extension `%1' est enregistrée en tant que type de données et ne peut pas avoir l'attribut `handle datatype' modifié ! + The fk relationship `%1' cannot be created because the foreign-key that represents it was not created on table `%2'! - + L'association clé étrangère `%1' ne peut pas être créée car la clé étrangère qui la représente n'a pas été créée sur la table `%2' ! + Assignement of an invalid object name pattern to the relationship `%1'! - + Affectation d'un modèle de nom d'objet invalide à la relation `%1' ! + Reference to an invalid object name pattern id on the relationship `%1'! - + Référence à un identifiant de modèle de nom d'objet invalide sur la relation `%1' ! + Mixing incompatibles DBMS export modes: `ignore object duplications', `drop database' or `drop objects' cannot be used with `simulate export'! - + Mélange incompatibles des modes d'export du SGBD : `ignore object duplications', `drop database' ou `drop objects' ne peuvent être utilisés avec `simulate export' ! + Mixing incompatibles DROP options: `drop database' and `drop objects' cannot be used at the same time! - + Mixage incompatible des options DROP : `drop database' et `drop objects' ne peuvent pas être utilisés en même temps ! + Invalid object id swapping operation! The objects involved are the same! - + Opération d'échange d'identifiant d'objet invalide ! Les objets impliqués sont les mêmes ! + Invalid object id swapping operation! The database itself, tablespaces or roles cannot have the ids swapped! - + Opération d'échange d'identifiant d'objet invalide ! La base de données elle-même, les espaces de stockage ou les rôles ne peuvent pas échanger leurs identifiants ! + The widget already has a parent and cannot be assigned to a different object! - - - - The object `%1' (%2) could not be imported due to one or more errors! Check the exception stack for more details. - + Le widget a déjà un parent et ne peut pas être assigné à un objet différent ! + Could not load the database model file `%1'. Check the error stack to see details. Try to run `pgmodeler-cli --fix-model' in order to correct the structure of the file if that is the case. - + Impossible de charger le fichier de modèle de base de données `%1'. Vérifiez la pile d'erreurs pour plus de détails. Essayez d'exécuter `pgmodeler-cli --fix-model' afin de corriger la structure du fichier si besoin. + The column `%1' cannot reference it's parent table `%2' as data type! - + La colonne `%1' ne peut pas référencer sa table parent `%2' comme type de données ! + Operation with an invalid element id `%1'! - + Opération avec un identifiant d'élément invalide `%1' ! + Reference to an invalid color id `%1' for element `%2'! - + Référence à un identifiant de couleur invalide `%1' pour l'élément `%2' ! + The sequence `%1' can't be assigned to the column `%2' because the data type of the latter is incompatible. The type used must be an integer one! - + La séquence `%1' ne peut pas être affectée à la colonne `%2' car le type de données de cette dernière est incompatible. Le type utilisé doit être un entier ! + The option to generate temporary object names can only be used in simulation mode! - + L'option de génération de noms d'objets temporaires ne peut être utilisée qu'en mode simulation ! + Could not assign the variable `%1' to event trigger's filter. Currently, PostgreSQL supports only the `TAG' variable! - - - - Could not perform the `%1' operation on `%2' using the data on row `%3'! All changes were rolled back. - - ** Returned error ** - -%4 - + Impossible d'affecter la variable `%1 'au filtre du déclencheur d'événement. Actuellement, PostgreSQL supporte uniquement la variable `TAG' ! + Malformed unescaped value on row `%1' column `%2'! - + Valeur non echappée malformée à la ligne `%1', colonne `%2' ! + The object `%1' (%2) can't be handled because some needed fields are not set! Please, make sure to fill at least the requires fields in order to properly create or update the object. - + L'objet `%1' (%2) ne peut pas être manipulé car certains champs nécessaires ne sont pas définis ! Merci de vous assurer de remplir au moins les champs requis afin de créer ou de mettre à jour correctement l'objet. + A relationship can only be swapped by other object of the same kind! - + Une association ne peut être permutée que par un autre objet du même genre ! + Assignment of a null type to object `%1' (%2)! - + Affectation d'un type nul à l'objet `%1' (%2) ! + Unable to create the generalization relationship because the constraint `%1' in table `%2' can not be merged with the constraint `%3' of table `%4' due to their incompatible composition! - + Impossible de créer l'association de généralisation car la contrainte `%1' de la table `%2' ne peut pas être fusionnée avec la contrainte `%3' de la table `%4' en raison de leurs compositions incompatibles ! + Unable to write the file `%1' due to one or more errors in the definition generation process! - + Impossible d'écrire le fichier `%1' en raison d'une ou de plusieurs erreurs dans le processus de génération de définition ! + The configuration of the relationship `%1' generates a redundancy between the relationships `%2'. Redundancy on identifier or generalization/copy relationships are not accepted since they result in incorrect column spreading making the model inconsistent! - + La configuration de la relation `%1' génère une redondance entre les associations `%2 . La redondance sur l'identificateur ou les relations de généralisation/copie de l'association ne sont pas acceptées car elles entraînent une répartition incorrecte des colonnes, ce qui rend le modèle incohérent ! + + + + Invalid syntax in file `%1', line %2, column %3! + Syntaxe non valide dans le fichier `%1', ligne %2, colonne %3! + + + + Invalid instruction `%1' on file `%2', line %3, column %4! + Instruction invalide `%1' dans le fichier `%2', ligne `%3', colonne `%4' ! + + + + Unknown attribute `%1' in file `%2', line %3, column %4! + Attribut inconnu `%1' dans le fichier `%2', ligne `%3', colonne `%4' ! + + + + Invalid metacharacter `%1' in file `%2', line %3, column %4! + Métacaractère invalide `%1' dans le fichier `%2', ligne `%3', colonne `%4' ! + + + + Invalid operator `%1' in comparison expression, file `%2', line %3, column %4! + Opérateur invalide `%1' dans l'expression de comparaison, fichier `%2', ligne`%3', colonne `%4' ! + + + + Attribute `%1' with an undefined value in file `%2', line %3, column %4! + L'attribut `%1' a une valeur non définie dans le fichier `%2', ligne`%3', colonne `%4' ! + + + + Attribute `%1' with an invalid name in file `%2', line %3, column %4! + L'attribut `%1' a un nom invalide dans le fichier `%2', ligne`%3', colonne `%4' ! + + + + Could not access the file or directory `%1'! Make sure that it exists or if the user has access permissions on it! + Impossible d'acceder au fichier ou fossier `%1' ! Vérifiez qu'il existe et que l'utilisateur à les droits d'écritures ! + + + + Could not load file `%1'. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! + Impossible de charger le fichier `%1'. La même chose semble être incohérente ou l'une de ses dépendances (fichiers DTD) a des erreurs ou est manquante ! + Reference to a tuple with an invalid index or the result is empty (no tuples)! - + Référence à un tuple avec un index invalide ou le résultat est vide (pas de tuple) ! + Invalid use of a view reference as whole SQL definition! The assigned reference must be an expression! - + Utilisation invalide d'une référence de vue comme définition SQL entière ! La référence affectée doit être une expression ! + At the moment pgModeler does not support the creation of primary keys which some columns were generated by relationship connection. To create primary keys with this feature you can use the field `Identifier' or the tab `Primary key' on relationship editing form! - + Actuellement pgModeler ne supporte pas la création de clés primaires dont certaines colonnes ont été générées par la connection d'associations. Pour créer des clés primaires avec cette fonctionnalité, vous pouvez utiliser le champ `Identifier' ou l'onglet `Primary key' sur le formulaire d'édition de relation ! + Reference to a function id which is incompatible with the user define type configuration! - + Référence à un identifiant de fonction incompatible avec la configuration du type de définition de l'utilisateur ! + + + + Unsupported PostgreSQL version (%1) detected! Valid versions are between %2 and %3. + Version PostgreSQL non prise en charge (%1) détectée! Les versions valides sont comprises entre %2 et %3. + Invalid use of variadic parameter mode! This mode can be used only with an array or "any" data type! - + Utilisation invalide du mode paramètre variadique ! Ce mode ne peut être utilisé qu'avec un tableau ou un type de données "any" ! + + The object `%1' (%2), oid `%3', could not be imported due to one or more errors! Check the exception stack for more details. `HINT:' if the object somehow references objects in `pg_catalog' or `information_schema' consider enable the importing of system objects. + L'objet `%1 '(%2), oid `%3', n'a pu être importé en raison d'au moins une erreur ! Vérifiez la pile d'exceptions pour plus de détails. `REMARQUE : 'Si l'objet référence d'une manière ou d'une autre les objets dans` pg_catalog' ou `information_schema ', envisagez d'importer les objets système. + + + Assignment of an invalid object to `%1' (%2)! The assigned object must be of type `%3'. - + Affectation d'un objet invalide à `%1' (%2) ! L'objet affecté doit être de type `%3'. + It's not possible convert the type of the column `%1' to serial! It must have an `integer' based type and its default value must be a call to `nextval(seq_name::regclass)' function or a sequence object must be directly assigned to the column! - + Il n'est pas possible de convertir le type de la colonne `%1' en série ! Il doit avoir un type basé sur `integer' et sa valeur par défaut doit être un appel à la fonction `nextval (seq_name::regclass)' ou un objet séquence doit être directement assigné à la colonne ! + + + + Could not perform the `%1' operation on `%2' using the data on row `%3'! All changes were rolled back. + + ** Returned error ** + +%4 + Impossible d'exécuter l'opération `%1 'sur `%2' en utilisant les données de la ligne `%3 '! Tous les changements ont été annulés. + + ** Erreur retournée ** + +%4 + Trying to undo/redo an invalid operation over an object that does not exists anymore or can't be handled! The operation history will be cleaned up. - + Tentative d'annulation/de rétablissement d'une opération invalide sur un objet qui n'existe plus ou ne peut plus être géré ! L'historique des opérations sera nettoyé. + A parent table of `%1' which OID is `%2' was not found in the set of imported objects! - + Une table parente de `%1' dont l'OID est `%2' n'a pas été trouvée dans l'ensemble des objets importés ! + The enumeration `%1' can't be assigned to the type `%2' because contains invalid characters! - + L'énumération `%1' ne peut pas être affectée au type `%2' car elle contient des caractères non valides ! + The enumeration `%1' can't be assigned to the type `%2' because is too long! - + L'énumération `%1' ne peut pas être affectée au type `%2' car elle est trop longue ! + The connection was idle for too long and was automatically closed! - + La connexion était inactive depuis trop longtemps et a été automatiquement fermée ! + The connection was unexpectedly closed by the database server `%1' at port `%2'! - + La connexion a été fermée de manière inattendue par le serveur de la base de données `%1' sur le port `%2' ! ExtensionWidget - Form - Formulaire - - + Version: - Version: + Version : + Old Version: - Ancienne version: + Ancienne version : + This attribute cannot be changed once the object is created. Cet attribut ne peut être modifié une fois l'objet créé. + Handles data type - Prendre en charge les types de données + Gérer les types de données FindReplaceWidget + Form Formulaire + + Hide this widget + + + + + ... + ... + + + Replace one occurrence Remplace une occurrence + Replace Remplacer + Replace all occurrences Remplace toutes les occurrences + Replace All Remplacer tout + Replace the selection and find the next one Remplacer l'occurrence courante et trouver le suivant + Replace && Find Remplacer && Suivant + Replace: - Remplacer par: + Remplacer par : + Find: - Recherche: + Recherche : + Find previous Précédent + Shift+F3 - Shift+F3 + Maj+F3 + Find next Suivant + F3 F3 + Case sensitive Respecter la casse + Regular expression Expression régulière + Whole words Mots entier @@ -4347,563 +5338,753 @@ Message returned by the DBMS: `%1' FunctionWidget - Form - Formulaire - - + Attributes Attributs - Langague: - Langage: - - + Function Type: - Type de fonction: + Type de fonction : + Execution Cost: - Coût d'exécution: + Coût d'exécution : + Rows Returned: - Lignes retournées: + Lignes retournées : + Behavior: - Comportement: + Comportement : + Security: - Sécurité: + Sécurité : + Return Method: - Type de retour: - - - Simple - Simple + Type de retour : + Set Multiple - Table - Table - - + Return Table Table de retour + Windown Func. - Fonct. fenêtrage + Fonct. fenêtrage. + Leakproof Leakproof + Parameters Arguments + Definition Définition + Dynamic Library: - Bibliotèque dynamique: + Bibliothèque dynamique : + Symbol: - Symbole: + Symbole : + Library: - Bibliotèque: + Bibliothèque : + Source code: - Code source: + Code source : + Column Colonne + + Type - Type + + Name Nom + Mode - Mode + + Default Value Valeur par défaut + Si&mple - + Si&mple + Tab&le - + Tab&le + + + + Language: + Langage : GeneralConfigWidget + Form Formulaire + Milimeters Millimètres + Pixels Pixels + Inches Pouces + Centimeter Centimètres + A0 (841 x 1189 mm) A0 (841 x 1189 mm) + General && Design Général && modélisation - The opened models will be saved periodically - Les modèles ouverts seront sauvegardés à interval régulier - - + Check if there is a new version on server Vérifier la présence d'une nouvelle version au lancement + Design Modélisation + Graphical objects (table, views and textboxes) will be created in a single step without the need to click on canvas - Les nouveaux objets graphiques (tables, vues, zones de textes) seront ajoutés au modèle sans avoir besoin d'effectuer un second clic sur le caneva pour les positionner + Les objets graphiques (tables, vues, zones de textes) seront créés en une seule étape sans avoir besoin de cliquer sur le canevas. + Simplify creation of graphical objects Créer les nouveaux objets en un clic + After loading the model the last zoom and position on canvas will be restored - Restaure la dernière position ainsi que le zoom sur le caneva à l'écran lors de l'ouverture d'un modèle + Après le chargement du modèle, le dernier zoom et la position du canevas seront restaurés. + Save and restore last position and zoom Sauvegarder la position et le zoom - Disable antialiasing for lines and texts improving performance on huge models (requires restart) - Désactive l'anticrénelage pour les lignes et les textes afin d'améliorer la réactivité de l'application sur des modèles très etoffés (nécessite un redémarrage) - - + Disable render smoothness Désactiver l'anticrénelage + Hide the object that represents the relationship name - Masque l'étiquette indiquant le nom de chaque association - - - Operations like save, export and diff will be executed without asking user to validate the model - Certaines opérations comme l'enregistrement du fichier, l'export ou encore le différenetiel seront lancées sans demander à l'utilisateur de valider le modèle avant + Masque l'étiquette indiquant le nom de chaque association. + Validate before save, export or diff Validation du modèle toujours requise + Hide the object which represents the tag assigned to the table - Masque l'étiquette indiquant le tag associé à chaque table + Masquer l'objet qui représente la balise affectée à la table. + Hide the portion of table which represent triggers, indexes and rules - Masque les règles, les déclencheurs et les index dans l'affichage des tables - - - Swap panning and range selection triggers - Inverser le comportement du clic gauche - - - Toggles the code completion in all fields that accepts the input of SQL commads. - Active la complétion du code SQL dans les zones de texte prévues à cet effet. + Masque les règles, les déclencheurs et les index dans l'affichage des tables. + Enable SQL code completion Activer la complétion du code SQL + Printing && Code Impression && édition + + Size: + Taille : + + + + pt + pt + + + + Font: + Police : + + + + Hide relationship name + Masquer le nom des associations + + + + Hide table extended attributes + Masquer les attributs étendus des tables + + + + Paper: + Papier : + + + + Orientation: + Orientation : + + + + General + Général + + + + Operation history: + Historique des opérations : + + + + Hide table tags + Masquer les balises des tables + + + + Printing + Impression + + + + + Options: + Options : + + + + Print grid + Imprimer la grille + + + A1 (594 x 841 mm) - A1 (594 x 841 mm) + + A2 (420 x 594 mm) - A2 (420 x 594 mm) + + A3 (297 x 420 mm) - A3 (297 x 420 mm) + + A4 (210 x 297 mm) - A4 (210 x 297 mm) + + A5 (148 x 210 mm) - A5 (148 x 210 mm) + + A6 (105 x 148 mm) - A6 (105 x 148 mm) + + A7 (74 x 105 mm) - A7 (74 x 105 mm) + + A8 (52 x 74 mm) - A8 (52 x 74 mm) + + A9 (37 x 52 mm) - A9 (37 x 52 mm) + + B0 (1030 x 1456 mm) - B0 (1030 x 1456 mm) + + B1 (728 x 1030 mm) - B1 (728 x 1030 mm) + + B10 (32 x 45 mm) - B10 (32 x 45 mm) + + B2 (515 x 728 mm) - B2 (515 x 728 mm) + + B3 (364 x 515 mm) - B3 (364 x 515 mm) + + B4 (257 x 364 mm) - B4 (257 x 364 mm) + + B5 (182 x 257 mm) - B5 (182 x 257 mm) + + B6 (128 x 182 mm) - B6 (128 x 182 mm) + + B7 (91 x 128 mm) - B7 (91 x 128 mm) + + B8 (64 x 91 mm) - B8 (64 x 91 mm) + + B9 (45 x 64 mm) - B9 (45 x 64 mm) + + C5E (163 x 229 mm) - C5E (163 x 229 mm) + + Comm10E (105 x 241 mm) - Comm10E (105 x 241 mm) + + DLE (110 x 220 mm) - DLE (110 x 220 mm) + + Executive (191 x 254 mm) - Executive (191 x 254 mm) + + Folio (210 x 330 mm) - Folio (210 x 330 mm) + + Ledger (432 x 279 mm) - Ledger (432 x 279 mm) + + Legal (216 x 356 mm) - Legal (216 x 356 mm) + + Letter (216 x 279 mm) - Lettre (216 x 279 mm) + + Tabloid (279 x 432 mm) - Tabloid (279 x 432 mm) + - Code font style - Style de police pour le code SQL + + Custom + Personnalisé - Size: - Taille: + + Unity: + Unité : - pt - pt + + Custom Size: + Taille papier : - Font: - Police: + + Width: + Largeur : - Hide relationship name - Masquer le nom des associations + + Height: + Hauteur : - Hide table extended attributes - Masquer les attributs étendus des tables + + Page Margins: + Marges : - Paper: - Papier: + + Left: + Gauche : - Orientation: - Orientation: + + Left margin + Marge de gauche - Autosave interval: - Interval d'auto-enregistrement: + + Top: + Haut : - Grid size: - Taille de la grille: + + Top margin + Marge du haut - General - Général + + Right: + Droite : - Check for updates at startup - Vérifier MAJ au démarrage + + Right margin + Marge de droite - Operation history: - Historique des opérations: + + Bottom: + Bas : - By default panning mode is triggered with left click and range selection with Shift + left click. - Par défaut : le clic gauche permet de déplacer le canevas (glisser-déplacer), la sélection multiple (rectangle) s'effectue par Shift + clic gauche. + + Bottom margin + Marge du bas - Hide table tags - Masquer le tag des tables + + Landscape + Paysage - Printing - Impression + + Portrait + Portrait - Options: - Options: - + + Print page numbers + Imprimer les numéros de page + - Print grid - Imprimer la grille + + Start move the canvas when the cursor is on the canvas edges + Commencer à déplacer le canevas lorsque le curseur se trouve sur les bords de celui-ci. - Custom - Personalisé + + Move canvas by keep mouse on corners + Déplacer le canevas en gardant la souris sur les coins - Unity: - Unité: + + Disable antialiasing for lines and texts improving performance when handling huge models. + Désactiver l'antialiasing pour les lignes et les textes améliore les performances lors de la manipulation d'énormes modèles. - Custom Size: - Taille papier: + + Triggers a dialog asking the user to validate the model before a save, export or diff operation. + Déclenche une boîte de dialogue demandant à l'utilisateur de valider le modèle avant une opération de sauvegarde, d'export ou de comparaison. - Width: - Largeur: + + When enabled this option creates a placeholder object at the previous table's position when starting to move it. This will cause graphical updates on relationship lines to be performed only when the drag & drop action is done improving the performance. Disabling placeholders will cause those updates to be executed every time the table's position changes a single pixel (classical behavior). + Lorsqu'elle est activée, cette option crée un objet réservé à la position de la table précédente lorsque vous commencez à la déplacer. Afin d'améliorer les performances, la mise à jour graphique sur les lignes associées ne se fera uniquement qu'une fois l'action de glisser-déposer términée. La désactivation des espaces réservés entraîne l'exécution de ces mises à jour chaque fois que la position de la table change d'un seul pixel (comportement classique). - Height: - Hauteur: + + Use placeholders when moving tables + Utiliser des espaces réservés lors du déplacement de tables - Page Margins: - Marges de la page: + + Toggles the code completion in all fields that accepts the input of SQL commands. + (Dés)active l'achèvement du code dans tous les champs qui acceptent les commandes SQL en entrée. - Left: - Gauche: + + Code style + Style du code - Left margin - Marge gauche + + Colors: + Couleurs : - Top: - Haut: + + Display line numbers + Afficher les numéros de ligne - Top margin - Marge haute + + Highlight lines at cursor's position + Surligner les lignes à la position du curseur - Right: - Droite: + + Custom tab width: + Largeur d'onglet personnalisé : - Right margin - Marge droite + + Line numbers' font color + Couleur de la police des numéros de ligne - Bottom: - Bas: + + Line numbers' background color + Couleur d'arrière-plan des numéros de ligne - Bottom margin - Marge basse + + Highlighted line color + Couleur de la ligne en surbrillance - Landscape - Paysage + + The little brown fox jumps over the lazy dog + Le petit renard brun saute par-dessus le chien paresseux - Portrait - Portrait + + System default + Défaillance du système - Print page numbers - Imprimer les numéros de page + + All files (*.*) + Tous les fichiers (*.*) - minute(s) - minute(s) + + Load file + Charger un fichier - items - entrées + + Minimum object opacity (%): + Opacité min. des objets (%) : - pixels - pixels + + Defines the minimum opacity percentage applied to the objects when using the fade out feature. A zero opacity causes the object to be completely hidden not being possible to interact with it in the canvas area. + Définit le pourcentage d'opacité minimum appliqué aux objets lorsqu'ils sont estompés. Une opacité nulle cache complètement l'objet sans qu'il soit possible d'interagir avec lui dans la zone de canevas. - Start move the canvas when the cursor is on the canvas edges - + + Canvas grid size: + Taille de grille du canevas : - Move canvas by keep mouse on corners - + + Defines the vertical and horizontal grid size. This value affects the spacing of objects when using object grid alignment feature. + Définit la taille de la grille verticale et horizontale. Cette valeur affecte l'espacement des objets lors de l'utilisation de la fonction d'alignement des objets sur la grille. - Disable antialiasing for lines and texts improving performance when handling huge models. - + + By default the range selection is triggered with Shift + left click. By checking this option range selection will be activated only with a single click and move. + Par défaut, la sélection de plage est déclenchée avec Maj + clic gauche. En cochant cette option, la sélection de la gamme sera activée qu'en un seul clic et se déplacera. - Triggers a dialog asking the user to validate the model before a save, export or diff operation. - + + Trigger range selection with a single click + Déclenchement de la sélection en un clic - When enabled this option creates a placeholder object at the previous table's position when starting to move it. This will cause graphical updates on relationship lines to be performed only when the drag & drop action is done improving the performance. Disabling placeholders will cause those updates to be executed every time the table's position changes a single pixel (classical behavior). - + + Defines the maximum amount of elements held in the operation history. Once reached the maximum number the history is automatically cleaned. + Définit le nombre maximal d'éléments contenus dans l'historique des opérations. Une fois le nombre maximum atteint, l'historique est automatiquement nettoyé. - Use placeholders when moving tables - + + Defines the period when the opened models will be saved automatically. + Définit la période (en minute) d'enregistrement automatique des modèles ouverts. - Toggles the code completion in all fields that accepts the input of SQL commands. - + + Autosave interval (minutes): + Intervalle sauv. auto : - Code style - + + Replaces any straight line in relationship by curved ones in order to improve the model's visualization. + Remplace les lignes droites des relations par des courbes pour améliorer la lisibilité du modèle. - Colors: - Couleur: + + Use curved lines for relationships + Utiliser des lignes courbes pour les associations - Display line numbers - + + SQL history max. length: + Longueur max. de l'historique SQL : - Highlight lines at cursor's position - + + Souce code editor: + Éditeur de code source : - Custom tab width: - + + lines + lignes - Line numbers' font color - + + Clear the entire SQL comand history. + Nettoyer complètement l'historique des commandes SQL. - Line numbers' background color - + + Clear history + Nettoyer l'historique - Highlighted line color - + + Configurations directory: + Dossier de configuration : - The little brown fox jumps over the lazy dog - + + Browse the source code editor application + Rechercher l'éditeur de code source + + + + Open in file manager + Ouvrir dans le gestionnaire de fichier + + + + Check updates at startup + Vérifier MAJ au démarrage + + + + Souce code editor args: + Arg. pour l'éditeur de code source : + + + + User interface language: + Langue de l'interface graphique : + + + + Overrides the default user interface language defined by the system. Requires restarting the program. <strong>NOTE:</strong> UI translations are third party collaborations thus any typo or mistake should be reported directly to their respective maintainers. + Remplace la langue de l'interface utilisateur définie par défaut par le système. Nécessite de redémarrer le programme. <strong>REMARQUE :</strong> les traductions de l'interface utilisateur sont des collaborations avec des tiers; par conséquent, toute faute de frappe ou erreur doit être signalée directement à leurs responsables respectifs. - GraphicalView + GenericSQLWidget - Connected rels: %1 - Associations : %1 + + SQL code + Code SQL HintTextWidget + Form Formulaire @@ -4911,2857 +6092,3640 @@ Message returned by the DBMS: `%1' IndexWidget - Form - Formulaire - - + Attributes Attributs + Indexing: - Indexation: + Indexation : + Fill Factor: - Taux de remplissage: + Taux de remplissage : + Options: - Options: + Options : + Concurrent Concurrent + Unique Unique + Fast update Mise à jour rapide + Elements - Élements + Éléments + Buffering - + Mémoire tampon + Predicate: - + Prédicat : LanguageWidget - Form - Formulaire - - + Trusted: - De confiance: + De confiance : + The functions to be assigned to the language should have, respectively, the following signatures:<br/><br/> <strong>Handler Function:</strong> <em>language_handler function()</em><br/> <strong>Validator Function:</strong> <em>void function(oid)</em><br/> <strong>Inline Function:</strong> <em>void function(internal)</em> - Les fonctions attribuées au langage doivent avoir espectivement les signatures suivantes:<br/><br/> <strong>Fonction de management:</strong> <em>language_handler fonction()</em><br/> <strong>Fonction de validation:</strong> <em>void fonction(oid)</em><br/> <strong>Fonction Inline:</strong> <em>void fonction(internal)</em> + Les fonctions attribuées au langage doivent avoir respectivement les signatures suivantes :<br/><br/> <strong>Fonction de gestion :</strong> <em>language_handler function()</em><br/> <strong>Fonction de validation :</strong> <em>void function(oid)</em><br/> <strong>Fonction sur une ligne :</strong> <em>void function(internal)</em> + Validator Func.: - + Fonc. de validation : + Handler Func.: - + Fonc. gestionnaire : + Inline Func.: - + Fonc. en ligne : MainWindow + pgModeler - PostgreSQL Database Modeler - pgModeler - PostgreSQL Database Modeler + pgModeler – Modeleur de bases de données PostgreSQL + + + + &Validation + + + + + Alt+V + + + + + Ctrl+F + + + Alt+O + + + + + Alt+B + + + + &File &Fichier + &Edit Édit&ion + &Show &Affichage - &Plugins - E&xtensions - - + Plugins Extensions + New Nouveau + Controls Contrôles + General Général + Ctrl+N Ctrl+N - Save - Enregistrer - - + Ctrl+S Ctrl+S + Zoom in Zoom + + Ctrl+= Ctrl+= + Zoom out Zoom - + Zoom - Zoom - + Ctrl+- Ctrl+- - Load - Ouvrir - - + Ctrl+O Ctrl+O - Next - Suivant - - - Ctrl+Right - Ctrl+Right - - - Previous - Précédent - - - Ctrl+Left - Ctrl+Left - - - Save as - Enregistrer sous - - - Exit - Quitter - - + Ctrl+Q Ctrl+Q - About pgModeler - À propos de pgModeler - - + Export the current opened model in different modes Exporter le modèle courant sous différentes formes - Close - Fermer - - + Close current model Fermer le modèle courant + Ctrl+H Ctrl+H - Settings - Paramètres - - + Edit pgModeler settings Configurer pgModeler + F10 F10 - Wiki - Wiki - - - Access the wiki pages - Visiter le wiki (site) - - - CSS - CSS - - + Access the list of loaded plugins - Accéder a la liste des extensions chargées - - - Recent Models - Modèles récents + Accéder à la liste des extensions chargées + Load recently opened model Charger des modèles ouverts récemment - Import - Importer - - + Import existing database to new model (reverse engineering) Importer une base de données existante vers un modèle (reverse engineering) + Ctrl+Shift+I - Ctrl+Shift+I - - - Restore Session - Restaurer la session - - - Fix a model - Réparer un modèle + Ctrl+Maj+I + New version found! - Nouvelle version disponible! + Nouvelle version disponible ! + Update for the current version is available on project's site Une mise à jour pour votre version est disponible sur le site de pgModeler - Check for update - Vérifier les mises à jour - - + Main menu Menu principal + Show expanded Afficher la barre de menus + Hide main menu Cacher la barre de menus + Hides the main menu bar and put the action on a separated action Masque la barre de menu (le menu reste accessible via un bouton dans la barre d'outils) + Ctrl+Shift+H - Ctrl+Shift+H - - - Diff - Différencier - - - Determine the changes between model and database - Déterminer les modifications apportées entre un modèle et une base existante + Ctrl+Maj+H + Welcome Accueil + Welcome screen Écran d'accueil + Design Modéliser - Design datase models - Modéliser une base de données - - + Manage Administrer + Manage existent databases Administrer des bases existantes - Bug report - Rapporter un bug - - - F1 - F1 - - + O&bjects O&bjets - Alt+B - Alt+B - - - &Validation - &Validation - - - Alt+V - Alt+V - - + &Operations &Opérations - Alt+O - Alt+O - - + Find Object Chercher un objet - Ctrl+F - Ctrl+F - - - msg - message - - - Help - Aide - - - F4 - F4 - - - Print - Imprimer - - - Ctrl+P - Ctrl+P - - - Undo - Annuler - - - Ctrl+Z - Ctrl+Z - - - Redo - Rétablir - - - Ctrl+Y - Ctrl+Y - - - Export - Exporter - - + Ctrl+Shift+S - Ctrl+Shift+S + Ctrl+Maj+S + Show grid Afficher la grille - Ctrl+G - Ctrl+G - - - Ctrl+W - Ctrl+W - - - Normal zoom - Zoom normal - - - Ctrl+0 - Ctrl+0 - - - Align to grid - Aligner sur la grille - - + Align objects position to grid Aligner les objets sur la grille - Show delimiters - Afficher les délimiteurs - - + Show the page delimiters Afficher les délimiteurs de page - Ctrl+L - Ctrl+L - - + Save all Tout enregistrer - Overview - Vue d'ensemble - - + Show the model overview Afficher la vue d'ensemble du modèle - Save all models - Enregistrer tous les modèles - - + Clear Menu - Vider cette liste des modèles récents + Vider le menu + The demonstration version can create only `one' instance of database model! - La version de démonstration ne peut gérer qu'un seul modèle de base à la fois ! + La version de démonstration ne peut gérer qu'une seule instance de modèle de base de données ! + + Save model Enregistrer le modèle + + Warning Avertissement + Save '%1' as... Enregistrer '%1' sous... + + Database model (*.dbm);;All files (*.*) Modèle de base de données (*.dbm);; Tous les fichiers (*.*) + Database model printing Impression du modèle de base de données - Confirmation - Confirmation - - - Some models were modified! Do you really want to quit pgModeler without save them? - Des modifications n'ont pas été enregistrées ! Êtes-vous sûr de vouloir QUITTER pgModeler SANS SAUVEGARDER ? - - - The model was modified! Do you really want to close without save it? - Le modèle a été modifié. -Voulez-vous vraiment le FERMER SANS le SAUVEGARDER? - - + Save anyway Sauvegarder quand même + + + Validate Valider + Changes were detected in the definitions of paper/margin of the model which may cause the incorrect print of the objects. Do you want to continue printing using the new settings? To use the default settings click 'No' or 'Cancel' to abort printing. - Des modifications ont été détectées dans les définitions du papier ou des marges du modèle ce qui pourrait causer une mauvaise impression des objets. Souhaitez vous continuer l'impression avec les nouveaux paramètres? Pour utiliser les paramètres par défaut cliquez sur 'Non' ou 'Annuler' pour interrompre l'impression. + Des modifications ont été détectées dans les définitions du papier ou des marges du modèle ce qui pourrait causer une mauvaise impression des objets. Souhaitez-vous continuer l'impression avec les nouveaux paramètres ? Pour utiliser les paramètres par défaut cliquez sur 'Non' ou sur 'Annuler' pour interrompre l'impression. + Load model Charger un modèle + Could not load the database model file `%1'. Check the error stack to see details. You can try to fix it in order to make it loadable again. - Impossible de charger le modèle `%1'. Consultez la pile d'appel pour plus de détails. Essayez de réparer le modèle pour tenter de l'ouvrir à nouveau. + Impossible de charger le ficher modèle de base de données `%1'. Consultez la pile d'appel pour plus de détails. Essayez de réparer le modèle pour tenter de l'ouvrir à nouveau. + Fix model Réparer un modèle + Cancel Annuler - Open Wiki pages - Accèder au Wiki - - + This action will open a web browser window! Want to proceed? - Cette action ouvrira votre navigateur web! Souhaitez vous continuer? + Cette action ouvrira votre navigateur web ! Souhaitez vous continuer ? + Toggle the model objects widget - + (Dés)activer le widget des objets du modèle + Toogle the model validation widgets - + (Dés)activer le widget de validation du modèle + Toggle the operation history widget - + (Dés)activer le widget de l'historique des opérations + Toggle the object finder - + (Dés)activer le chercheur d'objet + action_main_menu - + action_menu_principal + Expands the main menu bar in classical mode - + Développe la barre de menus principale en mode classique - (Demo) - + + Saving temp. models + Sauvegarde temp. des modèles - Saving temp. models - + + Grid + Grille + + + + Hierarchical + Hiérarchique + + + + Scattered + Dispersé + + + + (Demo) + (Démo) + You're running a demonstration version! The model saving feature is available only in the full version! - + Vous utilisez une version de démonstration ! La fonction d'enregistrement du modèle est uniquement disponible dans la version complète ! + + + + + + Confirmation + + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! It's recommended to validate it before save in order to create a consistent model otherwise the generated file will be broken demanding manual fixes to be loadable again! - <strong>AVERTISSEMENT:</strong> Le modèle <strong>%1</strong> n'a pas été validé ! Avant de l'enregistrer il est recommandé de le valider afin de créer un modèle cohérent, sinon il peut en résulter un fichier mal formé nécessitant une édition manuelle pour pouvoir être chargé à nouveau dans l'application par la suite ! + <strong>AVERTISSEMENT :</strong> Le modèle <strong>%1</strong> n'a pas été validé ! Il est recommandé de le valider avant de l'enregistrer afin de créer un modèle cohérent, sinon il peut en résulter un fichier cassé nécessitant une réparation manuelle pour être chargé à nouveau chargeable ! + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! Before run the export process it's recommended to validate in order to correctly create the objects on database server! - <strong>AVERTISSEMENT:</strong> Le modèle <strong>%1</strong> n'a pas été validé ! Avant de procéder à un export il est recommandé de valider le modèle afin s'assurer de créer correctement les objets en base ! + <strong>AVERTISSEMENT :</strong> Le modèle <strong>%1</strong> n'a pas été validé ! Avant de procéder à un export il est recommandé de le valider afin de s'assurer de correctement créer les objets sur le serveur de base de données ! + Export anyway Exporter quand même + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! Before run the diff process it's recommended to validate in order to correctly analyze and generate the difference between the model and a database! - <strong>AVERTISSEMENT:</strong> Le modèle <strong>%1</strong> n'a pas été validé ! Avant de procéder à un différentiel il est recommandé de valider le modèle afin s'assurer que l'analyse entre celui-ci de la base de donnée se fasse correctement ! + <strong>AVERTISSEMENT :</strong> Le modèle <strong>%1</strong> n'a pas été validé ! Avant de procéder à une comparaison il est recommandé de le valider afin de s'assurer que l'analyse entre celui-ci de la base de donnée se fasse correctement ! + Diff anyway - Différencier quand même + Comparer quand même + (no samples found) - + (aucun exemple trouvé) + save - + sauvegarde + export - + exporter + diff - + comparer + Executing pending <strong>%1</strong> operation... - + Exécution de l'opération <strong>%1</strong> en attente... + + + + Rearrange objects over the canvas is an irreversible operation! Would like to proceed? + Réorganiser les objets sur le canvas est une opération irréversible ! Voulez-vous poursuivre ? + He&lp - + Ai&de + Pl&ugins - + Mod&ules + &New - + &Nouveau + New model - Nouveau modèle + Nouveau modèle + &Save - E&nregistrer + E&nregistrer + &Zoom in - + &Zoomer + Zoo&m out - + Dézoo&mer + &Load - O&uvrir + C&harger + Sa&ve as - + Enre&gistrer sous + E&xit - + Qui&tter + Exit pgModeler - + Quitter pgModeler + &About pgModeler - + &À propos de pgModeler + + + + F4 + + &Print - + Im&primer + Print model - + Imprimer le modèle + + Ctrl+P + + + + &Undo - + Ann&uler + Undo operation - + Annuler l'opération + + + + Ctrl+Z + + &Redo - + &Rétablir + Redo operation - + Rétablir l'opération + + + + Ctrl+Y + + &Export - &Exporter + &Exporter + Ctrl+Shift+E - + Ctrl+Maj+E + &Show grid - + A&fficher la grille + + + + Ctrl+G + + &Close - &Fermer + &Fermer + + + + Ctrl+W + + &Normal zoom - + Zoom &normal + + + + Ctrl+0 + + &Align to grid - + &Aligner sur la grille + Show &delimiters - + Afficher les &délimiteurs + + + + Ctrl+L + + &Settings - + Paramètre&s + F12 - F12 + + &Overview - + &Vue d'ensemble + &Support - + + Access the support page - + Accéder à la page du support + + + + F1 + + New object - + Nouvel objet + &Recent Models - + Modèles &récents + &Import - &Importer + &Importer + Rest&ore Session - + Restaurer la sessi&on + &Fix a model - + Réparer u&n modèle + &Check for update - + Re&chercher une mise à jour + &Diff - + &Comparer + Ctrl+Shift+D - + Ctrl+Maj+D + Shift+W - + Maj+W + Design database models - + Conception de modèles de base de données + Shift+D - + Maj+D + Shift+M - + Maj+M + &Bug report - + Rapport de &bug + Report a bug - + Rapporter un bug + Donate - + Faire un don + Help pgModeler by donating! - + Aider pgModeler en faisant un don ! + Objects me&tadata - + Mé&tadonnées des objets + Objects metadata - + Métadonnées des objets + Save modified model(s) - + Enregistrer le(s) modèle(s) modifié(s) + The following models were modified but not saved: %1. Do you really want to quit pgModeler? - + Les modèles suivants ont été modifiés mais non enregistrés : %1. Voulez-vous vraiment quitter pgModeler ? + The model <strong>%1</strong> was modified! Do you really want to close without save it? - + Le modèle <strong>%1</strong> a été modifié ! Êtes-vous certain de vouloir quitter sans l'enregistrer ? + Access support page - + Accéder à la page de support + You're running a demonstration version! Note that you'll be able to create only <strong>%1</strong> instances of each type of object and some key features will be disabled or limited!<br/><br/>You can purchase a full binary copy or get the source code at <a href='http://pgmodeler.com.br'>pgmodeler.com.br</a>. <strong>NOTE:</strong> pgModeler is an open source software, but purchasing binary copies or providing some donations will support the project and cover all development costs.<br/><br/> <strong>HINT:</strong> in order to test all features it's recommended to use the <strong>demo.dbm</strong> model located in </strong>Sample models</strong> at <strong>Welcome</strong> view.<br/><br/><br/><br/> - + Vous utilisez une version de démonstration ! Notez que vous ne pourrez créer que <strong>%1</strong> instances de chaque type d'objet et que certaines fonctionnalités clés seront désactivées ou limitées !<br/><br/>Vous pouvez acheter une copie binaire complète ou obtenir le code source sur <a href='http://pgmodeler.com.br'> pgmodeler.com.br </a>. <strong> REMARQUE :</strong> pgModeler est un logiciel open source, mais l'achat de copies binaires ou la fourniture de dons soutiendra le projet et couvrira tous les coûts de développement.<br/><br/> <strong>CONSEIL :</strong> Pour tester toutes les fonctionnalités, il est recommandé d'utiliser le modèle <strong>demo.dbm</strong> situé dans <strong>exemples de modèles</strong> dans la vue <strong>Bienvenue</strong>.<br/><br/><br/><br/><br/> + + + + Determine the changes between model/database and another database + Déterminer les changements entre le modèle/la base de données et une autre base de données + + + + Arrange objects + Organiser des objets + + + + Rearrange objects over the canvas + Réorganiser les objets sur le canevas Messagebox + Dialog Boîte de dialogue + msg message + Exceptions Exceptions + Show/hide exceptions stack. - Afficher/cacher la pile d'exceptions. + Afficher/cacher la pile d'exceptions. + ... ... + + &Yes &Oui + + &No &Non + + Information + + + + + Confirmation + + + + Cancel Annuler + Error Erreur + Alert Alerte - Information - Information - - - Confirmation - Confirmation - - + &Ok &Ok + &Cancel A&nnuler + Show raw text errors or information. - + Afficher le texte brute des erreurs ou des informations. MetadataHandlingForm + Handle metadata - + Gérer les métadonnées + &Apply - &Appliquer + &Appliquer + &Cancel - A&nnuler + A&nnuler + Handle objects metadata - + Gérer les métadonnées d'objets + Settings - Paramètres + Paramètres + Extract from: - + Extraction depuis : + Loading a metadata file to the current model is an irreversible operation so be sure to specify a backup file before proceed. - - - - Options - Options + Le chargement d'un fichier de métadonnées dans le modèle actuel est une opération irréversible, assurez-vous de spécifier un fichier de sauvegarde avant de continuer. + Handles the following database model attributes in the metadata file: author, zoom factor, last position and default objects. - + Gère, dans le fichier de métadonnées, les attributs de modèle de base de données suivants : auteur, facteur de zoom, dernière position et objets par défaut. + Database model metadata - + Métadonnées du modèle de base de données + Handles the objects' positioning in the metadata file. - + Gère le positionnement des objets dans le fichier de métadonnées. + + + + Options + + Objects' positioning - + Positionnement des objets + Handles the objects' custom colors in the metadata file. Currently available only for relationships and schemas. - + Gère les couleurs personnalisées des objets dans le fichier de métadonnées. Actuellement disponible uniquement pour les associations et les schémas. + Custom object's colors - + Couleurs de l'objet personnalisé + Handles the objects' protection status in the metadata file. - + Gère l'état de protection des objets dans le fichier de métadonnées. + Objects' protection status - + Statut de protection des objets + Handles the objects' SQL disabled status in the metadata file. - + Gère le statut désactivé du code SQL des objets dans le fichier de métadonnées. + Objects' SQL disabled status - + Statut désactivé du code SQL des objets + Handles the objects' custom SQL commands in the metadata file. - + Gère les commandes SQL personnalisées des objets dans le fichier de métadonnées. + Custom SQL commands - - - - Save textboxes to the output file when extracting metadata. When loading the file textboxes are recreated and duplicated ones are ignored. - + Commandes SQL personnalisées + Textbox objects - - - - Save tags to the output file when extracting metadata. When loading the file tags are recreated and duplicated ones are ignored. - + Objets de zone de texte + Tag objects - + Balises des objets + Backup file: - + Fichier de sauvegarde : + + Select file - - - - ... - ... + Sélectionner un fichier + Apply to: - + Appliquer à : + Operation: - - - - Extracts the objects metadata from one of the loaded models and apply to the current model. - - - - Extract from a &model - - - - Reads the objects metadata from a previously saved backup file and apply to the current model. - - - - Restore a bac&kup file - + Opération : + Output - + Sortie + Progress label... - Indicateur de progression... + Indicateur de progression... + + model not saved yet - + modèle pas encore enregistré + The backup file cannot be the same as the input model! - + Le fichier de sauvegarde ne peut être le même que le modèle d'entrée ! + Extracting metadata to file `%1' - + Extraction des métadonnées vers le fichier `%1' + Saving backup metadata to file `%1' - + Enregistrement des métadonnées de sauvegarde vers le fichier `%1' + Applying metadata from file `%1' - + Application des métadonnées depuis le fichier `%1' + Metadata processing aborted! - + Traitement des métadonnées abandonné ! + Objects metadata file (*.omf);;All files (*.*) - + Fichiers de métadonnées d'objets (*.omf);;Tous les fichiers (*.*) - - - ModelDatabaseDiffForm - Settings - Paramètres + + Handles the objects' fade out status in the metadata file. + Gère l'estompement des objets dans le fichier de métadonnées. - Connection: - Connexion: + + Objects' fade out status + Effet d'estompement des objets - Connect and list available databases - Connecter et lister les bases de données disponibles + + Save tags to the output file when extracting metadata. When loading the file, the tags are recreated and duplicated ones are ignored. + Enregistrer les étiquettes dans le fichier de sortie lors de l'extraction des métadonnées. Lors du chargement du fichier, les balises sont recréées et les doublons ignorés. - ... - ... + + Save textboxes to the output file when extracting metadata. When loading the file, the textboxes are recreated and duplicated ones are ignored. + Enregistrer les zones de texte dans le fichier de sortie lors de l'extraction des métadonnées. Lors du chargement du fichier, les zones de texte sont recréées et les zones dupliquées ignorées. - Ignore import errors - Ignorer les erreurs + + Handles the tables' and views' extended attributes display status in the metadata file. + Gère l'état d'affichage des attributs étendus des tables et des vues dans le fichier de métadonnées. - Import system objects - Importer les objets système + + Tables' extended attributes display + Affichage étendu des attributs des tables - Import extension objects - Importer les objets des extensions + + Save generic SQL objects to the output file when extracting metadata. When loading the file, the objects are recreated and duplicated ones are ignored. + Enregistrer les objets SQL génériques dans le fichier de sortie lors de l'extraction des métadonnées. Lors du chargement du fichier, les objets sont recréés et les doublons ignorés. - File: - Fichier: + + Generic SQL objects + Objets SQL génériques - Select output file - Sélectionner un fichier de sortie + + ... + - Cancel - Annuler + + Extracts the objects' metadata from the loaded models and apply to the current focused model. A backup file can be specified to where the focused model's current metadata will be saved. + Extrait les métadonnées des objets des modèles chargés et s'applique au modèle ciblé actuel. L'emplacement du fichier de sauvegarde dans lequel les métadonnées actuelles du modèle ciblé seront enregistrées peut-être spécifié. - Progress label... - Indicateur de progression... + + &Extract and restore + &Extraction et restauration - 0 - 0 + + Extracts the objects metadata from one of the loaded models saving the info to a backup file. + Extrait les métadonnées d'objets de l'un des modèles chargés et enregistre les informations dans un fichier. - &Close - &Fermer + + Extract &only + Extracti&on seule - Waiting process to start... - En attente... + + Reads the objects' metadata from a previously saved backup file and apply to the current model. + Lit les métadonnées des objets à partir d'un fichier de sauvegarde précédemment enregistré et s'applique au modèle actuel. - Confirmation - Confirmation + + &Restore a backup file + &Restaurer une sauvegarde + + + ModelDatabaseDiffForm - SQL code (*.sql);;All files (*.*) - Code SQL (*.sql);;Tous les fichiers (*.*) + + Settings + Paramètres - Database model diff - + + + Connection: + Connexion : - Generate diff from model - + + Ignore import errors + Ignorer les erreurs d'import - Input database - + + Import system objects + Importer les objets système - Database: - + + Import extension objects + Importer les objets des extensions - Options - + + File: + Fichier : - Trucate tables before alter columns - + + Select output file + Sélectionner un fichier de sortie - For DROP command, the objects that depends on an object to be dropped will be deleted as well. For TRUNCATE command, tables that are linked to a table to be truncated will be truncate too. <strong>NOTE:</strong> this option can affect more objects than listed in the output or diff preview. - + + Cancel + Annuler - Drop or truncate in cascade mode - + + Progress label... + Indicateur de progression... + + &Close + &Fermer + + + + + Waiting process to start... + En attente du démarrage de la tâche... + + + + SQL code (*.sql);;All files (*.*) + Code SQL (*.sql);;Tous les fichiers (*.*) + + + + + + Database: + Base de données : + + + + For DROP command, the objects that depends on an object to be dropped will be deleted as well. For TRUNCATE command, tables that are linked to a table to be truncated will be truncate too. <strong>NOTE:</strong> this option can affect more objects than listed in the output or diff preview. + Pour la commande DROP, les objets qui dépendent d'un objet à supprimer seront également supprimés. Pour la commande TRUNCATE, les tables liées à une table à tronquer seront également tronquées. <strong>REMARQUE :</strong> cette option peut affecter plus d'objets que ceux listés dans l'aperçu de sortie ou de comparaison. + + + + Drop or truncate in cascade mode + Supprimer ou tronquer en mode cascade + + + Permissions already set on database objects will be kept.The ones configured on the model will be applied to the database. - + Les autorisations déjà définies sur les objets de la base de données seront conservées. Les données configurées sur le modèle seront appliquées à la base de données. + Keep object's permissions - + Conserver les permissions des objets + Database cluster level objects like roles and tablespaces will not be dropped. - + Les objets de niveau de cluster de base de données tels que les rôles et les espaces de stockage ne seront pas supprimés. + Keep cluster objects - + Conserver les objets de cluster + Recreate only unmodifiable objects - + Recréer uniquement des objets non modifiables + Force recreation of objects - + Forcer la recréation d'objets + Ignores errors generated by duplicated objects when exporting the diff to database. - + Ignore les erreurs générées par les objets dupliqués lors de l'export de la comparaison vers la base de données. + Ignore duplicity errors - + Ignorer les erreurs de duplicité + Serial columns are converted to integer and having the default value changed to <strong>nextval(sequence)</strong> function call. By default, a new sequence is created for each serial column but checking this option sequences matching the name on column's default value will be reused and will not be dropped. - + Les colonnes de séries sont converties en nombre entier et la valeur par défaut est changée en appel de fonction <strong>nextval(sequence)</strong>. Par défaut, une nouvelle séquence est créée pour chaque colonne série, mais en cochant cette option, les séquences correspondantes au nom de la valeur par défaut de la colonne seront réutilisées et ne seront pas supprimées. + Reuse sequences on serial columns - + Réutiliser des séquences sur des colonnes de séries + Diff mode - + Mode comparaison + Override the PostgreSQL version when generating the diff. The default is to use the same version as the input database. - + Outrepasser la version de PostgreSQL lors de la génération de la comparaison. Par défaut, la valeur est celle de la version de la base de données. + Use PostgreSQL: - + Utiliser PostgreSQL : + Compares the model and the input database storing the diff in a SQL file for later usage. - + Compare le modèle avec la base de données d'entrée et stock le résultat dans un fichier SQL pour une utilisation ultérieure. + + + + ... + + Compares the model and the input database generating a diff and applying it directly to the latter. <strong>WARNING:</strong> this mode causes irreversible changes on the database and in case of failure the original structure is not restored, so make sure to have a backup before proceed. - + Compare le modèle et la base de données d'entrée générant un résultat qui est appliqué directement à cette dernière. <strong>AVERTISSEMENT :</strong> ce mode entraîne des modifications irréversibles sur la base de données et, en cas d'échec, la structure d'origine n'est pas restaurée. Assurez-vous donc d'avoir une sauvegarde avant de continuer. + Output - + Sortie + Changes: - + Modifications : + Step label... - + Étiquette étape... + <html><head/><body><p>Objects marked with an <span style=" font-weight:600;">ALTER</span> may not be effectively changed unless that the differences detected are in attributes that can be modified through ALTER commands otherwise no operationwill be performed or, if the force recreation is checked, the object will be dropped and created again.</p></body></html> - + <html><head/><body><p>Les objets marqués d'un <span style="font-weight : 600;">ALTER</span> ne peuvent être modifiés efficacement que si les différences détectées sont dans les attributs qui peuvent être modifié à l'aide des commandes ALTER. Dans le cas contraire, aucune opération ne sera effectuée ou, si la recréation de force est vérifiée, l'objet sera supprimé et créé à nouveau.</p></body></html> + Objects to be created - + Objets à créer + + + + + + + 0 + + Objects to be dropped - + Objets à supprimer + Possible objects to be changed - + Objets possiblement modifiables + Ignored objects (system ones or with sql disabled) - + Objets ignorés (ceux du système ou avec code SQL désactivé) + Diff Preview - + Aperçu de la comparaison + &Apply diff - + &Appliquer la comparaison + &Generate - + &Générer - Importing database <strong>%1</strong>... - + + <strong>WARNING:</strong> The generated diff is ready to be exported! Once started this process will cause irreversible changes on the database. Do you really want to proceed? + <strong>AVERTISSEMENT :</strong> La comparaison générée est prête à être exportée ! Une fois démarré, ce processus entraînera des changements irréversibles dans la base de données. Voulez-vous vraiment poursuivre ? - Comparing the model <strong>%1</strong> and database <strong>%2</strong>... - + + Apply diff + Appliquer la comparaison - <strong>WARNING:</strong> The generated diff is ready to be exported! Once started this process will cause irreversible changes on the database. Do you really want to proceed? - + + Preview diff + Aperçu de la comparaison - Apply diff - + + model not saved yet + modèle pas encore enregistré - Preview diff - + + (none) + (aucun) - Exporting diff to database <strong>%1</strong>... - + + Step %1/%2: Importing database <strong>%3</strong>... + Étape %1/%2 : Import de la base de données <strong>%3</strong>... + + + + Step %1/%2: Comparing <strong>%3</strong> and <strong>%4</strong>... + Étape %1/%2 : Comparaison de <strong>%3</strong> et de <strong>%4</strong>... + + + + Confirmation + + + + + Step %1/%2: Exporting diff to database <strong>%3</strong>... + Étape %1/%2 : Export de la comparaison de la base de données <strong>%3</strong>... + Diff process paused. Waiting user action... - + Comparaison mise en pause. En attente d'une action utilisateur... + Saving diff to file <strong>%1</strong> - + Enregistrement de la comparaison vers le fichier <strong>%1</strong> + Diff process sucessfully ended! - + Comparaison términée avec succès ! + + No operations left. - + Aucune opération restante. + Operation cancelled by the user. - + Opération annulée par l'utilisateur. + Process aborted due to errors! - + Processus abandonné en raison d'erreurs ! + -- No differences were detected between model and database. -- - + -- Aucune différence détectée entre le modèle et la base de données. -- + Error code <strong>%1</strong> found and ignored. Proceeding with export. - Code erreur <strong>%1</strong> reçu et ignoré. Poursuite de l'export. + Code erreur <strong>%1</strong> reçu et ignoré. Poursuite de l'export. + Save diff as... - + Enregistrer la comparaison sous... + Ignores as many as possible errors on import step. This option generates an incomplete diff. - + Ignore autant d'erreurs que possible sur l'étape de l'import. Cette option génère une comparaison incomplète. + Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production servers and always make a backup before use it. - + Efface les données de toutes les tables qui auront des colonnes modifiées. Ceci est utile pour éviter les erreurs liées à la conversion de type. <strong>AVERTISSEMENT :</strong> N'utilisez PAS cette option sur les serveurs de production et faites toujours une sauvegarde avant de l'utiliser. + Import system (built-in) objects. Use this if the import step is returning errors related to missing objects. - + Importer des objets système (intégrés). Utiliser cette option si l'étape d'import renvoie des erreurs liées à des objets manquants. + Import objects created by extensions. Use this if the import step is returning errors even importing built in ones. - + Importer des objets créés par des extensions. Utiliser cette option si l'étape d'import renvoie des erreurs, même si celles-ci sont importées. + Instead of use an ALTER command to modify certain kind of objects a DROP and CREATE will be used in order to do a full modification. This option does not affects the database object. - + Au lieu d'utiliser une commande ALTER pour modifier certains types d'objets, un DROP et un CREATE seront utilisés pour effectuer une modification complète. Cette option n'affecte pas l'objet de base de données. + No command to rename the destination database will be generated even the model's name differ from database name. - + Aucune commande permettant de renommer la base de données de destination ne sera générée même si le nom du modèle diffère du nom de la base de données. + Preserve database name - + Conserver le nom de la base de données + Avoid the generation of DROP commands for objects that exists in database but not in the model. This is useful when diff a partial model against the complete database. - + Éviter la génération de commandes DROP pour les objets qui existent dans la base de données mais pas dans le modèle. Ceci est utile lorsque un modèle partiel a été comparé à la base de données complète. + Do not drop missing objects - + Ne pas supprimer les objets manquants + Store in S&QL file - + Stocker dans un fichier S&QL + Appl&y on server - + Appliquer sur le serveur + -- SQL code purposely truncated at this point in demo version! - + + +-- Le code SQL est volontairement tronqué à ce stade dans la version démo ! + + + + Diff tool + Outil de comparaison + + + + Generate diff code + Générer un code de comparaison + + + + Source database + Base de données source + + + + Current model: + Modèle courant : + + + + (model) + (modèle) + + + + Compare to + Comparer à + + + + Diff + Comparaison + + + + Import && Export + Import && Export + + + + Import + + + + + Export + + + + + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + Cette option avancée oblige pgModeler à ignorer les erreurs supplémentaires par leurs codes numériques. Ces erreurs doivent être renseignées dans l'entrée ci-dessous et séparées par des espaces. Pour la liste complète des codes d'erreur, consulter les documents PostgreSQL, section <strong>Annexe A. Codes d'erreur PostgreSQL</strong>. <strong>AVERTISSEMENT :</strong> utiliser cette option avec un soin extrême, car elle peut interférer dans le résultat de l'export finale. + + + + Ignore error codes + Ignorer les codes d'erreur + + + + Froce the generation of DROP commands for columns and constraints that exist in database but not in the model. This is useful when diff a partial model against the complete database and the user needs to drop columns and constraint but preserve the rest of the objects. + Forcer la génération de commandes DROP pour les colonnes et les contraintes qui existent dans la base de données mais pas dans le modèle. Ceci est utile lorsqu'un modèle partiel est comparé à la base de données complète et que l'utilisateur doit supprimer les colonnes ainsi que les contraintes mais conserver les autres objets. + + + + Drop missing columns and constraints + Supprimer colonnes/contraintes manquantes + + + + Truncate tables before alter columns + Tronquer les tables avant de modifier les colonnes ModelExportForm - Model Export - Export du modèle - - + + File: - Fichier: + Fichier : + + Select target file Sélectionner le fichier cible + + ... ... + Zoom: - Zoom: + Zoom : + + Export model - Exportation d'un modèle + Export d'un modèle + Settings Paramètres + Database server Serveur de base de données + pgModeler ignores errors generated by duplicated objects and creates only that ones which does not exists in the database. This option may be used when an object was created after a previous model export. pgModeler ignorera les erreurs générées en raison d'objets dupliqués et ne créera uniquement ceux qui n'existent pas déjà en base. Cette option peut être utile lorsqu'un objet est créé après un précédent export. + PostgreSQL version in which the SQL code should be generated. It is recommended to select this option only when the version of the DBMS, somehow, is not identifiable or if you need to generate a specific version of SQL code for test purposes. Version de PostgreSQL pour laquelle le code SQL sera généré. Il est recommandé d'activer cette option uniquement si la version du SGBD n'est pas identifiable ou pour une raison spécifique par exemple pour des essais. + If <strong>DB</strong> is checked pgModeler will destroy the database if already exists on the server. When <strong>Objects</strong> is checked pgModeler will execute the DROP command attached to SQL-enabled objects. <strong>WARNING:</strong> this option leads to data loss so make sure to have a backup first. - Si <strong>BDD</strong> est coché pgModeler procèdera à la suppression complète de la base de données si elle existe déjà. Lorsque <strong>Objets</strong> est coché pgModeler effectuera la commande DROP rattachée à l'objet (si la génération du code SQL pour cet objet n'a pas été désactivée dans ses propriétés) <strong>AVERTISSEMENT:</strong> cette option engendre la perte de données, pensez à faire une sauvegarde avant. + Si <strong>BDD</strong> est coché, pgModeler procédera à la suppression complète de la base de données si elle existe déjà. Lorsque <strong>Objets</strong> est coché pgModeler effectuera la commande DROP rattachée à l'objet (si la génération du code SQL pour cet objet n'a pas été désactivée dans ses propriétés). <strong>AVERTISSEMENT :</strong> cette option engendre la perte de données, pensez à faire une sauvegarde avant. + Drop: - Ordre SQL intuitif - Drop: + Suppr. : + DB BDD - Objects - Objets - - - PNG Image - Image PNG - - + Show delimiters Afficher les délimiteurs de page + Exporting the model page by page will generate files with a <strong>_p[n]</strong> suffix where <strong>n</strong> is the page id. Check if the current user has write permission on output folder. - Exporter le modèle page par page génèrera des fichiers avec un suffixe de type <strong>_p[n]</strong> où <strong>n</strong> est le numéro de la page. Vérifiez que vous avez bien le droit d'écriture dans le dossier de sortie. + Exporter le modèle page par page générera des fichiers avec un suffixe de type <strong>_p[n]</strong> où <strong>n</strong> est le numéro de la page. Vérifiez que vous avez bien le droit d'écriture dans le dossier de sortie. + Page by page Une image par page + + PostgreSQL: - PostgreSQL: + PostgreSQL : + PostgreSQL version in which the SQL code should be generated Version de PostgreSQL pour laquelle le code SQL doit être généré + Cancel Annuler + pgModeler will destroy the database if already exists on the server. Make sure to have a backup before use this option because all data will be lost. pgModeler détruira la base de données si elle existe déjà sur le serveur. Assurez-vous d'avoir une sauvegarde si besoin avant car les données seront définitivement perdues. - Image: - Image: - - + Show grid Afficher la grille + Connection: - Connexion: + Connexion : + Ignore object duplicity Ignorer les objets dupliqués + SQL file Fichier texte SQL + + I&mage (PNG) + + + + Output Progression + Progress label... Indicateur de progression... + &Export &Exporter + &Close &Fermer + Initializing model export... - Initialisation de l'exportation du modèle... + Initialisation de l'export du modèle... + Saving file '%1' Enregistrement du fichier '%1' + + Exporting process aborted! - Processus d'exportation terminé en erreur! + Export abandonnée ! + Exporting process canceled by user! - Processus d'exportation annulé par l'utilisateur! + Export annulée par l'utilisateur ! + Exporting process sucessfuly ended! - Processus d'exportation terminé avec succès! + Export terminée avec succès ! + Export model as... Exporter le modèle sous... + Error code <strong>%1</strong> found and ignored. Proceeding with export. Code erreur <strong>%1</strong> reçu et ignoré. Poursuite de l'export. - SQL code (*.sql);;All files (*.*) - Fichiers SQL (*.sql);;Tous les fichiers (*.*) - - - PNG image (*.png);;All files (*.*) - Image PNG (*.png);;Tous les fichiers (*.*) - - + Ob&jects - + Ob&jets + Graphics file - - - - Image (PNG) - + Fichier graphique + Type: - Type: - - - Vectorial (SVG) - + Type : + SQL script (*.sql);;All files (*.*) - + Script SQL (*.sql);;Tous les fichiers (*.*) + Portable Network Graphics (*.png);;All files (*.*) - + Portable Network Graphics (*.png);;Tous les fichiers (*.*) + Scalable Vector Graphics (*.svg);;All files (*.*) - + Scalable Vector Graphics (*.svg);;Tous les fichiers (*.*) + + + + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + Cette option avancée oblige pgModeler à ignorer les erreurs supplémentaires par leurs codes numériques. Ces erreurs doivent être renseignées dans l'entrée ci-dessous et séparées par des espaces. Pour la liste complète des codes d'erreur, consulter les documents PostgreSQL, section <strong>Annexe A. Codes d'erreur PostgreSQL</strong>. <strong>AVERTISSEMENT :</strong> utiliser cette option avec un soin extrême, car elle peut interférer dans le résultat de l'export finale. + + + + Ignore error codes + Ignorer les codes d'erreur + + + + &Vectorial (SVG) + &Vectoriel (SVG) ModelExportHelper + Generating SQL code for PostgreSQL `%1' - + Génération du code SQL pour PostgreSQL `%1' + Output SQL file `%1' successfully written. - + Fichier SQL de sortie `%1' écrit avec succès. + Rendering objects to page %1/%2. - + Rendu des objets de la page %1/%2. + Output image `%1' successfully written. - + Fichier image de sortie `%1' écrit avec succès. + Starting export to DBMS. - + Lancement de l'export vers le SGBD. + PostgreSQL version detection overridden. Using version `%1'. - + Détection de version dépassée de PostgreSQL. Utilisation de la version `%1'. + PostgreSQL `%1' server detected. - + Serveur PostgreSQL `%1' détecté. + Generating temporary names for database, roles and tablespaces. - + Génération de noms, de rôles et d'espace de stockage temporaires pour la base de données. + Enabling the SQL code for database `%1' to avoid errors. - + Activation du code SQL de la base de données `%1' pour éviter les erreurs. + Ignoring object duplication errors. - + Omission des erreurs de duplication d'objet. + Ignoring the following error code(s): `%1'. - + Omission des codes erreur suivants : `%1'. + Trying to drop database `%1'. - + Tentative de suppression de la base de données `%1'. + Simulation mode activated. - + Mode simulation activé. + Generating SQL for `%1' objects... - + Génération de code SQL pour `%1' objets... + Destroying objects created on the server. - + Destruction des objets créés sur le server. + Restoring original names of database, roles and tablespaces. - + Restauration des noms, des rôles et des espaces de stockage originaux de la base de données. + + + Creating object `%1' (%2) - + Création de l'objet `%1' (%2) + + Dropping object `%1' (%2) - + Suppression de l'objet `%1' (%2) + Changing object `%1' (%2) - + Modification de l'objet `%1' (%2) + Running auxiliary command. - + Exécution de la commande auxiliaire. + Exporting model to SVG file. - + Export du modèle vers un fichier SVG. + SVG representation of database model - + Représentation SVG d'un modèle de base de données + SVG file generated by pgModeler - + Fichier SVG généré par pgModeler + Output file `%1' successfully written. - + Fichier de sortie `%1' écrit avec succès. + Creating database `%1' - + Création de la base de données `%1' + Connecting to database `%1' - + Connexion à la base de données `%1' + Renaming `%1' (%2) to `%3' - + Renommage de `%1' (%2) en `%3' ModelFixForm + Model file fix Réparer un fichier modèle + &Fix &Réparer + &Close &Fermer + Fix model file Réparer un modèle + <html><head/><body><p>[pgmodeler-cli not found error]</p></body></html> <html><head/><body><p>[pgmodeler-cli not found error]</p></body></html> + pgmodeler-cli: - pgmodeler-cli: + pgmodeler-cli : + Browse for pgmodeler-cli tool Rechercher l'outil pgmodeler-cli + + + ... ... + The specified file is not the pgModeler command line tool (pgmodeler-cli). Ce fichier n'est pas l'outil en ligne de commande de pgModeler (pgmodeler-cli). + Input file: - Fichier source: + Fichier source : + Output file: - Fichier cible: + Fichier cible : + Fix tries: - Tentatives: - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Waiting process to start...</p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">En attente...</p></body></html> + Tentatives : + Select input file Sélectionner le modèle à réparer + Select output file Sélectionner un fichier de sortie + Load fixed model when finish Charger le modèle réparé une fois l'opération terminée + In some cases the fix process will fail to restore all objects within the model demanding manual fixes by changing the file on a text editor. <strong>NOTE:</strong> relationships may lost their graphical configuration like custom points and line color. - Dans certains cas, le processus de réparation peut échouer à restaurer et récupérer tous les objets du modèle, ce qui peut réclamer des modifications manuelles dans le fichier à partir d'un éditeur de texte. <strong>REMARQUE:</strong> les associations peuvent perdre leur configuration graphique tels que des points placés manuellement par l'utilisateur ou la couleur. + Dans certains cas, le processus de réparation peut échouer à restaurer et récupérer tous les objets du modèle, ce qui peut réclamer des modifications manuelles dans le fichier à partir d'un éditeur de texte. <strong>REMARQUE :</strong> les associations peuvent perdre leur configuration graphique tels que des points placés manuellement par l'utilisateur ou la couleur. + Waiting process to start... - En attente... + Processus en attente de lancement... + Could not locate <strong>%1</strong> tool on <strong>%2</strong>. The fix process can't continue! Please check pgModeler installation or try to manually specify the command below. - Impossible de localiser l'outil <strong>%1</strong> dans <strong>%2</strong>. Impossible de continuer ! Veuillez vérifier votre installation de pgModeler ou alors spécifiez l'emplacement de l'outil. + Impossible de localiser l'outil <strong>%1</strong> sur <strong>%2</strong>. Le processus de réparation ne peut continuer ! Vérifiez votre installation de pgModeler ou spécifiez manuellement la commande ci-dessous. + pgModeler command line tool (%1) Outil en ligne de commande de pgModeler (%1) + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Monospace'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Waiting process to start...</span></p></body></html> - + < !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http ://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">En attente du lancement du processus...</span></p></body></html> ModelNavigationWidget + Form Formulaire + Previous model Modèle précédent - Ctrl+Up - Ctrl+Haut + + Alt+C + + Next model Modèle suivant - Ctrl+Down - Ctrl+Bas - - + Close model Fermer + ... ... + (model not saved yet) - (modèle pas encore sauvegardé) + (modèle pas encore enregistré) + Ctrl+Left - Ctrl+Left + Ctrl+Gauche + Ctrl+Right - Ctrl+Right - - - Alt+C - + Ctrl+Droite ModelObjectsWidget + Model Objects Objets du modèle + Hide this widget Cacher ce widget + 1 1 + Object Objet + Type Type + Parent Object Objet parent + Parent Type Type parent - Visible Object Types - Afficher les objets des types suivants - - + Select All - Tout sélect. + Tout sélectionner + Clear All Tout effacer + Select Sélectionner + Return - Retour + Retour + Cancel Annuler + Esc - Échap. + Échap + Objects view configuration Filtres d'affichage des objets + Expands all items Développer tous les éléments + Collapses all items Replier tous les éléments + Filter: - Filtrer: + Filtrer : + + + + + + ... ... + Tree view Vue en arbre + List view Vue en liste + New Nouveau + ID - ID + Identifiant + By ID - + Par identifiant + + + + Visible object types + Types d'objets visibles + + + + Model objects + Objets de modèle ModelOverviewWidget + Model overview Vue générale du modèle + + + Failed to generate the overview image. +The requested size %1 x %2 was too big and there was not enough memory to allocate! + Impossible de générer l'aperçu de l'image. +La taille demandée%1 x%2 était trop grande et il n'y avait pas assez de mémoire à allouer ! + ModelRestorationForm + Model restoration Restauration de modèle + &Restore &Restaurer + &Cancel A&nnuler - Modified: %1 - Modifié: %1 - - + pgModeler was not closed properly in a previous execution and some models were still being edited. Click <strong>Restore</strong> to reopen the models or <strong>Cancel</strong> to abort the restoration. - + pgModeler n'a pas été fermé correctement lors d'une précédente exécution et certains modèles étaient encore en cours d'édition. Cliquez sur <strong>Restaurer</strong> pour rouvrir les modèles ou sur <strong>Annuler</strong> pour abandonner la restauration. + pgModeler will try to recover the selected models but will not destroy them in case of loading failure. This option serves as a last resort in order to try to recover the database model. Temporary models will last until the application is closed so the user must try to manually recover the files before exit pgModeler. - + pgModeler va essayer de récupérer les modèles sélectionnés mais ne les détruira pas en cas d'échec de chargement. Cette option sert de dernier recours pour essayer de récupérer le modèle de base de données. Les modèles temporaires resteront jusqu'à ce que l'application soit fermée. L'utilisateur doit donc essayer de récupérer manuellement les fichiers avant de quitter pgModeler. + Keep temporary models in case of restoration failure - + Conserver les modèles temporaires en cas d'échec de la restauration + Database - Base de données + Base de données + File - + Fichier + Modified - + Modifié + Size - + Taille ModelValidationHelper + There are pending errors! SQL validation will not be executed. - + Il y a des erreurs en attente ! La validation SQL ne sera pas exécutée. + Operation canceled by the user. - + Opération annulée par l'utilisateur. ModelValidationWidget + Form Formulaire + + 0 0 + Try to apply a fix on the selected validation info. Essayer d'appliquer le correctif sur l’élément sélectionné. + Clear validation results Effacer le résultat de la validation + Va&lidate Va&lider + Warnings: does not prevents model to be saved. - Avertissements: n'empêche de pouvoir sauvegarder le modèle. + Avertissements : n'empêche de pouvoir sauvegarder le modèle. + Errors: model will not be saved while there are validation errors. - Erreurs: le modèle ne peut être sauvegardé tant que des erreurs de validation subsistent. - - - Use unique temporary names for database, role and tablespace objects - Utiliser des noms uniques et temporaires pour la base, les rôles et les tablespaces + Erreurs : le modèle ne peut être sauvegardé tant que des erreurs de validation subsistent. + SQL Validation: - Validation SQL: - - - Connection alias - Alias de la connexion + Validation SQL : + PostgreSQL version Version de PostgreSQL - SQL validation, if enabled, will occur only on the last step or when there are no warnings. - Validation SQL, si activée, ne sera déclenchée qu'à la fin ou uniquement s'il n'y a pas d'avertissements. - - - Using temporary names will avoid object duplication errors when running the SQL validation. - Utiliser des noms temporaires évite les erreurs dues aux objets dupliqués lors de la validation SQL. - - + Try to resolve the reported issues. Essayer de résoudre les problèmes rencontrés. + Ctrl+S Ctrl+S + Clear Effacer + Options Options + Cancel the SQL validation in progress. Annuler le processus de validation SQL en cours. + Cancel Annuler + Esc Échap - Change the creation order for two objects by swapping their ids - Modifie l'ordre de création de deux objets en échangeant leurs numéros d'identification - - - Swap Ids - Echanger identifiants + + Apply fixes + - Enable validation of SQL code on DBMS (requires connection) - Activer la validation SQL sur le serveur (requiert une connexion) + + Change the creation order for two objects by swapping their ids + Modifie l'ordre de création de deux objets en échangeant leurs numéros d'identification - Apply Fix - Appliquer le correctif + + Swap ids + Échanger identifiants + Hide this widget Fermer ce widget + ... ... + The object <strong>%1</strong> <em>(%2)</em> [id: %3] is being referenced by <strong>%4</strong> object(s) before its creation. L'objet <strong>%1</strong> <em>(%2)</em> [id: %3] est référencé par <strong>%4</strong> objet(s) avant sa création. + Autodetect Auto détection + The object <strong>%1</strong> <em>(%2)</em> [id: %3]%4 is referencing columns created by <strong>%5</strong> relationship(s) but is created before them. - L'objet <strong>%1</strong> <em>(%2)</em> [id: %3]%4 a pour référence des colonnes créées par <strong>%5</strong> association(s) but is created before them. + L'objet <strong>%1</strong> <em>(%2)</em> [id : %3]%4 référence des colonnes créées par <strong>%5</strong> association(s) mais a été créé avant eux. + The object <strong>%1</strong> <em>(%2)</em> has a name that conflicts with <strong>%3</strong> object's name(s). - Le nom de l'objet <strong>%1</strong> <em>(%2)</em> entre en conflit avec l'objet<strong>%3</strong>. - - - Database model sucessfully validated. - Modèle de données validé avec succès. - - - Running SQL validation... - Validation SQL en cours... + Le nom de l'objet <strong>%1</strong> <em>(%2)</em> entre en conflit avec celui de l'objet<strong>%3</strong>. + Processing object: %1 - Traitement de l'objet: %1 + Traitement de l'objet : %1 + Conflicting object: <strong>%1</strong> <em>(%2)</em>. - Objet en conflit: <strong>%1</strong> <em>(%2)</em>. + Objet en conflit : <strong>%1</strong> <em>(%2)</em>. + Referrer object: <strong>%1</strong> <em>(%2)</em> [id: %3]. - Seconde lecture ? - Objet réferent: <strong>%1</strong> <em>(%2)</em> [id: %3]. + Objet réferent : <strong>%1</strong> <em>(%2)</em> [id: %3]. + SQL validation failed due to error(s) below. <strong>NOTE:</strong><em> These errors does not invalidates the model but may affect operations like <strong>export</strong> and <strong>diff</strong>.</em> - + La validation SQL a échoué en raison des erreurs ci-dessous. <strong>REMARQUE :</strong><em> Ces erreurs n'invalident pas le modèle mais peuvent affecter des opérations telles que <strong>l'export</strong> et <strong>la comparaison</strong>. </em> - <em>The above object was created by a relationship. Change the name pattern on it's generator relationship. Fix will not be applied!</em> + + The column <strong>%1</strong> on <strong>%2</strong> <em>(%3)</em> is referencing the geospatial data type <strong>%4</strong> but the <strong>postgis</strong> extension is not present in the model! - Relationship: <strong>%1</strong> [id: %2]. + + <strong>HINT:</strong> Create the extension in the model or let it be created by applying the needed fixes. + + <em>The above object was created by a relationship. Change the name pattern on it's generator relationship. Fix will not be applied!</em> + <em>L'objet ci-dessus a été créé par une relation. Changer le motif du nom sur sa relation de générateur. La correction ne sera pas appliquée !</Em> + + + + Relationship: <strong>%1</strong> [id: %2]. + Relation : <strong>%1</strong> [id : %2]. + + + Running SQL commands on server... - Execution des commandes SQL sur le serveur... + Exécution des commandes SQL sur le serveur... + Enables the validation of SQL code in DBMS. This process requires the use of a pre-configured connection. SQL validation will occur only in the last step (when all objects were validated) or when there are no warnings. - + Active la validation du code SQL dans la SGBD. Ce processus nécessite l'utilisation d'une connexion pré-configurée. La validation SQL ne se produira qu'à la dernière étape (lorsque tous les objets ont été validés) ou lorsqu'il n'y a pas d'avertissement. + Connection to be used in the SQL validation - + Connexion à utiliser dans la validation SQL + pgModeler will generate unique and temporary names for database, role and tablespace objects. This option avoids object duplication errors when running the SQL validation. - + pgModeler générera des noms uniques et temporaires pour les objets base de données, rôle et espace de stockage. Cette option évite les erreurs de duplication d'objet lors de l'exécution de la validation SQL. + Use unique temporary names for cluster level objects - + Utiliser des noms temporaires uniques pour les objets de niveau cluster + The relationship <strong>%1</strong> [id: %2] is in a permanent invalidation state and needs to be relocated. - + La relation <strong>%1</strong> [id : %2] est dans un état d'invalidation permanent et a besoin d'être déplacé. + <strong>HINT:</strong> try to swap the relationship by another ones that somehow are linked to it through generated columns or constraints to solve this issue. Note that other objects may be lost in the swap process. - + <strong>CONSEIL :</strong> essayer d'échanger la relation par une autre qui est liée à celle-ci via des colonnes générées ou des contraintes pour résoudre ce problème. Noter que d'autres objets peuvent être perdus dans le processus d'échange. + SQL validation not executed! No connection defined. - + La validation SQL n'est pas exécutée ! Aucune connexion définie. + Database model successfully validated. - + Modèle de base de données validé avec succès. ModelWidget + + Copy Copier - Generalization - Généralisation - - + Convert Convertir + New Nouveau + Quick - Act. rapides + Actions rapides + Source code Code source + Show object source code Afficher le code source de l'objet - Source - Source - - + + Properties Propriétés + Space Espace + Edit the object properties - Editer les propriétés de l'objet + Modifier les propriétés de l'objet + + Protect Vérrouiller + + Unprotect Déverrouiller + Protects object(s) from modifications - Empêcher l(es)'objet(s) d'être modifiés + Empêcher la modification du ou des objets + + Delete - Supprimer + Effacer + Shift+Del Shift+Suppr + Select all - Tout sélect. + Tout sélectionner + Selects all the graphical objects in the model Sélectionner tous les objets graphiques du modèle + Paste Coller + Cut Couper + Deps && Referrers - Dép. && Rèf. + Dépendances && Rèférences + Add a new object in the model Ajouter un nouvel objet dans le modèle + Rename Renommer + Quick rename the object Renommage rapide de l'objet + Move to schema Déplacer vers le schema + Edit permissions - Editer les permissions + Modifier les permissions + Change owner Changer le propriétaire + Select children - Sélectionnez les éléments - - - Highlight - Mettre en avant + Sélectionner les enfants + Del Suppr - Ctrl+A - Ctrl+A - - - F2 - F2 - - + Custom SQL - Code SQL Libre - - - Alt+Q - Alt+Q + Code SQL personnalisé + Loading database model Ouverture du modèle de base de données + Saving database model Enregistrement du modèle de base de données + Also copy all dependencies of selected objects? This minimizes the breakdown of references when copied objects are pasted into another model. - Copier également les dépendences des objets sélectionnés? Ceci minimise la perte des références lorsque les objets copiés sont collés dans un autre modèle. + Copier également les dépendences des objets sélectionnés ? Cela minimise la casse des références lorsque les objets copiés sont collés dans un autre modèle. + Pasting objects... Collage des objets... + Not all objects were pasted to the model due to errors returned during the process! Refer to error stack for more details! - Tous les objets n'ont pas été collés dans le modèle à cause d'erreurs retournés durant le processus! Se référer à la pile d'erreurs pour plus de détails! + Tous les objets n'ont pas été collés dans le modèle car des erreurs ont été retournées durant le processus ! Se référer à la pile d'erreurs pour plus de détails ! + Do you really want to delete the selected object? - Souhaitez vous réellement supprimer l'objet sélectionné? + Souhaitez-vous réellement effacer l'objet sélectionné ? + (no objects) (aucun objet) + + None + + + + Constraints Contraintes + One to One (1-1) - + Un à un (1-1) + One to Many (1-n) - + Un à plusieurs (1-n) + Many to Many (n-n) - + Plusieurs à plusieurs (n-n) + <strong>ATTENTION:</strong> The database model is protected! Operations that could modify it are disabled! - + <strong>ATTENTION :</strong> Le modèle de base de données est protégé ! Les opérations qui pourraient le modifier sont désactivées ! + + + + Edit data + Modifier données + + + + Source + + Alt+S - + + + Del. cascade Supprimer en cascade + Ctrl+C - Ctrl+C + + Ctrl+V - Ctrl+V + + Ctrl+X - Ctrl+X + + Quick action for the selected object - Actions rapides sur l'objet sélectionné + Action rapide pour l'objet sélectionné + + + + F2 + + Set tag - Affecter un tag + Affecter une balise + Ctrl+E - Ctrl+E + + + + + Select tagged + Séléction balisée + + + + Select + Sélectionner + Open relationship - + Ouvrir les relations + + Alt+Q + + + + Convert to sequence - + Convertir en séquence + Convert to serial - + Convertir en série + Break line - + Ligne d'interruption + Remove points - + Supprimer des points + Enable SQL - + Activer le code SQL + Disable SQL - + Désactiver le code SQL + + + + Duplicate + Dupliquer + + + + Ctrl+D + + + + + Extended attributes + Attributs étendus + + + + + Show + Afficher + + + + + Hide + Masquer + + + + Jump to table + Sauter à la table + + + + Schemas rectangles + Rectangles de schémas + + + + Fade in/out + Effets de fondu + + + Fade in + Accentuer + + + + + Fade out + Estomper + + + + + + Relationships + Associations + + + + Swap ids + Échanger identifiants + + + + Edit the objects creation order by swapping their ids + Modifier l'ordre de création des objets en échangeant leurs identifiants + + + 90° (vertical) - + + 90° (horizontal) - + + 90° + 90° (vertical) - + + 90° + 90° (horizontal) - + + + + + + + All objects + Tous les objets + + + + + Schemas + Schémas + + + Views + Vues + + + + + Textboxes + Boites de textes + + + + + Tables + + + + + Ctrl+A + + + + Zoom: %1% - + Zoom : %1% + Do you really want to convert the relationship into an intermediate table? - + Voulez-vous vraiment convertir les relations en une table intermédiaire ? + Validating object: `%1' (%2) - + Validation de l'objet : `%1' (%2) + Generating XML for: `%1' (%2) - + Génération du code XML pour : `%1' (%2) + Pasting object: `%1' (%2) - + Collage de l'objet : `%1' (%2) + <strong>CAUTION:</strong> You are about to delete objects in cascade mode which means more objects than the selected will be dropped too. Do you really want to proceed? - + <strong>ATTENTION :</strong> Vous êtes sur le point de supprimer des objets en mode cascade, ce qui signifie que des objets non sélectionnés seront également supprimés. Voulez-vous vraiment poursuivre ? + <strong>CAUTION:</strong> Remove multiple objects at once can cause irreversible invalidations to other objects in the model causing such invalid objects to be deleted too. Do you really want to proceed? - + <strong>ATTENTION :</strong> Supprimer plusieurs objets à la fois peut entraîner des invalidations irréversibles sur d'autres objets du modèle, entraînant également la suppression de ces objets invalides. Voulez-vous vraiment poursuivre ? + <strong>CAUTION:</strong> Remove a relationship can cause irreversible invalidations to other objects in the model causing such invalid objects to be deleted too. Do you really want to proceed? - + <strong>ATTENTION :</strong> Supprimer une relation peut entraîner des invalidations irréversibles d'autres objets dans le modèle, entraînant également la suppression de ces objets invalides. Voulez-vous vraiment poursuivre ? + The cascade deletion found some problems when running! Some objects could not be deleted or registered in the operation's history! Please, refer to error stack for more details. - + La suppression en cascade a rencontré des problèmes lors de son exécution ! Certains objets n'ont pas pu être supprimés ou enregistrés dans l'historique des opérations ! Veuillez vous reporter à la pile d'erreurs pour plus de détails. + Inheritance - + Héritage + Do you want to %1 the selected schema's children too? - + Voulez-vous %1 les enfants du schèma séléctionné aussi ? + protect - + protéger + unprotect - + déprotéger ModelsDiffHelper + Processing object `%1' (%2)... - + Traitement de l'objet `%1' (%2)... + Skipping object `%1' (%2)... - + Omission de l'objet `%1' (%2)... + Processing diff infos... - + Comparaison des informations... + Processing `%1' info for object `%2' (%3)... - + Traitement de l'info `%1' pour l'objet `%2' (%3)... + No differences between the model and database. - + Aucune différence entre le modèle et la base de données. + Preparing diff code... - + Préparation du code de comparaison... NewObjectOverlayWidget + Form - Formulaire + Formulaire + Role Rôle + Tag Tag + Cast - Convertion de type + Conversion de type + Language Langage + Textbox Zone de texte + Event Trigger - Déclencheur sur évènement + Déclencheur sur évènement + Tablespace - Tablespace + Espace de stockage + Schema Schéma + Domain - Domaine + Domaine + Conversion - Convertion + Conversion - Aggregate - Fonction d'agrégat + + Extension + - Collation - Collation + + Type + - Table - Table + + Aggregate + Agrégat - Type - Type + + Collation + + Sequence - Séquence + Séquence - Extension - Extension + + Table + + Function - Fonction + Fonction + View Vue + + Permissions - Permissions + - Rule - Règle + + Index + - Index - Index + + Rule + Règle + Column - Colonne + Colonne + Constraint - Contrainte + Contrainte + Trigger - Déclencheur + Déclencheur + Copy - Copie + Copie - M - M + + + A + - 9 - 9 + + G + - Z - Z + + K + - 1 - 1 + + H + - 2 - 2 + + J + - 3 - 3 + + D + - 5 - 5 + + E + - 4 - 4 + + F + - 0 - 0 + + L + - A - + + O + - Op. Family - + + U + - Op. Class - + + I + - Operator - + + R + - Many-to-many - + + S + - One-to-many - + + Q + - One-to-one - + + T + - Inheritance - + + P + - G - + + M + - K - + + Y + - H - + + W + - J - + + + 9 + - D - + + Z + - E - + + X + - F - + + C + - L - + + V + - O - + + B + + + + + 8 + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 5 + + + + + 4 + + + + + 0 + + + + + Op. Family + Famille d'op. - U - + + Op. Class + Classe d'op. - I - + + Operator + Opérateur - R - + + Many-to-many + Plusieurs-à-plusieurs - S - + + One-to-many + Un-à-plusieurs - Q - + + One-to-one + Un-à-un - T - + + Inheritance + Héritage - P - + + Generic SQL + SQL générique - Y - + + Policy + Politique + + + NumberedTextEditor - W - + + Load + Charger - X - + + Load the object's source code from an external file + Charger le code source de l'objet depuis un fichier externe - C - + + Edit + Modifier - V - + + Edit the source code in the preferred external editor + Modifier le code source avec son éditeur préféré - B - + + Clear + Nettoyer - - - NumberedTextEditor + Upper case - + Majuscule + Lower case - + Minuscule + Ident right - + Ident droit + Ident left - + Ident gauche + + + + SQL file (*.sql);;All files (*.*) + Fichier SQL (*.sql);;Tous les fichiers (*.*) + + + + Load file + Charger un fichier + + + + The source editor `%1' is running on `pid: %2'. + L'éditeur de source `%1' s'exécute sur pid : `%2'. + + + + Could not start the source code editor application `%1'! Make to sure that the source editor path defined in the general settings points to a valid executable and the current user has permission to run the application. Error message returned: `%2' + Impossible de démarrer l'application de l'éditeur de code source `%1' ! Assurez-vous que le chemin de l'éditeur source défini dans les paramètres généraux pointe vers un exécutable valide et que l'utilisateur actuel a l'autorisation d'exécuter l'application. Message d'erreur renvoyé : `%2' ObjectDepsRefsWidget - Form - Formulaire - - + Dependencies Dépendances + + Object Objet + + Type Type + + Parent Object Objet parent + + Parent Type Type parent + References Références + + ID - Intuitif ID + Exclude indirect dependencies Exclure les dépendances indirectes + Include indirect references Inclure les références indirectes + This object does not exists anymore. The dependencies and references listing are disabled. Cet objet n'existe plus. L'affichage de ses dépendances et références est désactivé. + Object's dependencies & references Dépendances et références d'un objet @@ -7769,117 +9733,169 @@ p, li { white-space: pre-wrap; } ObjectFinderWidget + Form Formulaire + Pattern: - Motif: + Motif : + Hide this widget Cacher ce widget + + ... ... - Highlight - Mettre en avant - - + Find Chercher + Clears the search results - Éffacer les résultats + Effacer les résultats + Clear Effacer + + (Un)selects the graphical objects in the results grid + + + + Regular Expression Expression régulières + Exact Match Correspondance exacte + Select All - Tout sélect. + Tout sélectionner + Clear All Tout effacer + Case Sensitive Sensible à la casse + Object Objet + Type Type + Parent Object Objet parent + Parent Type Type parent + + Fades outs all the graphical objects in the results grid (or those not listed). The current fade in/out state of all objects is modified. + + + + Defines the search filter Défini le filtre de recherche + Filter Filtrer + + + Listed + + + + + + Not listed + + + + Found <strong>%1</strong> object(s). <strong>%1</strong> objet(s) trouvé(s). + No objects found. Aucun objet trouvé. - Highlight graphical objects when selecting them or their children on the result list - + + ID + Identifiant - ID - ID + + Select + Sélectionner + + + + Fade out + Estomper ObjectRenameWidget + Form Formulaire + .... .... + to: - en: + en : + + Rename Renommer + Cancel Annuler @@ -7887,279 +9903,338 @@ p, li { white-space: pre-wrap; } ObjectSelectorWidget + Form Formulaire + Clear field - Effeacer le champs + Effacer le champ + Select Object Sélectionner un objet + Select %1 - + Sélectionner %1 - ObjectTableWidget + ObjectsTableWidget + Form Formulaire + Add Item Ajouter un élément + Ins - Ins + Insérer + Remove Item Supprimer un élément + Del - Suppr. + Suppr + Update Item - Actualiser les éléments + Actualiser l'élément + Alt+R - Alt+R + + Remove All Tout supprimer + Shift+Del - Shift+Del + Maj+Suppr. + + Duplicate item + Dupliquer l'élément + + + + Ctrl+D + + + + Edit Item - Editer l'élément + Modifier l'élément + Space - Space + Espace + Move Up Déplacer vers le haut + Ctrl+Up Ctrl+Haut + Move Down Déplacer vers le bas + Ctrl+Down Ctrl+Bas + Move to start Déplacer au début + Ctrl+Home Ctrl+début + Move to end Déplacer à la fin + Ctrl+End, Ctrl+S Ctrl+Fin, Ctrl+S - Confirmação - Confirmation - - + Do you really want to remove the selected item? - Souhaitez vous réellement supprimer l'élément sélectionné? + Souhaitez-vous réellement supprimer l'élément sélectionné ? - Do you really want to remove the all items? - Souhaitez vous réellement supprimer tous les éléments? + + + Confirmation + - Confirmation - Confirmation + + Do you really want to remove all the items? + Souhaitez-vous réellement supprimer tous les éléments ? OperationList + (invalid object) - + (objet invalide) OperationListWidget + + Executed Operations Opérations exécutées + Hide this widget Cacher ce widget + ... ... + 1 1 + Operations: - Opérations: + Opérations : + + 0 0 + Position: - Position: + Position : + Delete operation history Supprimer l'historique des opérations + Undo Annuler + Redo Rétablir + Object: %1 - Objet: %1 + Objet : %1 + Name: %1 - Nom: %1 + Nom : %1 + created créé + removed supprimé + modified modifié + moved déplacé + Operation: %1 - Opération: %1 - - - Undoing operations... - Annulation des opérations... - - - Redoing operations... - Rétablissement des opérations... + Opération : %1 + Operation history exclusion - ?? À controler dans le contexte ?? Exclure l'historique des opérations + Delete the executed operations history is an irreversible action, do you want to continue? - Supprimer l'historique des opérations exécutées est une action irréversible, souhaitez vous continuer? + Effacer l'historique des opérations exécutées est une action irréversible, souhaitez-vous continuer ? OperatorClassWidget - Form - Formulaire - - + Default Class: - Classe par défaut: + Classe par défaut : + Indexing: - Indexation: + Indexation : + Elements - Élements + Éléments + Element Type: - Type d'élement: + Type d'élément : + Operator - Operateur + Opérateur + Function Fonction + Storage Stockage + Function: - Fonction: + Fonction : + Operator: - Opérateur: + Opérateur : + Support/Strategy: - Support/Stratégie: + Support/Stratégie : + + Op. Family: - Famille d'opérateurs: + Famille d'opérateurs : + Storage Type Type de Stockage + Object Objet + Type - Type + + Support/Strategy Support/Stratégie + Operator Family Famille d'opérateurs @@ -8167,96 +10242,103 @@ p, li { white-space: pre-wrap; } OperatorFamilyWidget - Form - Formulaire - - + Indexing: - Indexation: + Indexation : OperatorWidget - Form - Formulaire - - + Options: - Options: + Options : + MERGES MERGES + HASHES HASHES + Arguments Arguments + Advanced Avancé + Restrict: - Restriction: + Restriction : + Commutator: - Commutateur: + Commutateur : + Negator: - Négateur: + Négateur : + Operator Func.: - Fonction de l'opérateur: + Fonction de l'opérateur : + Join: - Jointure: + Jointure : + Right Argument Type - Type argument à droite + Type argument droit + Left Argument Type - Type d'argument à gauche + Type d'argument gauche + To create a unary operator it is necessary to specify as <strong><em>'any'</em></strong> one of its arguments. Additionally, the function that defines the operator must have only one parameter and this, in turn, must have the same data type of the the argument of unary operator. - Pour créer un opérateur unaire il est nécessaire de spécifier <strong><em>'any'</em></strong> comme l'un de ses arguments. De plus, la fonction qui définit l'opérateur doit avoir seulement un paramètre et celui-ci doit avoir le même type de donnée que l'argument de l'opérateur unaire. + Pour créer un opérateur unitaire, il est nécessaire de spécifier <strong><em>'any'</em></strong> comme l'un de ses arguments. De plus, la fonction qui définit l'opérateur doit avoir seulement un paramètre et celui-ci doit avoir le même type de donnée que l'argument de l'opérateur unitaire. ParameterWidget - Form - Formulaire - - + Default Value: - Valeur par défaut: + Valeur par défaut : + Mode: - Mode: + Mode : + IN IN + OUT OUT + VARIADIC VARIADIC @@ -8264,528 +10346,912 @@ p, li { white-space: pre-wrap; } PermissionWidget - Form - Formulaire - - + + Roles Rôles + ID: - Identifiant: + Identifiant : + + Permissions Permissions + Add Permission Ajouter permission + Update Permission Actualiser permission + Cancel Operation Annuler l'opération + + Privileges Privilèges + Disable SQL code Désactiver le code SQL - Grant - Grant + + Cascade + Cascade + + + + Privilege + Privilège + + + + GRANT OPTION + GRANT OPTION + + + + Code Preview + Prévisualisation du code + + + + Name + Nom + + + + Id + + + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + Laissez la grille <em><strong>Rôles</strong></em> vide afin de créer un %1 applicable à <strong><em>PUBLIC</em></strong>. + + + + -- No permissions defined for the specified object! + -- Aucune permission définie pour cet objet ! + + + + /* Could not generate the SQL code preview for permissions! + /* Impossible de générer la prévisualisation du code SQL pour les permissions ! + + + + Edit permissions + Modifier les permissions + + + + &Grant + Acco&rder + + + + Re&voke + Ré&voquer + + + + PgModelerCLI + + + Unrecognized option '%1'. + Option '%1' non reconnue. + + + + Value not specified for option '%1'. + Valeur pour l'option '%1' manquante. + + + + Option '%1' does not accept values. + L'option '%1' n'accepte pas de valeur. + + + + Usage: pgmodeler-cli [OPTIONS] + Utilisation : pgmodeler-cli [OPTIONS] + + + + + command line interface. + interface en ligne de commande. + + + + General options: + Options générales : + + + + DBMS export options: + Options d'export directe dans un serveur : + + + + Input file must be different from output! + Le fichier source doit être différent du fichier de sortie ! + + + + Incomplete connection information! + Les informations de connexion sont incomplètes ! + + + + Starting model export... + Début de l'export du modèle... + + + + Miscellaneous options: + Options diverses : + + + + There are no connections configured. + Il n'y a aucune connexion configurée. + + + + Invalid zoom specified! + Zoom spécifié invalide ! + + + + Invalid action specified to update mime option! + Action spécifiée invalide pour mettre à jour l'option mime ! + + + + Starting model fixing... + Lancement de la fixation du modèle... + + + + Starting mime update... + Lancement de la mise à jour du mime... + + + + Model successfully fixed! + Modèle fixé avec succès ! + + + + Extracting objects' XML... + Extraction des objets XML... + + + + Connection aliased as '%1' was not found in the configuration file. + + + + + PostgreSQL Database Modeler Project - pgmodeler.io + + + + + Copyright 2006-2018 Raphael A. Silva <raphael@pgmodeler.io> + + + + + This CLI tool provides several operations over models and databases without the need to perform them +in pgModeler's graphical interface. All available options are described below. + + + + + %1, %2 [FILE] Input model file (.dbm). This is mandatory for fix, export operations. + + + + + %1, %2 [DBNAME] Input database name. This is mandatory for import operation. + + + + + %1, %2 [FILE] Output file. This is mandatory for fixing model or exporting to file, png or svg. + + + + + %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + + + + + %1, %2 [NUMBER] Model fix tries. When reaching the maximum count the invalid objects will be discarded. + + + + + %1, %2 Export the input model to a sql script file. + + + + + %1, %2 Export the input model to a png image. + - Revoke - Revoke + + %1, %2 Export the input model to a svg file. + - Cascade - Cascade + + %1, %2 Export the input model directly to a PostgreSQL server. + - Privilege - Privilège + + %1, %2 Import a database to an output file. + - GRANT OPTION - GRANT OPTION + + %1, %2 Compares a model and a database or two databases generating the SQL script to synch the latter in relation to the first. + - Code Preview - Prévisualisation du code + + %1, %2 Force the PostgreSQL version of generated SQL code. + - Type: - Type: + + %1, %2 Silent execution. Only critical messages and errors are shown during process. + - Role - Rôle + + %1, %2 Show this help menu. + - Id - Identifiant + + Connection options: + - Leave the <em><strong>Roles</strong></em> empty to create a permission applicable to <strong><em>PUBLIC</em></strong>. - Laissez le champ <em><strong>Rôles</strong></em> vide pour créer une permission applicable à <strong><em>PUBLIC</em></strong>. + + %1, %2 List available connections in file %3. + - -- No permissions defined for the specified object! - -- Aucune permission définie pour cet objet! + + %1, %2 [ALIAS] Connection configuration alias to be used. + - /* Could not generate the SQL code preview for permissions! - /* Impossible de générer la prévisualisation du code SQL pour les permissions! + + %1, %2 [HOST] PostgreSQL host in which a task will operate. + - Edit permissions - Editer les permissions + + %1, %2 [PORT] PostgreSQL host listening port. + - &Grant + + %1, %2 [USER] PostgreSQL username. - Re&voke + + %1, %2 [PASSWORD] PostgreSQL user password. - - - PgModelerCLI - Unrecognized option '%1'. - Option '%1' non reconnue. + + %1, %2 [DBNAME] Connection's initial database. + - Value not specified for option '%1'. - Valeur pour l'option '%1' manquante. + + %1, %2 Draws the grid in the exported image. + - Option '%1' does not accept values. - L'option '%1' n'accepte pas de valeur. + + %1, %2 Draws the page delimiters in the exported image. + - Connection aliased as '%1' was not found on configuration file. - La connexion nommé '%1' n'existe pas dans le fichier de configuration. + + %1, %2 Each page will be exported in a separated png image. (Only for PNG images) + - Usage: pgmodeler-cli [OPTIONS] - Utilisation: pgmodeler-cli [OPTIONS] + + %1, %2 [FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG images) + - command line interface. - interface en ligne de commande + + %1, %2 Ignores errors related to duplicated objects that eventually exist in the server. + - PostgreSQL Database Modeler Project - pgmodeler.com.br - PostgreSQL Database Modeler Project - pgmodeler.com.br + + %1, %2 [CODES] Ignores additional errors by their codes. A comma-separated list of alphanumeric codes should be provided. + %1, %2=[CODES] Ignore les erreurs supplémentaires par leurs codes. Une liste de codes alphanumériques séparés par des virgules doit être fournie. {1,?} {2 ?} - General options: - Options générales: + + %1, %2 Drop the database before execute a export process. + - %1, %2 Export to a sql script file. - %1, %2 Export vers un fichier SQL. + + %1, %2 Runs the DROP commands attached to SQL-enabled objects. + - %1, %2 Export to a png image. - %1, %2 Export en image PNG. + + %1, %2 Simulates an export process by executing all steps but undoing any modification in the end. + - %1, %2 Export directly to a PostgreSQL server. - %1, %2 Exporter directement dans un serveur PostgreSQL. + + %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + - %1, %2 List available connections on %3 file. - %1, %2 Lister les connexions disponnibles dans le fichier %3. + + Database import options: + - %1, %2 Version of generated SQL code. Only for file or dbms export. - %1, %2 Version de PostgreSQL pour laquelle doit être généré l'export. Uniquement pour les exports fichier SQL et en direct dans le serveur. + + %1, %2 Ignore all errors and try to create as many as possible objects. + - %1, %2 Silent execution. Only critical errors are shown during process. - %1, %2 Exécution silencieuse. Seuls les avertissements et erreurs seront affichés pendant le traitement. + + %1, %2 Import system built-in objects. This option causes the model bloating due to the importing of unneeded objects. + - %1, %2 Show this help menu. - %1, %2 Affiche ce menu. + + %1, %2 Import extension objects. This option causes the model bloating due to the importing of unneeded objects. + - PNG export options: - Option d'export PNG: + + %1, %2 Run import in debug mode printing all queries executed in the server. + - %1, %2 Draws the grid on the exported png image. - %1, %2 Dessiner la grille. + + Diff options: + - %1, %2 Draws the page delimiters on the exported png image. - %1, %2 Dessiner les limites de pages. + + %1, %2 [DBNAME] The database used in the comparison. All the SQL code generated is applied to it. + - DBMS export options: - Option d'exportation directe dans un serveur: + + %1, %2 Save the generated diff code to output file. + - %1, %2 Ignores errors related to duplicated objects that eventually exists on server side. - %1, %2 Ignorer les erreurs relatives à d'éventuels objets dupliqués déjà existant sur le serveur. + + %1, %2 Apply the generated diff code on the database server. + - %1, %2=[ALIAS] Connection configuration alias to be used. - %1, %2=[ALIAS] Alias de connexion à utiliser. + + %1, %2 Don't preview the generated diff code when applying it to the server. + - %1, %2=[HOST] PostgreSQL host which export will operate. - %1, %2=[HOST] Hôte du serveur PostgreSQL. + + %1, %2 Drop cluster level objects like roles and tablespaces. + - %1, %2=[PORT] PostgreSQL host listening port. - %1, %2=[PORT] Port du serveur PostgreSQL. + + %1, %2 Revoke permissions already set on the database. New permissions configured in the input model are still applied. + - %1, %2=[USER] PosrgreSQL username. - %1, %2=[USER] Nom d'utilisateur. + + %1, %2 Drop missing objects. Generates DROP commands for objects that are present in the input model but not in the compared database. + - %1, %2=[PASSWORD] PosrgreSQL user password. - %1, %2=[PASSWORD] Mot de passe. + + %1, %2 Force the drop of missing columns and constraints. Causes only columns and constraints to be dropped, other missing objects aren't removed. + - %1, %2=[DBNAME] Connection's initial database. - %1, %2=[DBNAME] Base de données initiale de connexion. + + %1, %2 Rename the destination database when the names of the involved databases are different. + - Available connections (alias : conn. string) - Connexions disponibles (alias : chaîne de conn.) + + %1, %2 Don't drop or truncate objects in cascade mode. + - No export mode specified! - Pas de mode d'export spécifié! + + %1, %2 Truncate tables prior to alter columns. Avoids errors related to type casting when the new type of a column isn't compatible to the old one. + - Multiple export mode especified! - Multiples mode d'exportation spécifiés! + + %1, %2 Don't reuse sequences on serial columns. Drop the old sequence assigned to a serial column and creates a new one. + - No input file specified! - Pas de fichier source! + + %1, %2 Don't force the recreation of objects. Avoids the usage of a DROP and CREATE commands to create a new version of the objects. + - No output file specified! - Pas de fichier de sortie! + + %1, %2 Don't recreate the unmodifiable objects. These objects are the ones which can't be changed via ALTER command. + - Input file must be different from output! - Le fichier source doit être différent du fichier de sortie! + + %1, %2 [ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + - Incomplete connection information! - Les information de connexion sont incomplètes! + + ** The diff process allows the usage of the following options related to import and export operations: + - Starting model export... - Début de l'export du modèle... + + * Export: + - Loading input file: - Chargement du fichier source: + + * Import: + - Export to PNG image: - Export en image PNG: + + ** When running the diff using two databases (%1 and %2) there's the need to specify two connections/aliases. + - Export to SQL script file: - Export en fichier SQL: + + If only one connection is set it will be used to import the input database as well to retrieve database used in the comparison. + - Export to DBMS: - Export directement en base: + + A second connection can be specified by appending a 1 on any connection configuration parameter listed above. + - Export successfully ended! - Export complété avec succès! + + Available connections (alias : connection string) + - Copyright 2006-2015 Raphael A. Silva <raphael@pgmodeler.com.br> - + + No operation mode was specified! + - This CLI tool provides the operations to export pgModeler's database models without -the need to load them on graphical interface as well to fix model files to the most recent -accepted structure. All available options are described below. - Cet outil en ligne de commande permet d'exporter des modèles de base pgModeler sans avoir besoin de les ouvrir via l'interface graphique. Il permet aussi de réparer des fichiers de modèle vers un format de structure le plus récent. Toutes les options disponibles sont décrites ci-dessous. + + Export, fix model, import database, diff and update mime operations can't be used at the same time! + - %1, %2=[FILE] Input model file (.dbm). Mandatory use when fixing a model or exporting it. + + Multiple export mode was specified! - %1, %2=[FILE] Output file. Mandatory use when fixing model or export to file or png. + + No input file was specified! - %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + + No input database was specified! - %1, %2 Model fix tries. When reaching the maximum count the invalid objects will be discard. + + No output file was specified! - %1, %2 Drop the database before execute a export process. + + No input file or database was specified! - %1, %2 Runs the DROP commands attached to SQL-enabled objects. + + The input file and database can't be used at the same time! - %1, %2 Simulates a export process. Actually executes all steps but undoing any modification. + + No database to be compared was specified! - %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + + No diff action (save or apply) was specified! - Miscellaneous options: + + No output file for the diff code was specified! - %1, %2=[ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + + ** Error code `%1' found and ignored. Proceeding with export. - There are no connections configured. + + ** Command: %1 - Export, fix model and update mime operations can't be used at the same time! + + Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! + Fichier d'entrée invalide ! Il semble que ce ne soit pas un modèle généré par pgModeler ou que le fichier soit corrompu ! + + + + Recreating objects... + Recréation des objets... + + + + +** Object(s) that couldn't fixed: + +** Ces objets ne peuvent être corrigés : + + + + WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) + AVERTISSEMENT : Certains objets ne peuvent peut-être pas être corrigés. Nouvel essai... (%1/%2) + + + + + Loading input file: %1 - Invalid zoom specified! + + Fixed model file: %1 - Invalid action specified to update mime option! + + Export to PNG image: %1 - Starting model fixing... + + Export to SVG file: %1 - Starting mime update... + + Export to SQL script file: %1 - Fixed model file: + + Export to DBMS: %1 - Model successfully fixed! + + Export successfully ended! + - Extracting objects' XML... + + Starting database import... - Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! + + + Input database: %1 - Recreating objects... + + Saving the imported database to file... - -** Object(s) that couldn't fixed: + + Import successfully ended! + - WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) + + Starting diff process... - Database model files (.dbm) are already associated to pgModeler! + + Input model: %1 - There is no file association related to pgModeler and .dbm files! + + Compare to: %1 - Mime database operation: %1 + + Loading input model... - Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. + + + Importing the database `%1'... - Running update-mime-database command... + + Comparing the generated models... - This CLI tool provides the operations to export pgModeler's database models without - the need to load them on graphical interface as well to fix model files to the most recent - accepted structure. All available options are described below. + + No differences were detected. - %1, %2 Export to a svg file. + + Saving diff to file `%1' - PNG and SVG export options: + + ** WARNING: You are about to apply the generated diff code to the server. Data can be lost in the process! - %1, %2 Each page will be exported on a separated png image. (Only for PNG) + + ** Proceed with the diff applying? (yes/no) > - %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG) + + yes - %1, %2=[USER] PostgreSQL username. + + + no - %1, %2=[PASSWORD] PostgreSQL user password. + + Diff code not applied to the server. - Multiple export mode specified! + + Applying diff to the database `%1'... - Mime database successfully updated. + + Diff successfully ended! + - Export to SVG file: + + Mime database successfully updated! + + + + Database model files (.dbm) are already associated to pgModeler! + Les fichiers de modèle de bases de données (.dbm) sont déjà associés à pgModeler ! + + + + There is no file association related to pgModeler and .dbm files! + Il n'y a pas d'association entre pgModeler et .les fichiers dbm ! + + + + Mime database operation: %1 + Opération de base de données mime : %1 + + + + Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. + Impossible d'effacer le fichier %1 ! Vérifiez si l'utilisateur actuel dispose des autorisations pour le supprimer et si le fichier existe. + + + + Running update-mime-database command... + Exécution de la commande update-mime-database... + + + + PNG and SVG export options: + Options d'export en PNG et SVG : + PgModelerPlugin + Plugin Information - Information de l'extension + Information d'extension + Version: %1 - Version: %1 + Version : %1 + Author: %1 - Auteur: %1 + Auteur : %1 PgModelerUiNS + Do you want to apply the <strong>SQL %1 status</strong> to the object's references too? This will avoid problems when exporting or validating the model. - Souhaitez-vous appliquer <strong>SQL %1 status</strong> aux références de l'objet également ? Cela permet d'éviter des porlbèmes lors de l'exportation ou la validation du modèle. + Souhaitez-vous appliquer <strong>statut SQL %1 </strong> aux références de l'objet également ? Cela permet d'éviter des problèmes lors de l'export ou de la validation du modèle. + disabling - + désactivation + enabling - + activation PgSQLTypeWidget + Form Formulaire + Data Type Type de donnée + SRID: - SRID: + SRID : + Variation: - Variation: + Variation : + Z Z + M M + + Precision Précision + Spatial: - Spatial: + Spatial : + + Dimension Dimension + Format: - Format: + Format : + Timezone: - Fuseau horaire: + Fuseau horaire : + Type: - Type: + Type : + P: - P: + P : + + Length - Taille ? Longueur + L: - L: + L : + Interval: - Intervalle: + Intervalle : + [ ]: - [ ]: + [ ] : + NONE AUCUN @@ -8793,667 +11259,888 @@ accepted structure. All available options are described below. PluginsConfigWidget + Form Formulaire + Plug-ins root directory: - Répertoire racine des extentions: + Répertoire racine des extensions : + Open in file manager - Ouvrir dans le getionnaire de fichier + Ouvrir dans le gestionnaire de fichier + Loaded plug-ins Extensions chargées + Plugin Extension + Version - Version + + Library Bibliothèque + + PolicyWidget + + + Basics + Notions de base + + + + Command: + Commande : + + + + Permissive + Permissif + + + + Roles + Rôles + + + + Expressions + + + + + USING: + UTILISANT : + + + + CHECK: + VÉRIFIER : + + + + Name + Nom + + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + Laissez la grille <em><strong>Rôles</strong></em> vide afin de créer un %1 applicable à <strong><em>PUBLIC</em></strong>. + + QObject + new_database - nouvelle_base + nouvelle_base_de_données + + + + %1 (line: %2) - %1 (ligne: %2) + %1 (ligne : %2) Relationship + %1_has_one_%2 - Traduction approprié ? - %1_has_one_%2 + Faut-il le traduire ? + + %1_has_many_%2 - Traduction approprié ? - %1_has_many_%2 + Faut-il le traduire ? + + many_%1_has_many_%2 - Traduction approprié ? - many_%1_has_many_%2 + Faut-il le traduire ? + + %1_inherits_%2 - Traduction approprié ? - %1_inherits_%2 + Faut-il le traduire ? + + %1_copies_%2 - Traduction approprié ? - %1_copies_%2 + Faut-il le traduire ? + RelationshipConfigWidget + Form Formulaire + Connect FK to PK columns - Relier les associations avec chacune des colonnes des clés étrangères/primaires concernées + Relier les colonnes associant clés étrangères/clés primaires + Connect tables' center points Relier les associations aux tables en un point central + Foreign key settings Clés étrangères + Deferral: - Report: + Report : + Deferrable: - Différable: + Reportable : + ON DELETE: - ON DELETE: + ON DELETE : + ON UPDATE: - ON UPDATE: + ON UPDATE : + Name patterns Règles de nommage + Relationship type: - Type d'association: + Type d'association : + Foreign Key (Target): - Clé étrangère (Cible): + Clé étrangère (Cible) : + Unique Key Name: - Nom contrainte unique: + Nom contrainte unique : + Primary Key Name: - Nom contrainte clé primaire: + Nom contrainte clé primaire : + Primary Key Column: - Nom colonne clé primaire: + Nom colonne clé primaire : + Column (Target): - Colonne (Cible): + Colonne (Cible) : + Foreign Key (Source): - Clé étrangère (Source): + Clé étrangère (Source) : + Column (Source): - Colonne (Source): + Colonne (Source) : + One to one (1:1) - Un à un (1:1) + Un à un (1 :1) + Connection Mode Affichage + FK Settings && Patterns - Clès étrangères && nommage + Clés étrangères && nommage + One to many (1:n) - Un à plusieurs (1:n) + Un à plusieurs (1 :n) + Many to many (n:n) - Plusieurs à plusieurs (n:n) + Plusieurs à plusieurs (n :n) + Generalization Généralisation + Copy Copie + Default Défaut - This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. - Ce mode d'affichage est disponible uniquement pour les associations de type <strong>un à un</strong>, <strong>un à plusieurs</strong> et <strong>les associations à clé étrangère</strong>. Il permet une meilleure sémantique pour relier les tables en traçant les lignes sur chacunes des colonnes concernées par l'assocation. - - - This mode is the classical one. It connects the relationship to tables through their central points. - Ceci est le mode classique. L'association est reliée aux tables en un seul trait central. - - + Pattern for foreign key generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). - Motif pour les noms de clés étrangères générées qui sont basées sur la clé primaire d'une table référencée (1:1 et 1:n) ou sur la clé primaire de la table source (n:n). + Motif pour les noms de clés étrangères générées qui sont basées sur la clé primaire d'une table référencée (1 :1 et 1 :n) ou sur la clé primaire de la table source (n :n). + Pattern for columns generated based upon target table's pk (n-n). - Motif pour les noms de colonnes générées qui sont basées sur la clé primaire de la table cible (n:n). + Motif pour les noms de colonnes générées qui sont basées sur la clé primaire de la table cible (n :n). + Pattern for columns generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). - Motif pour les noms de colonnes générées qui sont basées sur la clé primaire d'une table référencée (1:1 et 1:n) ou sur la clé primaire de la table source (n:n). + Motif pour les noms de colonnes générées qui sont basées sur la clé primaire d'une table référencée (1 :1 et 1 :n) ou sur la clé primaire de la table source (n :n). + Pattern for foreign key generated based upon target table's pk (n-n). - Motif pour les noms de clés étrangères générées qui sont basées sur une clé primaire de la table cible (n:n). + Motif pour les noms de clés étrangères générées qui sont basées sur une clé primaire de la table cible (n :n). + Pattern for unique key generated by the relationship. Motif pour les noms de clés uniques qui sont générées par une association. + + Pattern for primary key generated by identifier relationship. Motif pour les noms de clés primaires qui sont générées par une association. + + + This mode renders the relationships in crow's foot notation which has a better semantics and readability. It also determines the optimal point where the relationship is connected on the tables' edges taking their position into account. + Ce mode affiche les associations en pied d'oiseau ce qui améliore le sémantique et la lisibilité. Il détermine également le point optimal où la relation est connectée sur les bords des tables en tenant compte de leur position. + + + + Crow's foot notation + Affichage en pied d'oiseau + + + + This mode determines the optimal point where the relationship is connected on the tables' edges taking their position into account. It implies the usage of the classical ER notation. + Ce mode détermine le point optimal où la relation est connectée sur les bords des tables en tenant compte de leur position. Cela implique l'utilisation de la notation ER classique. + + + + Connect tables' edges + Connecter les bords des tables + + + + This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. It implies the usage of the classical ER notation. + Ce mode d'affichage est disponible uniquement pour les associations de type <strong>un-à-un</strong>, <strong>un-à-plusieurs</strong> et <strong>les associations aux clés étrangères</strong> mais fournit une meilleure sémantique lors de l'association de tables en plaçant les lignes sur le point exact où l'association se produit. Cela implique l'utilisation de la notation ER classique. + + + + This mode is the classical one. It connects the relationship to tables through their central points. It implies the usage of the classical ER notation. + Ce mode est le classique. Il relie les associations de tables depuis leurs points centraux. Cela implique l'utilisation de la notation ER classique. + RelationshipWidget - Form - Formulaire - - + General Général + One to one relationship Association un à un - 1-1 - 1-1 - - + One to many relationship Association un à plusieurs + 1-n 1-n + Many to many relationship Association plusieurs à plusieurs + n-n n-n + Generalization relationship (inheritance) Association de généralisation (héritage) - gen - gen - - + Dependency / Copy relationship Relation de dépendance / copie + dep dep + Relationship generated via foreign key - Relation générée par une clef étrangère + Relation générée par une clé étrangère + fk fk + Identifier Identifiant + Rel. Type: - Type de relation: + Type de relation : + Table 1: - Table n°1: + Table n°1 : + Table 2: - Table n°2: + Table n°2 : + Foreign key Settings Propriétés par défaut des clés étrangères + + Use the values defined on settings dialogs for the fields below Utiliser les paramètres de pgModeler pour les champs ci-dessous + + Use global settings for these fields Utiliser les paramètres globaux de pgModeler + ON DELETE: - Intuitif - ON DELETE: + ON DELETE : + ON UPDATE: - Intuitif - ON UPDATE: + ON UPDATE : + + + + &1-1 + + + + + &gen + + Name Patterns Règles de nommage + Column (Source): - Colonne (Source): + Colonne (Source) : + Column (Target): - Colonne (Cible): + Colonne (Cible) : + Foreign Key (Source): - Clé étrangère (Source): + Clé étrangère (Source) : + Foreign Key (Target): - Clé étrangère (Cible): + Clé étrangère (Cible) : + Cardinality: - Cardinalité: + Cardinalité : + [SRC] is required [SRC] est requis + [DST] is required [DST] est requis + + Name of the table generated from many to many relationship Nom de la table générée par une relation plusieurs à plusieurs + Deferrable: - Différable: + Reportable : + Deferral: - Report: + Report : + Copy Options Options de copie + INDEXES - INDEXES + INDEX + COMMENTS COMMENTAIRES + INCLUDING INCLURE + DEFAULTS DEFAUTS - EXCLUDING - EXCLURE - - + CONSTRAINTS CONTRAINTES + Use defaults Utiliser les valeurs par défauts + ALL TOUT + STORAGE STOCKAGE + Gen. Table Name: - Nom nouvelle table: + Nom nouvelle table : + Attributes Attributs + Constraints Contraintes + Primary key - Clef primaire + Clé primaire + Advanced Avancé + Attribute Attribut + + + Type - Type + + Constraint Contrainte + Name Nom + This advanced tab shows the objects (columns or table) auto created by the relationship's connection as well the foreign keys that represents the link between the participant tables. - Cet onglet avancé montre les objets (colonnes ou tables) générés automatiquement par la relation ainsi que les clefs étrangères qui forment le(s) lien(s) entre les tables. + Cet onglet avancé montre les objets (colonnes ou tables) générés automatiquement par la relation ainsi que les clés étrangères qui forment le(s) lien(s) entre les tables. + + is required est requis + + + Reference Table: - Table de référence: + Table référente : + Default Défaut + Receiver Table: - Table de destination: + Table de destination : + Pattern for columns generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). - Motif pour les noms de colonnes générées qui sont basées sur la clé primaire d'une table référencée (1:1 et 1:n) ou sur la clé primaire de la table source (n:n). + Motif pour les noms de colonnes générées qui sont basées sur la clé primaire d'une table référencée (1 :1 et 1 :n) ou sur la clé primaire de la table source (n :n). + Pattern for columns generated based upon target table's pk (n-n). - Motif pour les noms de colonnes générées qui sont basées sur la clé primaire de la table cible (n:n). + Motif pour les noms de colonnes générées qui sont basées sur la clé primaire de la table cible (n :n). + Pattern for foreign key generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). - Motif pour les noms de clés étrangères générées qui sont basées sur la clé primaire d'une table référencée (1:1 et 1:n) ou sur la clé primaire de la table source (n:n). + Motif pour les noms de clés étrangères générées qui sont basées sur la clé primaire d'une table référencée (1 :1 et 1 :n) ou sur la clé primaire de la table source (n :n). + Pattern for foreign key generated based upon target table's pk (n-n). - Motif pour les noms de clés étrangères générées qui sont basées sur une clé primaire de la table cible (n:n). + Motif pour les noms de clés étrangères générées qui sont basées sur une clé primaire de la table cible (n :n). + + Pattern for primary key generated by identifier relationship. - Motif pour les noms de clés primaires qui sont générées par une association. + Motif pour les noms de clés primaires qui sont générées par une association. + Primary Key Name: - Nom contrainte clé primaire: + Nom de clé primaire : + Pattern for unique key generated by the relationship. - Motif pour les noms de clés uniques qui sont générées par une association. + Motif pour les noms de clés uniques qui sont générées par une association. + Unique Key Name: - Nom contrainte unique: + Nom clé unique : + Primay Key Column: - + Colonne de clé primaire : + The receiver's primary key will be composed by the generated foreign key columns. - + La clé primaire du destinataire sera composée des colonnes de clé étrangère générées. + Instead of create a multi-valued primary key with the generated foreign keys columns a single column is created and used as primary key. - + Au lieu de créer une clé primaire à valeurs multiples avec les colonnes de clés étrangères générées, une seule colonne est créée et utilisée comme clé primaire. + Single PK column - + Colonne clé primaire simple + Custom Color: - + Couleur personnalisée : + Use the special primary key if you want to include a primary key containing generated columns to the receiver table. <strong>Important:</strong> if this is a new relationship there is a need to finish its creation and reopen this dialog to create the special primary key. - + Utilisez la clé primaire spéciale si vous souhaitez inclure une clé primaire contenant des colonnes générées dans la table de destination. <strong>Important :</strong> s'il s'agit d'une nouvelle relation, il est nécessaire de terminer sa création et de réouvrir cette boîte de dialogue pour créer la clé primaire spéciale. + Referer View: - + Vue référente : + Referer view references one or more columns of a table to construct it's own columns. - + La vue référente référence une ou plusieurs colonnes d'une table pour construire ses propres colonnes. + Referenced table has its columns referenced by a view in order to construct the columns of this latter. - + La table référencée a ses colonnes référencées par une vue afin de construire les colonnes de cette dernière. + Referer Table: - + Table référente : + Referer table references one or more columns of a table through foreign keys. This is the (n) side of relationship. - + La table référente référence une ou plusieurs colonnes d'une table via des clés étrangères. C'est le côté (n) de la relation. + Referenced table has its columns referenced by a table's foreign key. This is the (1) side of relationship. - + La table référencée a ses colonnes référencées par la clé étrangère d'une table. C'est le côté (1) de la relation. + Referenced Table: - + Table référencée : + Reference table has the columns from its primary key will copied to the receiver table in order to represent the linking between them. This is the (1) side of relationship. - + La table de référence a les colonnes de sa clé primaire copiées dans la table de réception afin de représenter la liaison entre elles. C'est le côté (1) de la relation. + Receiver (or referer) table will receive the generated columns and the foreign key in order to represent the linking between them. This is the (n) side of relationship. - + La table référente recevra les colonnes générées et la clé étrangère afin de représenter la liaison entre elles. C'est le côté (n) de la relation. + In many-to-many relationships both tables are used as reference to generate the table that represents the linking. Columns from both tables are copied to the resultant table and two foreign keys are created as well in order to reference each participant table. - - - - &1-1 - - - - &gen - + Dans les relations plusieurs-à-plusieurs, les deux tables sont utilisées comme référence pour générer la table qui représente la liaison. Les colonnes des deux tables sont copiées dans la table résultante et deux clés étrangères sont également créées afin de référencer chaque table participante. + E&XCLUDING - + E&XCLUSION + Available tokens to define name patterns:<br/> <strong>%1</strong> = Reference (source) primary key column name. <em>(Ignored on constraint patterns)</em><br/> <strong>%2</strong> = Reference (source) table name.<br/> <strong>%3</strong> = Receiver (destination) table name.<br/> <strong>%4</strong> = Generated table name. <em>(Only for n:n relationships)</em> - + Formes disponibles pour définir les modèles de noms : <br/> <strong>%1</strong> = Nom de la colonne de clé primaire de référence (source). <em>(Ignoré sur les modèles de contrainte)</em><br/> <strong>%2</strong> = Nom de la table de référence (source).<br/> <strong>%3</strong> = Nom de la table référencée (ou de déstination). <br/> <strong>%4</strong> = Nom de la table générée. <em>(Seulement pour les relations n:n)</em> - RoleWidget + ResultSetModel - Form - Formulaire + + [binary data] + [données binaires] + + + RoleWidget + Password: - Mot de passe: + Mot de passe : + Connections: - Connexions: + Connexions : + Attributes Attributs + Superuser Super utilisateur - Inherit Permissions + + Inherit permissions Hériter des permissions - Can create Database + + Can create database Peut créer des bases de données - Can create Role - Peut créer des rôles + + Can use replication + Peut utiliser la réplication - Can use Replication - Peut utiliser la réplication + + Can login + Peut se loguer + Encrypted Encrypté - Can Login - Peut s'authentifier - - + + Members Membres + + Member of Membre de + + Members (Admin.) - Membres (Admin.) - - - Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. - Definir <strong><em>Connexions</em></strong> à <strong><em>-1</em></strong> créé le rôle sans limite de connexion.<br/> Décocher <strong><em>Validité</em></strong> créé un rôle qui n'expire jamais. + Membres (Admin.) + Role Rôle + + Validity Validité + yyyy-MMM-dd hh:mm:ss - + aaaa-MMM-jj hh :mm :ss + Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. - + L'affectation de <strong><em>-1</em></strong> à <strong><em>Connexions</em></strong> crée un rôle sans limite de connexion.<br/> Décocher <strong><em>Validité</em></strong> crée un rôle qui n'expire jamais. + + + + Bypass RLS + Contournement RLS + + + + Can create role + Peut créer des rôles RuleWidget - Form - Formulaire - - + Event: - Evènement: + Évènement : + Execution Type: - Type d'exécution: + Type d'exécution : + Conditional Expr.: - Expr. conditionnelle: + Expr. conditionnelle : + Commands Commandes + SQL Command: - Commandes SQL: + Commandes SQL : + SQL command Commande SQL + To create a rule that does not perform any action (<strong>DO NOTHING</strong>) simply do not specify commands in the SQL commands table. Pour créer une règle qui n'éxécute aucune action (<strong>DO NOTHING</strong>), ne spécifiez aucune commandes dans le champs des commandes SQL. @@ -9461,912 +12148,1314 @@ accepted structure. All available options are described below. SQLExecutionWidget + Form Formulaire - Load SQL script - Ouvrir un script SQL - - - &Load - O&uvrir - - + Save SQL commands Sauvegarder commandes SQL - &Save - E&nregistrer - - - &Find - &Rechercher - - + Alt+F Alt+F + Run the specified SQL command - Exécute la commande SQL entrée + Exécuter la commande SQL entrée + Run SQL Exécuter SQL + F6 F6 + Clear sql input field and results Effacer le code SQL et la grille de résultat + Clear All Effacer + + Export results to a CSV file Exporter les résultats dans un fichier CSV + Snippe&ts - Snippe&ts + Extrai&ts + + + + Alt+T + + E&xport E&xporter - Shows the command history - Afficher l'historique des commandes + + ... + ... + + + + SQL file (*.sql);;All files (*.*) + Fichier SQL (*.sql);;Tous les fichiers (*.*) + + + + Load + Charger - &History - &Historique + + Save + Enregistrer - Alt+H - Alt+H + + Save as + Enregistrer sous - Command History - Historique des commandes + + [binary data] + [données binaires] - Clear sql input field and results. - Effacer les résultats et le code SQL saisi. + + + Messages (%1) + - Clear - Effacer + + [%1]: SQL command successfully executed in <em><strong>%2</strong></em>. <em>%3 <strong>%4</strong></em> + - ... - ... + + Save CSV file + Sauvegarder fichier CSV - 0 - 0 + + Comma-separated values file (*.csv);;All files (*.*) + Fichiers CSV avec champs séparés par des virgules (*.csv);;Tous les fichiers (*.*) - Rows returned: - Lignes retournées: + + The SQL input field and the results grid will be cleared! Want to proceed? + Le champ d'entrée SQL ainsi que la grille des résultats vont être purgés ! Voulez-vous poursuivre ? - SQL file (*.sql);;All files (*.*) - Fichier SQL (*.sql);;Tous les fichiers (*.*) + + Save history + Enregistrer l'historique - [binary data] - [données binaires] + + Reload history + Recharger l'historique - Save CSV file - Sauvegarder fichier CSV + + Find in history + Rechercher dans l'historique - Comma-separated values file (*.csv);;All files (*.*) - Fichiers CSV, champs séparés par des points-virgules (*.csv);;Tous les fichiers (*.*) + + Hide find tool + Masquer l'outil de recherche - The SQL input field and the results grid will be cleared! Want to proceed? - Tout le code SQL ainsi que la grille des résultats vont être purgés! Continuer? + + This action will wipe out all the SQL commands history for the current connection! Do you really want to proceed? + Cette action effacera tout l'historique des commandes SQL pour la connexion en cours ! Voulez-vous vraiment poursuivre ? + Load SQL commands - + Charger commandes SQL + Copy selection - + Copier la sélection + Search in SQL code - + Rechercher dans le code SQL + Toggles the output pane - + (Dés)active le volet de sortie + &Output - + S&ortie + Alt+O - Alt+O + Alt+O + + + Results - + Résultats + Messages - + + History - + Historique + No results retrieved or changes done due to the error above. - + Aucun résultat n'a été récupéré ou des modifications ont été effectuées en raison de l'erreur ci-dessus. - Messages (%1) - + + Results (%1) + Resultats (%1) - Results (%1) - + + Rows affected + Lignes affectées - [%1]: SQL command successfully executed. <em>%2 <strong>%3</strong></em> - + + Rows retrieved + Lignes récupérées - Rows affected - + + Plain format + Format simple - Rows retrieved - + + CVS format + Format CVS + + This action will wipe out all the SQL commands history for all connections! Do you really want to proceed? + Cette action effacera tout l'historique des commandes SQL pour toutes les connexions ! Voulez-vous vraiment poursuivre ? + + + Clear history - + Nettoyer l'historique - - - SQLToolWidget - Form - Formulaire + + Close the current SQL script + Fermer le script SQL actuel - Database explorer - Explorateur de bases de données + + SQL script currently handled + Script SQL actuellement géré + + + + (not saved) + (non enregistré) - Connect to server - Démarrer la connexion + + Handle external SQL script + Gérer le script SQL externe - Disconnect from server - Se déconnecter + + &Script + - Browse selected database. - Charger les informations de la base sélectionnée + + Fi&nd + &Rechercher - Drop the selected database - Supprimer la base de données sélectionnée + + Alt+X + - Shift+Del - Shift+Del + + Current working database + Base de données de travail actuelle + + + + SQLToolWidget + + + Form + Formulaire - Update the database list. - Actualiser la liste des bases de données. + + Database explorer + Explorateur de bases de données + SQL execution - Exécuteur SQL + Exécuteur de code SQL + + ... ... + Warning Avertissement - <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? - <strong>ATTENTION:</strong> Vous êtes sur le point de supprimer l'intégralité de la base de données <strong>%1</strong>! Toutes les données seront définitivement supprimées. Détruire la base ? - - - You're running a demonstration version! The data manipulation feature is available only in the full version! - Vous utilisez la version de démonstration ! Cette fonctionnalité est disponible uniquement sur la version complète ! - - + Disconnect from all databases - + Se déconnecter de toutes les bases de données + Update the database list - + Mettre à jour la liste des bases de données + Toggle the object's attributes grid - + (Dés)active la grille des attributs de l'objet + Attributes - Attributs + Attributs + Alt+R - Alt+R + Alt+R + Toggle the display of source code pane - + (Dés)active l'affichage du volet du code source + + Source code - Code source + Code source + <strong>ATTENTION:</strong> Disconnect from all databases will close any opened tab in this view! Do you really want to proceed? - + <strong>ATTENTION :</strong> Se déconnecter de toutes les bases de données fermera tout onglet ouvert dans cette vue ! Voulez-vous vraiment poursuivre ? - SchemaWidget + SceneInfoWidget + Form - Formulaire + Formulaire + + + + + Current position of the mouse in the canvas + Position actuelle de la souris dans le canevas + + + + + + + - + + + + + + Current zoom factor + Facteur de zoom actuel + + + Currently selected object(s) + Objet(s) actuellement sélectionné(s) + + + + + Dimensions of the selected object(s) + Dimensions de(s) l'objet(s) sélectionné(s) + + + + No selection + Aucune séléction + + + + N/A + Inconnu + + + + Sel. objects: %1 + Objets select. : %1 + + + + SchemaWidget + + Show rectangle Afficher le rectangle + Fill color: - Couleur de remplissage: + Couleur de remplissage : SequenceWidget - Form - Formulaire - - + Cyclic: - Cyclique: + Cyclique : + Start: - Début: + Début : + Maximum: - Maximum: + Maximum : + Minimum: - Minimum: + Minimum : + + + + Defualt values: + + Increment: - Incrément: + Incrément : + Cache: - Cache: + Cache : + Owner Col.: - Pas mieux - Owner Col.: + Proprio. Col. : + + + + User defined + SnippetsConfigWidget + Form - Formulaire + Formulaire + Create new connection - Créer une nouvelle connexion + Créer une nouvelle connexion + Cancel edition - Annuler l'édition + Annuler l'édition + Edit selected connection - Editer la connexion sélectionnée + Modifier la connexion sélectionnée + Delete selected connection - Supprimer la connexion sélectionnée + Supprimer la connexion sélectionnée + Remove All - Tout supprimer + Tout supprimer + Shift+Del - Shift+Del + Maj+Suppr + Filter: - Filtrer: + Filtrer : + ID: - Identifiant: + Identifiant : + Add - Ajouter + Ajouter + Update - Mettre à jour + Mettre à jour + General - Général + Général + Label: - + Étiquette : + Applies to: - + S'applique à : + Parsable or dynamic snippets are written in the <strong>schema micro language</strong> syntax. When using a parsable snippet the attributes surrounded in <strong>{}</strong> will be replaced by the selected object's matching attributes. - + Les extraits de code analysables ou dynamiques sont écrits dans la syntaxe <strong>schema micro language</strong>. Lorsque vous utilisez un extrait de code analysé, les attributs entourés par des <strong>{}</strong> seront remplacés par les attributs correspondants de l'objet sélectionné. + Parsable - + Analysable + When handling parsable snippets empty attributes will be replaced by a value in the format <strong>{attribute}</strong>. Note that this option can affect the semantics of the resulting snippet. - + Lors de la manipulation d'extraits de code analysables, les attributs vides seront remplacés par une valeur au format <strong>{attribut}</strong>. Noter que cette option peut affecter la sémantique de l'extrait résultant. + Placeholders - + Élément de substitution + Parse the snippet in order to check if there are syntax errors. - + Analyser l'extrait de code afin de vérifier s'il existe des erreurs de syntaxe. + Parse - + Analyser + Snippets: - + Extraits : + General purpose - + Usage général + All snippets - + Tous les extraits + /* Error parsing the snippet '%1': %2 */ - + /* Erreur lors de l'analyse de l'extrait '%1': + + %2 */ + Duplicated snippet id <strong>%1</strong> detected. Please, specify a different one! - + Identifiant <strong>%1</strong> d'extrait dupliqué détécté. Merci d'en choisir un autre ! + Invalid ID pattern detected <strong>%1</strong>. This one must start with at leat one letter and be composed by letters, numbers and/or underscore! - + Motif d'identification <strong>%1</strong> incorrect détecté. Celui-ci doit commencer par au moins une lettre et être composé de lettres, de chiffres et/ou de tirets bas _ ! + Empty label for snippet <strong>%1</strong>. Please, specify a value for it! - + Label vide pour l'extrait <strong>%1</strong>. Merci de lui spécifier une valeur ! + Empty code for snippet <strong>%1</strong>. Please, specify a value for it! - + Code vide pour l'extrait <strong>%1</strong>. Merci de lui spécifier une valeur ! + The dynamic snippet contains syntax error(s). Additional info: <br/><em>%1</em> - + L'extrait dynamique contient des erreurs de syntax. Plus d'informations : <br/><em>%1</em> + Do you really want to remove all snippets? - + Voulez-vous vraiment supprimer tous les extraits ? + No syntax errors found in the snippet. - + Aucune erreur de syntax retrouvée dans l'extrait. SourceCodeWidget - Form - Formulaire - - + Version: - Version: + Version : + PostgreSQL PostgreSQL + iconecodigo - icone + icône + SQL SQL - XML - XML + + Original + - Type: - Type: + + XML + XML + Source code visualization Visualisation du code source + SQL code (*.sql);;All files (*.*) - Code SQL (*.sql);;Tous les fichiers (*.*) + Code SQL (*.sql);;Tous les fichiers (*.*) + Generating source code... Génération du code source... + + -- NOTE: the code below contains the SQL for the selected object +-- as well for its dependencies and children (if applicable). +-- +-- This feature is only a convinience in order to permit you to test +-- the whole object's SQL definition at once. +-- +-- When exporting or generating the SQL for the whole database model +-- all objects will be placed at their original positions. + + + + -- NOTE: le code ci-dessous contient le code SQL de l'objet sélectionné +-- ainsi que de ses dépendances et enfants (le cas échéant). +-- +-- Cette fonctionnalité n'est qu'une commodité vous permettant de tester +-- la définition SQL de l'objet entier. +-- +-- Lors de l'export ou de la génération du code SQL pour l'ensemble du modèle de base de données, +-- tous les objets seront placés à leurs positions d'origine. + + + + + + -- SQL code unavailable for this type of object -- -- Code SQL non disponible pour ce type d'objet. -- + Code display: - - - - Original - + Affichage du code : + Original + depedencies' SQL - + Original + dépendances de SQL + Original + children's SQL - + Original + enfants de SQL + Save the SQL code to a file. - + Enregistrer le code SQL dans un fichier. + Save SQL - + Enregistrer le code SQL + Save SQL code as... - - - - -- NOTE: the code below contains the SQL for the selected object --- as well for its dependencies and children (if applicable). --- --- This feature is only a convinience in order to permit you to test --- the whole object's SQL definition at once. --- --- When exporting or generating the SQL for the whole database model --- all objects will be placed at their original positions. - - - - + Enregistrer le code SQL sous... + <!-- XML code preview disabled in demonstration version --> - + < !-- Aperçu du code XML désactivé dans la version de démonstration --> + <strong>Original:</strong> displays only the original object's SQL code.<br/><br/> <strong>Dependencies:</strong> displays the original code including all dependencies needed to properly create the selected object.<br/><br/> <strong>Children:</strong> displays the original code including all object's children SQL code. This option is used only by schemas, tables and views. - + <strong>Original :</strong> affiche uniquement le code SQL de l'objet d'origine.<br/><br/> <strong>Dépendances :</strong> affiche le code d'origine ainsi que toutes les dépendances nécessaires pour créer correctement l'objet sélectionné.<br/><br/> <strong>Enfants :</strong> affiche le code original ainsi que le code SQL de tous les enfants. Cette option est utilisée uniquement par les schémas, les tables et les vues. + -- SQL code purposely truncated at this point in demo version! - + + +-- Le code SQL est volontairement tronqué à ce stade dans la version démo ! SwapObjectsIdsWidget - Form - Formulaire + + Create: + Créer : + + + + + ID: + Identifiant : + + + + Before: + Avant : + + + + Swap the values of the fields + Procède à l'échange + + + + Swap values + Échanger + + + + Change objects creation order + Changer l'ordre de création des objets + + + + Change the objects creation order is an irreversible operation and cause the operations history to be automatically erased. Note that the creation order configured in this form is not definitive and may change after a model validation. + Modifier l'ordre de création des objets est une opération irréversible qui entraîne l'effacement automatique de l'historique des opérations. Noter que l'ordre de création configuré dans ce formulaire n'est pas définitif et peut changer après la validation d'un modèle. + + + + Swap the object ids changing their creation order + Modifie l'ordre de création de deux objets en échangeant leurs numéros d'identification - Create: - Créer: + + Swap ids + Échanger identifiants - ID: - Identifiant: + + Filter: + Filtrer : - Before: - Avant: + + ID + Identifiant - It's recommended to use this feature only when the SQL validation fails in cases when a object is being referenced in portions where the ordinary validation couldn't reach, e.g., inside of a rule command or check constraint expression. - Il est recommandé d'utiliser cette fonctionnalité seulement lorsque la validation SQL échoue. C'est souvent le cas lorsque des objets possèdent des références vers d'autres objets que vous avez créé ultérieurement dans le modèle . Echanger les ID débloque la situation. + + Object + Objet - Swap the values of the fields - Procède à l'échange + + Type + - Swap values - Échanger + + Parent Object + Objet parent - Change objects creation order - + + Parent Type + Type parent Table + new_table nouvelle_table + In demonstration version tables can have only `%1' instances of each child object type or ancestor tables! You've reach this limit for the type: `%2' - + Dans la version de démonstration, les tables ne peuvent contenir que `%1' instance(s) de chaque type d'objet enfant ou table ancêtre ! Vous avez atteint cette limite pour le type : `%2' TableDataWidget + Edit table data + Modifier les données de la table + + + + Copy items on the grid + Copier les éléments sur la grille + + + + Copy + Add empty rows - + Ajouter des lignes vides - Add - Ajouter + + Add row + + Ins - Ins + Insérer - Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely igored when generating the <strong>INSERT</strong> commands. - + + Ctrl+D + + Add an empty column - + Ajouter une colonne vide - Remove all rows from the grid preserving columns + + Delete rows - Clear - Effacer + + Remove all rows from the grid preserving columns + Supprimer toutes les lignes des colonnes de préservation de la grille + Shift+Del - + Maj+Suppr + Delete the selected rows - + Supprimer les lignes sélectionnées - Delete - Supprimer + + + Del + Suppr - Del - + + Duplicate the selected rows + Dupliquer les lignes sélectionnées + + + + Delete the selected columns + Supprimer les colonnes sélectionnées - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> + + Delete column - Duplicate the selected rows + + Paste items on the grid + Copier les éléments sur la grille + + + + Paste + Coller + + + + Ctrl+V - Duplicate + + <html><head/><body><p>Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely ignored when generating the <span style=" font-weight:600;">INSERT</span> commands.</p></body></html> - Ctrl+D + + Add column - Delete the selected columns + + Duplicate rows + + Change the values of all selected cells at once + Modifier d'un coup les valeurs de toutes les cellules sélectionnées + + + + Bulk data edit + Modification de données en masse + + + + Ctrl+E + Ctrl+E + + + Remove all columns (and rows) from the grid + Supprimer toutes les colonnes (et lignes) de la grille + + + + Delete all columns + Ctrl+Shift+Del + Ctrl+Maj+Suppr + + + + Delete all rows + Delete columns is an irreversible action! Do you really want to proceed? - + Effacer des colonnes est une action irréversible ! Voulez-vous vraiment poursuivre ? + Remove all rows is an irreversible action! Do you really want to proceed? - + Supprimer toutes les lignes est une action irréversible ! Voulez-vous vraiment poursuivre ? + Remove all columns is an irreversible action! Do you really want to proceed? - + Supprimer toutes les colonnes est une action irréversible ! Voulez-vous vraiment poursuivre ? + + Unknown column - + Colonne inconnue + Duplicated column - + Colonne dupliquée - (no columns) - + + Fills the grid using a CSV file + Remplit la grille en utilisant un fichier CSV + + + + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + <html><head/><body><p>Les valeurs vides sont supposées être <span style="font-weight :600;">DEFAULT</span>. Pour utiliser des valeurs spéciales comme <span style="font-weight :600;">NULL</span>, un appel de fonction comme <span style="font-weight :600;">now()</span> ou un échappement des données spécifiques, entourer les valeurs de deux barres obliques, par exemple <span style="font-weight :600;">/valeur/</span>. Pour utiliser une barre oblique dans le cadre de la valeur, ajouter le caractère barre oblique inverse, par exemple <span style="font-weight :600;">/</span>.</p></body></html> TableObjectView + Relationship: %1 - - - - - TableView - - Connected rels: %1 - Associations: %1 + +Relations : %1 TableWidget - Form - Formulaire - - + Options Options + Tag: - Tag: + Balise : + With OID Avec OID + Generate ALTER for columns/constraints Utiliser ALTER pour les colonnes/contraintes + Unlogged Unlogged - Columns - Colonnes - - - Constraints - Contraintes - - - Triggers - Déclencheur - - - Rules - Règles - - - Indexes - Indexes - - - Tables - Tables - - + + + + + + + Name Nom + Schema Schéma + + + Type - Type + + + PK + Faut-il le traduire ? + CP + + + Default Value Valeur par défaut - Attribute - Attribut + + Attribute(s) + Attribut(s) + + It is not possible to mark a column as primary key when the table already has a primary key which was created by a relationship! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. + Il n'est pas possible de marquer une colonne comme clé primaire quand la table a déjà une clé primaire qui a été créée par une relation ! Cette action doit être effectuée dans la section <strong>Clé primaire</strong> du formulaire d'édition de la relation. + + + + It is not possible to mark a column created by a relationship as primary key! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. + Il n'est pas possible de marquer une colonne créée par une relation comme clé primaire ! Cette action doit être effectuée dans la section <strong>Clé primaire</strong> du formulaire d'édition de la relation. + + + ON DELETE - ON DELETE + Faut-il le traduire ? + À la suppression + ON UPDATE - ON UPDATE + Faut-il le traduire ? + À la mise à jour + Refer. Table - Table référ. + Table de référ. + Firing Déclencheur + Events Evènements + Execution Exécution + Event Evènement + Indexing Indexation + + Command + Commande + + + + Permissive + Permissif + + + + USING expression + Faut-il le traduire ? + + + + + CHECK expression + Faut-il le traduire ? + + + + + Roles + Rôles + + + Parent - Parent + + Copy Copie + + Yes + Oui + + + + No + Non + + + &Columns - + &Colonnes + Co&nstraints - + Co&ntraintes + Tri&ggers - + Décl&encheurs + &Rules - + &Régles + &Indexes - + &Index + &Tables - + &Tables + Edit data - + Modifier données + Define initial data for the table - + Définir les données initiales de la table + + + + Enable row level security + Activer la sécurité au niveau de la ligne + + + + Force RLS for owner + Forcer RLS pour le propriétaire + + + + &Policies + &Politiques TablespaceWidget + Form Formulaire + Directory: - Dossier: + Dossier : TagWidget - Form - Formulaire - - + Colors Couleurs + Extended body: - Corps étendu: + Corps étendu : + Body: - Corps: + Corps : + Title: - Titre: + Titre : + Schema name: - Nom du schéma: + Nom du schéma : + Table name: - Nom de la table: + Nom de la table : TaskProgressWidget + Executing tasks Exécution des tâches + + Waiting task to start... En attente du démarrage de la tâche ... @@ -10374,633 +13463,727 @@ Relationship: %1 TextboxWidget - Form - Formulaire - - + Font: - Police: + Police : + Text Texte + pt pt + Color: - Couleur: + Couleur : + Bold Gras + Italic Italique + Underline Souligné + Select text color - Sélection de la couleur de texte + Sélection de la couleur du texte TriggerWidget - Form - Formulaire - - + Event: - Evènement: + Évènement : + INSERT INSERT + DELETE DELETE + UPDATE UPDATE + TRUNCATE TRUNCATE + Deferrable: - Différable: + Reportable : + Columns Colonnes + Column: - Colonne: + Colonne : + Arguments Arguments + Constraint Contrainte + FOR EACH ROW Pour chaque ligne + Refer. Table: - Table référ.: + Table référ. : + Condition: - Condition: + Condition : + Argument: - Argument: + Argument : + Function: - Fonction: + Fonction : + Options: - Options: + Options : + Excution: - Excution: + Exécution : + Column Colonne + Type - Type + TypeWidget - Form - Formulaire - - + Configuration: - Configuration: + Configuration : + Base Type Type de base + Enumeration - Enumération - - - Composite - Composite + Énumération + Enumerations Énumérations + Enumeration: - Énumeration: + Énumération : + + + Attributes Attributs + Internal Length: - Long. interne: + Long. interne : + Storage: - Stockage: + Stockage : + Category: - Catégorie: + Catégorie : + Delimiter: - Délimiteur: + Délimiteur : + Alignment: - Alignement: + Alignement : + char char + smallint smallint + integer integer + double precision - double precision + double précision + Default Value: - Valeur par défaut: + Valeur par défaut : + Range - Interval + Intervalle + Options: - Options: + Options : + By value Par valeur + Preferred Préféré + Collatable - Collatable + Assemblable + Functions Fonctions + INPUT: - INPUT: + INPUT : + OUTPUT: - OUTPUT: + OUTPUT : + RECV: - RECV: + RECV : + SEND: - SEND: + SEND : + TPMOD_IN: - TPMOD_IN: + TPMOD_IN : + TPMOD_OUT: - TPMOD_OUT: + TPMOD_OUT : + ANALYZE: - ANALYZE: + ANALYZE : + Name: - Nom: + Nom : + Collation: - Collation: + Collation : + Subtype Diff Func.: - Fonction de différence du sous-type: + Fonction de différence du sous-type : + Operator Class: - Classe d'opérateurs: + Classe d'opérateurs : + Canonical Func.: - Fonction canonique: + Fonction canonique : + Like Type - Type de Like + Type de Like + Element Type Type d'élement + Subtype Sous-type + Name Nom + Type - Type + + Collation - Collation + + The functions to be assigned to a type should be written in C language and possess, respectively, the following signatures:<br/> <table> <tr> <td><strong>INPUT:</strong> <em>any function(cstring, oid, integer)</em></td> <td><strong>OUTPUT:</strong> <em>cstring function(any)</em></td> </tr> <tr> <td><strong>SEND:</strong> <em>byta function(any)</em></td> <td><strong>RECV:</strong> <em>any function(internal, oid, integer)</em></td> </tr> <tr> <td><strong>TPMOD_IN:</strong> <em>integer function(cstring[])</em></td> <td><strong>TPMOD_OUT:</strong> <em>cstring function(integer)</em></td> </tr> <tr> <td><strong>ANALYZE:</strong> <em>boolean function(internal)</em></td> <tr> </table> - La fonction assignée à un type devrait être écrite en langage C et possèder, les signatures respective suivantes:<br/> <table> <tr> <td><strong>INPUT:</strong> <em>any fonction(cstring, oid, integer)</em></td> <td><strong>OUTPUT:</strong> <em>cstring fonction(any)</em></td> </tr> <tr> <td><strong>SEND:</strong> <em>byta fonction(any)</em></td> <td><strong>RECV:</strong> <em>any fonction(internal, oid, integer)</em></td> </tr> <tr> <td><strong>TPMOD_IN:</strong> <em>integer fonction(cstring[])</em></td> <td><strong>TPMOD_OUT:</strong> <em>cstring fonction(integer)</em></td> </tr> <tr> <td><strong>ANALYZE:</strong> <em>boolean fonction(internal)</em></td> <tr> </table> + Les fonctions assignées à un type devraient être écrites en langage C et possèder, les signatures suivantes :<br/> <table> <tr> <td><strong>INPUT:</strong> <em>any function(cstring, oid, integer)</em></td> <td><strong>OUTPUT:</strong> <em>cstring function(any)</em></td> </tr> <tr> <td><strong>SEND:</strong> <em>byta function(any)</em></td> <td><strong>RECV:</strong> <em>any function(internal, oid, integer)</em></td> </tr> <tr> <td><strong>TPMOD_IN:</strong> <em>integer function(cstring[])</em></td> <td><strong>TPMOD_OUT:</strong> <em>cstring function(integer)</em></td> </tr> <tr> <td><strong>ANALYZE:</strong> <em>boolean function(internal)</em></td> <tr> </table> + The functions to be assigned to a range type should have the following signatures:<br/><br/><strong>Canonical:</strong> <em>any function(any)</em> <br/><strong>Subtype Diff:</strong> <em>double precision function(subtype, subtype)</em> - Les fonction assignables au type interval (RANGE) doivent avoir la signature suivante:<br/><br/><strong>Canonique:</strong> <em>any function(any)</em> <br/><strong>Subtype Diff:</strong> <em>double precision function(subtype, subtype)</em> + Les fonction assignables au type plage (RANGE) doivent avoir la signature suivante :<br/><br/><strong>Canonical:</strong> <em>any function(any)</em> <br/><strong>Subtype Diff:</strong> <em>double precision function(subtype, subtype)</em> + Co&mposite - + Co&mposite UpdateNotifierWidget + Update Notifier Vérificateur de mise à jour - New update found! - Nouvelle mise à jour disponible! - - + Hide this widget Cacher ce widget + ... ... + Released in: - Date de sortie: + Date de sortie : + mmm dd, yyyy - dd mmm yyyy - - - Version: - Version: + jj mmm aaaa + 0.0.0 0.0.0 + Changelog Journal des modifications + Redirects to purchase page. Redirige vers la page web pour acheter. + Get binary package Télécharger l'application compilée + Redirects to GitHub source repository. Redirige vers la page web du dépôt GitHub. + Get source code Télécharger le code source - <strong>Note:</strong> Both actions below will open a new web browser window - <strong>Remarque:</strong> Ces boutons entraînent l'ouverture de votre navigateur web - - - Purchase a new package - Acheter un nouveau paquet - - + + Failed to check updates Impossible de vérifier la présence de mise à jour - The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <strong>%1</strong>. - Le vérificateur de mise à jour n'a pas pu vérifier la présence de nouvelles versions ! Vérifiez votre connexion à Internet et réessayez ! Code d'erreur retourné : <strong>%1</strong>. + + The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <em>%1</em> - <strong>%2</strong>. + Le notificateur de mise à jour n'a pas pu vérifier les nouvelles versions ! Merci de vérifier votre connexion internet et de réessayer ! Erreur de connexion renvoyée : <em>%1</em> - <strong>%2</strong>. + No updates found - Aucune mise à jour disponible + Aucune mise à jour trouvée + You are running the most recent pgModeler version! No update needed. Vous utilisez déjà la version de pgModeler la plus récente ! Aucune mise à jour requise. + The update notifier failed to check for new versions! A HTTP status code was returned: <strong>%1</strong> Le vérificateur de mise à jour n'a pas pu vérifier la présence de nouvelles versions ! Code retour HTTP reçu : <strong>%1</strong> - Recover a package - - - + Update found! - + Mise à jour trouvée ! + New version: - + Nouvelle version : ViewWidget - Form - Formulaire - - + References Références + Column Colonne + Expression Expression + Used in: - Utilisé dans: + Utilisé dans : + Reference Type: - Type de référence: - - - SELECT-FROM - SELECT-FROM - - - FROM-WHERE - FROM-WHERE - - - After WHERE - Après WHERE + Type de référence : + View Definition Définition de la vue + Options Options + Tag: - Tag: + Balise : + Mode: - Mode: + Mode : + Ordinary Ordinaire - Recursive - Récursif - - - Materialized - Matérialisée - - + With no data - With no data + Sans données + Table: - Table: + Table : + Table Alias: - Alias table: + Alias table : + Column: - Colonne: + Colonne : + Column Alias: - Alias colonne: + Alias colonne : + Expression: - Expression: + Expression : + Expression Alias: - Alias expression: + Alias expression : + + + + SELECT ... + Faut-il le traduire ? + + + + + WHERE ... + Faut-il le traduire ? + + + FROM ... + Faut-il le traduire ? + + + + Triggers Déclencheur + Rules Règles + + Indexes + + + + Table Expression CTE + Code Preview Prévisualisation du code + + Alias Col. + Alias col. + + + Col./Expr. - Col./Expr. + + Alias - Alias + - Alias Col. - Alias col. + + Flags: SF FW AW EX VD + Marques : SF FW AW EX VD - Flags: SF FW AW VD - Flags: SF FW AW VD + + To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[table].*</strong></em> + Pour référencer toutes les colonnes d'une table (*), ne pas remplir le champ <strong>Colonne</strong> revient à écrire <em><strong>[schema].[table].*</Strong></em> + + + Name Nom + Refer. Table - Table référ. + Table de référ. + Firing Déclenche + Events Evènements + + Indexing + Indexation + + + Execution Exécution + Event Evènement + /* Could not generate the SQL code. Make sure all attributes are correctly filled! - /* Le code SQL ne peut être généré. Vérifiez que les champs sont correctement remplis! - - - To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[tablel].*</strong></em> - Pour référencer toutes les colonnes dans une table (*) ne remplissez pas le champs <strong>Colonne</strong>, ceci revient à écrire <em><strong>[schéma].[table].*</strong></em> + /* Le code SQL ne peut être généré. Vérifiez que les champs sont correctement remplis ! + Recursi&ve - + Récursi&f + &Materialized - - - - - WelcomeWidget - - Form - Formulaire + &Matérialiser - New model - Nouveau modèle + + The element will be used as part of the SELECT statement to retrieve columns or expressions that will compose the view's columns + L'élément sera utilisé dans le cadre de l'instruction SELECT pour extraire des colonnes ou des expressions qui composeront les colonnes de la vue. - Open model - Ouvrir modèle + + The element will be used as part of the WHERE clause in form of conditional expression + L'élément sera utilisé dans le cadre de la clause WHERE sous forme d'expression conditionnelle. - Sample models - Modèles de démo + + The element is used in the FROM portion of the command in order to reference tables or construct JOIN statements + L'élément est utilisé dans la partie FROM de la commande afin de référencer des tables ou de construire des instructions JOIN. - Recent models - Modèles récents + + The element's expression is used exclusively as the view's definition + L'expression de l'élément est utilisée exclusivement comme définition de la vue. - Last session - Dernière session + + The element will be appended to the very end of the view's definition. This is useful when using GROUP BY/HAVING statements + L'élément sera ajouté à la fin de la définition de la vue. Ceci est utile lors de l'utilisation des instructions GROUP BY/HAVING. - - - Xml2Object - Xml2Object - Xml2Object + + End expression + Expression finale - Xml2ObjectWidget - - XML2Object - XML2Object - + WelcomeWidget - Load XML - Charger XML + + Form + Formulaire - Clear - Effacer + + New model + Nouveau modèle - Generate - Générer + + Open model + Ouvrir modèle - Close - Fermer + + Sample models + Modèles de démo - Database model (*.dbm);;XML file (*.xml);;All files (*.*) - Modèle de base de données (*.dbm);;Fichier XML (*.xml);;Tous les fichiers (*.*) + + Recent models + Modèles récents - Load file - Charger un fichier + + Last session + Dernière session diff --git a/lang/nl_NL.qm b/lang/nl_NL.qm index 5a3df20d0b..d5035fc200 100644 Binary files a/lang/nl_NL.qm and b/lang/nl_NL.qm differ diff --git a/lang/nl_NL.ts b/lang/nl_NL.ts index 83dfa028b2..0d901913f3 100644 --- a/lang/nl_NL.ts +++ b/lang/nl_NL.ts @@ -9,250 +9,63 @@ Over pgModeler - + + 0.0.0 + 0.0.0 + + + + build: + + + + PostgreSQL Database Modeler PostgreSQL Database Modeler - + Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. Een Open Source data modeleer tool ontworpen voor PostgreSQL. Met pgModeler hoef je niet langer zelf je DDL commando's schrijven, laat dit over aan pgModeler! Deze software brengt de concepten van Entity-Relationship diagrammen samen met de features die PostgreSQL implementeerd als uitbreidingen van de SQL standaard. - - Design, configure, deploy - Ontwerp, configureer, implementeer - - - - pgModeler is proudly a brazilian software! - pgModeler is trotse braziliaanse software! + + <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" text-decoration: underline; color:#2980b9;">https://pgmodeler.io</span></a></p></body></html> + - - <a href="http://pgmodeler.com.br">http://pgmodeler.com.br</a> + + <html><head/><body><p>Copyright 2006-2018 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.io</span></a>&gt;</p></body></html> - - <html><head/><body><p>Copyright 2006-2016 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> - + + pgModeler is proudly a brazilian software! + pgModeler is trotse braziliaanse software! - + Hide this widget Verberg dit widget - + ... - - 0.0.0.0 - - - - - (CODE_NAME) - - - - - Build: - - - - + (BUILD_NUM) - + License Licensie - - - Contributors - Medewerkers - - - - <html><head/><body><p>This page is dedicated to all contributors who gave a bit of their time in make pgModeler a better software somehow. The complete list of people that helped pgModeler can be found at <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>If you have a great idea to improve pgModeler please submit it <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">here</span></a>. No ideas for now but want to help? Why not donate a few bucks <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">here</span></a>!?</p></body></html> - <html><head/><body><p>Deze pagina is opgedragen aan alle medewerkers die een beetje van hun tijd opofferden om pgModeler te verbeteren op verschillende manieren. De volledige lijst van individuen die meewerken aan pgModeler is terug te vinden op <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>Indien je een geweldig idee hebt om pgModeler te verbeteren, <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">aarzel dan niet om het ons te laten weten</span></a>. Geen idee hoe je ons kan helpen? Waarom geen kleine bijdrage <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">storten</span></a>!?</p></body></html> - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 8 - - - - - Name - Naam - - - - Country - Land - - - - Contribution - Bijdrage - - - - Damien Degois - - - - - - - France - Frankrijk - - - - French UI translation and several improvements in auxiliary scripts. - Franse vertaling en verschillende verbeteringen in scripts. - - - - Ji Bin - - - - - China - China - - - - Chinese UI translation and small fixes. - Chinese vertaling en kleine verbeteringen. - - - - Pierre-Samuel LE STANG - - - - - - French UI translation. - Franse vertaling. - - - - Lisandro Damián Nicanor - - - - - Argentina - Argentinië - - - - Improvements on build scripts enabling the custom packaging in Linux distros; Per-user settings; pgModeler's package maintainer in Debian Linux. - Aanpassingen aan de build script die aangepaste verpakking for Linux distro's mogelijk maakt; per-user instellingen; Debian Linux package maintainer voor pgModeler. - - - - Pavel Alexeev - - - - - Russia - Rusland - - - - Additional work for packaging in Linux distros; pgModeler's package maintainer in Fedora Linux. - Bijkomend werk voor Linux Distro verpakking; Fedora Linux package maintainer voor pgModeler. - - - - Mariusz Fik - - - - - Poland - Polen - - - - Custom packaging first ideas. Tester of first version of custom packaging patch. - Eerste ideëen betreffende aangepaste verpakkingen. Tester van de eerste versie van de aangepaste verpakkingen patch. - - - - Jonathan DUPRE - - - - - Gilberto Castillo - - - - - Cuba - Cuba - - - - Spanish UI translation. - Spaanse vertaling. - AggregateWidget - - Form - Venster - Final Function: @@ -294,7 +107,7 @@ Status Data Type - + An aggregate function that accepts the types <em><strong>typeA</strong></em> and <em><strong>typeB</strong></em> as input types and which type of state is <em><strong>state_type</strong></em>, must obey the following rules: <br/><br/> <strong> &nbsp;&nbsp;&nbsp;• Final Function:</strong> <em>void final_function(<strong>state_type</strong>)</em><br/> <strong> &nbsp;&nbsp;&nbsp;• Transition Function:</strong> <em><strong>state_type</strong> transition_function(<strong>state_type</strong>, <strong>typeA</strong>, <strong>typeB</strong>)</em> Een aggregatie-funtie die de types <em><strong>typeA</strong></em> en <em><strong>typeB</strong></em> als invoer aanvaardt en waarvan het status-type <em><strong>status_type</strong></em> is. De volgende regels moeten voldaan zijn: <br/><br/> <strong>&nbsp;&nbsp;&nbsp;• Finale Functie:</strong> <em>void finale_functie(<strong>status_type</strong>)</em><br/> <strong>&nbsp;&nbsp;&nbsp;• Overgangsfunctie:</strong> <em><strong>status_type</strong> transitie_functie(<strong>status_type</strong>, <strong>typeA</strong>, <strong>typeB</strong>)</em> @@ -408,181 +221,191 @@ + Constraint: Name + + + + + Constraint: Descriptor + + + + View: Schema name View: Schemanaam - + View: View name View: View-naam - + View: References box View: Referenties box - + View: Extended attributes box View: Uitgebreide attributen box - + View: Title box View: Titel box - + View: Table / columns alias View: Tabel / Kolom alias - + View: Referenced column View: Gerefereerde kolom - + View: Referenced table View: Gerefereerde tabel - + View: Reference descriptor View: Referentiebeschrijving - + Textbox: Body Tekst box: Inhoud - + Column: Column name Kolom: Kolom naam - + Column: Descriptor Kolom: Beschrijving - + Column: Included / Inherited by relationship Kolom: Ingesloten / Overgeërfd via relatie - + Column: Protected Kolom: Beschermd - + Column (pk): Column name Kolom (pk): Kolom naam - + Column (pk): Descriptor Kolom (pk): Beschrijving - + Column (fk): Column name Kolom (fk): Kolom naam - + Column (fk): Descriptor Kolom (fk): Beschrijving - + Column (uq): Column name Kolom (uq): Kolom naam - + Column (uq): Descriptor Kolom (uq): Beschrijving - + Column (nn): Column name Kolom (nn): Kolom naam - + Column (nn): Descriptor Kolom (nn): Beschrijving - + Relationship: Descriptor Relatie: Beschrijving - + Relationship: Label text Relatie: Label tekst - + Relationship: Label box Relatie: Label box - + Relationship: Attribute text Relatie: Attribuut tekst - + Relationship: Attribute descriptor Relatie: Attribuut beschrijving - + Tag: Name Tag: Naam - + Tag: Body Tag: Inhoud - + Placeholder: Body - + Font: Lettertype: - + Colors: Kleuren: - + pt pt - + Underline Onderstrepen - + Italic Cursief - + Bold Vet @@ -590,16 +413,24 @@ Application - + Unknown exception caught! Een onbekende uitzondering trad op! - + Failed to create initial configuration in `%1'! Check if the current user has write permission over that path and at least read permission over `%2'. De initiële configuratie kon niet worden gecreëerd in `%1'! Kijk na of de huidige gebruiker schrijf-machtigingen heeft op dit pad en minstens lees-machtigingen op '%2'. + + BaseConfigWidget + + + A backup of the previous settings was saved into <strong>%1</strong>! + + + BaseForm @@ -624,7 +455,7 @@ &Ok - + %1 properties @@ -632,167 +463,177 @@ BaseObject - + Column Kolom - + Constraint Constraint - + Function Functie - + Trigger Trigger - + Index Index - + Rule Regel - + Table Tabel - + View View - + Domain Domein - + Schema Schema - + Aggregate Aggregator - + Operator Operator - + Sequence Sequentie - + Role Rol - + Conversion Conversie - + Cast Cast - + Language Taal - + Type Type - + Tablespace Tablespace - + Operator Family Operator Familie - + Operator Class Operator Klasse - + Database Database - + Collation Sortering - + Extension Uitbreiding - + Event Trigger Event Trigger - + Relationship Relatie - + + Policy + + + + Textbox Tekst box - + Permission Machtiging - + Parameter Parameter - + Type Attribute Type Attribuut - + Tag Tag - + Basic Relationship Basisrelatie + + + Generic SQL + + - + new_object nieuw_object @@ -803,17 +644,13 @@ BaseObjectView - + SQL off SQL uit BaseObjectWidget - - Form - Venster - Name: @@ -825,114 +662,119 @@ Commentaar: - + Tablespace: Tablespace: - + Schema: Schema: - + Edit object's permissions Machtiginen voor dit object aanpassen - + Edit permissions Machtigingen aanpassen - + This object is protected thus no change in form will be applied to it. Dit object is beschermd en dus worden vorm-aanpassingen niet toegepast. - + Disables the generated SQL code using comment tokens (--). This will disable the code of all child and referrer objects. Maakt de gegenereerde SQL code onuitvoerbaar via comment-tokens (--). Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten wordt uitgeschakeld. - + Disable SQL code Niet-uitvoerbare SQL code - + Collation: Sortering: - + Append or prepend a set of SQL commands to the object's definition. Voeg SQL commando toe voor of na de definitie van het object. - + Custom SQL Aangepaste SQL - + Owner: Eigenaar: - + ID: ID: - + icone icone - Create / Edit: - Creëer / Pas aan: - - - + Required field. Leaving this empty will raise errors! Vereist veld. Dit veld leeglaten leidt tot foutmeldingen! - + Value(s) Waarde(s) - + Version Versie - + The <em style='color: %1'><strong>highlighted</strong></em> fields in the form or one of their values are available only on specific PostgreSQL versions. Generating SQL code for versions other than those specified in the fields' tooltips may create incompatible code. - - The <em style='color: %1'><strong>highlighted</strong></em> fields on the form are available only on specific PostgreSQL versions. When generating SQL code for versions other than those specified on fields' tooltips pgModeler will ignore their values. - De <em style='color: %1'><strong>aangeduidde</strong></em> velden zijn enkel beschikbaar in specifieke versies van PostgreSQL. Wanneer SQL code voor andere versies wordt gegenereerd zal pgModeler deze negeren. - BaseRelationship - + rel_%1_%2 rel_%1_%2 - BugReportForm + BaseTableView - - Bug Report + + Toggles the extended attributes display + + + + + Connected rels: %1 + Verbonden relaties: %1 + + + + BugReportForm + + + Bug Report Bug Rapport @@ -991,10 +833,6 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w Database Model Database Model - - In none occasion the models sent within the report will be published. They are kept safe and are used only for debug purpose. - Database modellen die u ons opstuurt worden onder geen enkel beding gepubliceerd. Deze worden op een veilige manier bewaard door de ontwikkelaars en worden enkel geraadpleegd voor debugging doeleinden. - Attach the below database model file to be debugged. @@ -1027,15 +865,15 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w - CastWidget - - Form - Venster - + BulkDataEditWidget - Implicit - Impliciet + + Bulk data edit + + + + CastWidget I&mplicit @@ -1066,10 +904,6 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w E&xplicit - - Explicit - Expliciet - Source data type @@ -1086,62 +920,31 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w De functie die wordt gebruikt bij den cast van <em><strong>typeA</strong></em> naar <em><strong>typeB</strong></em> moet de volgende signature hebben:: <em><strong>typeB</strong> functie(<strong>typeA</strong>, integer, boolean)</em>. - - CentralWidget - - Form - Venster - - - New model - Nieuw model - - - Open model - Open model - - - Sample models - Voorbeeldmodellen - - - Recent models - Recente modellen - - - Last session - Vorige sessie - - CodeCompletionWidget - - Make persistent - Maakt blijvend + + Make &persistent + - + Makes the widget closable only by ESC key or mouse click on other controls. Zorgt ervoor dat widgets enkel kunnen worden gesloten via de ESC toets of via een muisklik op andere controls. - + SQL Keyword SQL Sleutelwoord - + (no items found.) (geen items gevonden.) CollationWidget - - Form - Venster - Locale: @@ -1199,41 +1002,40 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w ColumnWidget - - Form - Venster - Default Value: Standaardwaarde: - - E&xpression: + + Edit the underlying sequence's attributes - - &NOT NULL + + Edit sequence - - Se&quence: + + Identity: - Expression: - Expressie: + + E&xpression: + - NOT NULL - NOT NULL + + &NOT NULL + - Sequence: - Sequentie: + + Se&quence: + @@ -1254,42 +1056,52 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w Relaties - + Appearance Voorkomen - + Connections Verbindingen - + Snippets Snippets - + Plug-ins Plug-ins - + Defaults Standaard waarden - + &Apply &Toepassen - + &Cancel &Annuleren + In some cases restore the default settings related to it may solve the problem. Would like to do that? + + + + + Restore + + + + Any modification made until now in the current section will be lost! Do you really want to restore default settings? De waarden in de huidige sectie zullen worden overschreven! Bent u er zeker van dat u de standaard waarden wilt instellen? @@ -1297,129 +1109,117 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w ConnectionsConfigWidget - Form - Venster - - - + Password: Wachtwoord: - + Connection Alias: Verbindingsalias: - + Connection DB: Verbinding DB: - + Host/Port: Host/Poort: - + User: Gebruiker: - + Timeout: Timeout: - + SSL Mode: SSL Modus: - + Disable Uit - + Diff Diff - + Export Exporteer - + Import Importeren - + Validation - + Security - + Allow Toegelaten - + Require Vereist - + AC verification AC verificatie - + Full verification Volledige verificatie - + Kerberos Server: - + Client Certificate: Client Certificaat: - + Revoked Certs.: Herroepen Certs: - + Client Key: Client Sleutel: - + Root Certificate: Root Certificaat: - Options: - Opties: - - - Kerberus Server: - Kerberos Server: - - - + ~/.postgresql/root.crt @@ -1429,42 +1229,42 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w Verbindingen: - + second(s) Second(en) - + Force GSSAPI Forceer GSSAPI - + ~/.postgresql/postgresql.crt - + Add Toevoegen - + Update Updaten - + Test Test - + ~/.postgresql/root.crl - + ~/.postgresql/postgresql.key @@ -1475,7 +1275,7 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w - + Edit database connections @@ -1505,27 +1305,27 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w Algemeen - + Other params: - + Specify additional connection parameters in the form [param]=[value]. These parameters are described in the <strong>libpq</strong> chapter at PostgreSQL docs. - + Default for: - + Automatically browses the named database when using this connection to manage databases on <strong>Manage</strong> view. Bladert automatisch door de genoemde database wanneer deze verbinding wordt gebruikt om databases te beheren via de <strong>Beheer</strong> view. - + Auto browse @@ -1535,54 +1335,44 @@ Dit zorgt ervoor dat de code voor alle kinder-objecten en refererende objecten w - + Success Success - - Connection successfuly stablished! + + Connection successfully established! Server details: PID: `%1' Protocol: `%2' Version: `%3' - De verebinding werd aangemaakt! - -Details Server: - -PID: `%1' -Protocol: `%2' -Versie: `%3' + - + There is a connection being created or edited! Do you want to save it? Wenst u de nieuwe of aan te passen verbinding op te slaan vooraleer verder te gaan? - + Found %1 connection(s) %1 verbinding(en) gevonden - + No connections found Geen verbindingen gevonden - + Edit connections ConstraintWidget - - Form - Venster - Match: @@ -1665,29 +1455,25 @@ Versie: `%3' Vul-factor: - - + + Column Kolom - - + + Type Type - + Columns which were included by relationship can not be added / removed manually from the primary key. If done such changes they can raise errors. To create primary key using columns included by relationship use the following options: identifier field, attributes & constraints tab or primary key tab on the relationship form. Kolommen die werden ingesloten via relaties kunnen niet manueel worden toegevoegd aan of verwijderd uit de primaire sleutel. Dit soort aanpassingen kan tot fouten leiden. Om een primaire sleutel aan te maken via kolommen die werden ingesloten door relaties, gebruik de volgende opties: identifier veld, attributen & constraints tab-blad of primaire sleutel tab=blad in het relatie-venster. ConversionWidget - - Form - Venster - Source Encoding: @@ -1717,77 +1503,171 @@ Versie: `%3' CrashHandlerForm - + Crash Handler Crash Handler - + Stack trace Stack trace - + Input: Invoer: - + Load report file for analysis Laad rapport bestand voor analyze - + Save the attached model file on the filesystem Bewaar het ingevoegde model bestaand op het bestandssysteem - + pgModeler bug report (*.bug);;All files (*.*) pgModeler bug rapport (*.bug);;Alle bestanden (*.*) - + Load report Laad rapport - + Save model Bewaar model - + Database model (*.dbm);;All files (*.*) Database model (*.dbm);;Alle bestanden (*.*) - + Crash handler Crash Handler - + Bug report analysis mode activated. Bug rapport analyze modus is geactiveerd. - + Oops! pgModeler just crashed! Oeps! pgModeler crashte! - + We apologize for what happened! It is clear that a nasty bug caused that. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. We verontschuldigen ons voor wat net gebeurde! Het is overduidelijk dat een ernstige bug dit veroorzaakte. Gelieve het formuleer hieronder in te vullen met een beschrijving van wat u deed vooraleer pgModeler onverwachts afsloot. Dit zal ons helpen om deze bug te corrigeren en de software te verbeteren. - CustomSQLWidget + CsvLoadWidget + Form - Venster + Venster + + + + Load CSV + + + + + CSV File: + + + + + Select output file + Selecteer uitvoerbestand + + + + ... + ... + + + + Separator: + + + + + Use the first row as column names in the CSV file. By unchecking this option the first row is used as data. + + + + + Columns in the first row + + + + + Load + Laden + + + + Semicolon (;) + + + + + Comma (,) + + + + + Space + Spatie + + + + Tabulation + + + + + Other + + + + + ; + + + + + Text delimiter: + + + + + " + + + + + Load CSV file + + + + + Comma-separted values (*.csv);;All files (*.*) + + + + CustomSQLWidget Add custom SQL code @@ -1877,56 +1757,47 @@ Deze optie afvinken zorgt ervoor dat de SQL wordt ingevoegd na het CREATE DATABA <html><head/><body><p>Wees voorzichtig bij het gebruik van aangepaste SQL. Dit kan leiden tot een verandering van de betekenis van het volledige model wanneer SQL validatie wordt uigevoerd of wanneer het model wordt geëxporteerd. Het is ook mogelijk, afhankelijk van de hoeveelheid commando's, dat de prestaties van deze processen voelbaar en negatief kunnen worden beïnvloed.</p></body></html> - Append / Prepend SQL code - Voeg SQL code voor/na - - - - Type: - Type: - - - + Generic INSERT Generische INSERT - + Include serial columns Sluit seriële kolommen in - + Exclude serial columns Sluit seriële kolommen uit - + Generic SELECT Generische SELECT - + Table SELECT Tabel SELECT - + Generic UPDATE Generische UPDATE - + Table UPDATE Tabel UPDATE - + Generic DELETE Generische DELETE - + Table DELETE Tabel DELETE @@ -1944,339 +1815,348 @@ Deze optie afvinken zorgt ervoor dat de SQL wordt ingevoegd na het CREATE DATABA &Sluiten - Rows returned: - Aantal rijen: - - - 0 - 0 - - - Maximum limit of listed rows - Maximum limit van weergegeven rijen - - - (Limit: 0) - (Limiet: 0) - - - Empty values are assumed as <strong>DEFAULT</strong>. To use special values like <strong>NULL</strong>, a function call like <strong>now()</strong> or a specific data escaping, enclose values in <strong>&lt;&gt;</strong>. To use <strong>&lt;</strong> or <strong>&gt;</strong> as part of the value prepend the backslash character, e.g., <strong>\&lt;</strong> or <strong>\&gt;</strong>. - Een lege waarde wordt verondersteld <strong>DEFAULT</strong> te zijn. Om speciale waarden zoals <strong>NULL</strong>, een functie-aanroep zoals <strong>now()</strong> of een specifieke data-escaping te gebruiken, sluit deze waarden in tussen<strong>&lt;&gt;</strong>. Om <strong>&lt;</strong> of <strong>&gt;</strong> te gebruiken als deel van een waarde, voeg een backslash toe voor de waarde, bv., <strong>\&lt;</strong> of <strong>\&gt;</strong>. - - - + Refresh listing De lijst wordt vernieuwd - - Refresh - Vernieuwen - - - + F5 F5 - + Save changes Aanpassingen opslaan - - Save - Opslaan - - - + Ctrl+S Ctrl+S - - Copy the selection as CSV buffer - Kopieer de selectie als CSV buffer - - - - Copy - Kopieer - - - - Ctrl+C - Ctrl+C - - - + Export results to CSV file Exporteer de resultaten naar een CSV bestand - - Export - Exporteer - - - + Ctrl+X Ctrl+X - + Undo modifications Aanpassingen ongedaan maken - - Undo - Ongedaan maken - - - + Ctrl+Z Ctrl+Z - Add data - Data toevoegen - - - - Add - Toevoegen - - - - + + Ins Ins - + Mark the selected rows to be deleted Markeer de geselecteerde rij als 'te verwijderen' - - - Delete - Verwijderen - - - - - - - + + + + + Del Del - + Duplicate the selected rows - - Duplicate + + Ctrl+D - - Ctrl+D + + Add new rows from a CSV file - + Filter the result set Filter de resultaten - + Table: Tabel: - + Schema: Schema: - + in in - + Hide views Verberg views - + Filter expression Filterexpressie - + Order && Limit Sortering && Limiet - + results (Use <strong>0</strong> for no limit) - + Column: Kolom: - - ASC - ASC + + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> + + Copy items on the grid - - Add empty rows + + Paste items on the grid - - DESC - DESC + + Ctrl+V + Ctrl+V - - Limit in: - Limiet in: + + Browse referenced tables + + + + + Change the values of all selected cells at once + + + + + Ctrl+E + Ctrl+E + + + + ASC + ASC - 000000 - 000000 + + Add empty rows + - 100 - 100 + + DESC + DESC - results - resultaten + + Limit in: + Limiet in: - + Add Item Item Toevoegen - + Remove Item Item Verwijderen - + Clear the order by columns list Maak de sorterings-kolomlijst leeg - + Move selected item up Verplaats het geselecteerde item naar boven - + Move selected item down Verplaats het geselecteerde item naar beneden - - <strong>WARNING: </strong> There are some changed rows waiting the commit! Do you really want to discard them and retrieve the data now? + + Copy as CSV - - Rows returned: <strong>%1</strong>&nbsp;&nbsp;&nbsp; + + Copy as text - - <em>(Limit: <strong>%1</strong>)</em> - <em>(Limiet: <strong>%1</strong>)</em> + + Copy items + - - none + + Pase items - - No objects found - Geen objecten gevonden + + Browse tables + - - Found %1 object(s) - %1 object(en) gevonden + + Duplicate row(s) + - - Views can't have their data handled through this grid, this way, all operations are disabled. + + Delete row(s) + + + + + Edit cell(s) + + + + + <strong>WARNING: </strong> There are some changed rows waiting the commit! Do you really want to discard them and retrieve the data now? + + + + + Rows returned: <strong>%1</strong>&nbsp;&nbsp;&nbsp; + + + + + <em>(Limit: <strong>%1</strong>)</em> + <em>(Limiet: <strong>%1</strong>)</em> + + + + none + + + + + Column + Kolom + + + + No objects found + Geen objecten gevonden + + + + Found %1 object(s) + %1 object(en) gevonden + + + + Views can't have their data handled through this grid, this way, all operations are disabled. Data van views kan niet worden aangepast via dit raster, alle operaties zijn uitgeschakeld. - + The selected table doesn't owns a primary key! Updates and deletes will be performed by considering all columns as primary key. <strong>WARNING:</strong> those operations can affect more than one row. De geselecteerde tabel bevat geen primary key! Update en delete commando's worden uitgevoerd door alle kolommen als primary key te beschouwen. <strong>OPGEPAST</strong> deze acties kunnen meer dan één rij beïnvloeden. - + + Referenced tables + + + + + + (none) + + + + + Referrer tables + + + + This row is marked to be %1 Deze rij is als %1 gemarkeerd. - + deleted verwijderd - + updated aangepast - + inserted ingevoegd - + [binary data] [binaire data] - + <strong>WARNING:</strong> Once commited its not possible to undo the changes! Proceed with saving? <strong>OPGEPAST: </strong> Eens toegepast is het niet langer mogelijk om aanpassingen ongedaan te maken! Bent u zeker dat u wilt opslaan? - + delete delete - + update update - + insert insert @@ -2289,1030 +2169,1178 @@ Deze optie afvinken zorgt ervoor dat de SQL wordt ingevoegd na het CREATE DATABA Venster - - Toggles the display of system objects. - Schakelt de weergave van systeemobjecten in of uit. - - - - System - Systeem - - - - Toggles the display of extension objects - Schakelt de weergave van uitbreidingsobjecten in of uit - - - - Extension - Uitbreiding - - - Open the grid to visualize or edit data. - Open het raster om data te visualiseren of aan te passen. - - - + + Data &Grid Data &Grid - + + Alt+G Alt+G - Open a new SQL execution pane. - Open een nieuw SQL uitvoerpaneel. - - - - - - - + + + + + ... ... - Ctrl+F5 - Ctrl+F5 - - - Update the objects tree. - Verfrish de objectenstructuur. - - - + Open the grid to visualize or edit data - + Open a new SQL execution pane - + Ctrl+F6 Ctrl+F6 - + Update the objects tree - - Ctrl+S - Ctrl+S + + Toggle the display of filter widget as well the system/extension objects. + - + + Sort items alphabetically. When unchecked, items are sorted by OID. + + + + + Sort alphabetically + + + + Drop this database Verwijder deze database - + Expands all items Alle items uitklappen - + Collapses all items Alle items inklappen - + Filters the currently loaded items in the tree by using a pattern and matching their names. If <strong>By OID</strong> is checked the pattern is interpreted as an integer value that represents the object id (OID). <br><br/><strong>HINT:</strong> if you need to search the entire database use the full refresh (<strong>Ctrl+F5</strong>) prior the filtering. - + Filter: Filter: - + By OID Per OID - - + + Attribute Attribuut - + Value Waarde - + Show raw attributes - Show raw attributes names - Toon onbewerkte attribuutnamen - - - + (not found, OID: %1) (niet gevonden, OID: %1) - + -- Source code not generated! Hit F7 or middle-click the item to load it. -- - + Admin. roles Admin. rollen - + Alignment Uitlijning - + Analyze func. Analyzeer func. - + Arg. count Aantal Argumenten - + Arg. default count Standaard aantal argument - + Arg. defaults Standaardargumenten - + Arg. modes Argumentenmodus - + Arg. names Argumentennamen - + Arg. types Argumententypes - + Behavior type Gedragstype - + By value Per waarde - + Cast type Cast type - + Category Categorie - + Collatable Sorteerbaar - + Collation Sortering - + Comment Commentaar - + Commutator Op. Commutator Op. - + Configuration Configuratie - + Conn. limit Verbindingslimiet - - + + Constraint Constraint - + Create DB Maak DB aan - + Create role Maak rol aan - + Curr. version Huidige versie - + Default Standaard - + Default value Standaardwaarde - + Definition Definitie - + Delimiter Delimiter - + Dest. type Doeltype - + Dimension Dimensie - + Directory Map - + Dest. encoding Doelcodering - + Element Element - + Encoding Codering - + Encrypted Geëncrypteerd - + Enumerations Enumeraties - + Exec. cost Uitvoeringskost - + Expression Expressie - + Op. family Operator Familie - + Final func. Finale functie - + Function Functie - + Func. type Functietype - + Handler func. Behandelende Functie - + Handles type Behandelt type - + Hashes Hashes - + Index type Indextype - + Inherit Erft over - + Ini. condition Initiële Vereiste: - + Inline func. Inline Functie - + Input func. Invoerfunctie - + Internal length Interne lengte - + Interval type Intervalstype - + I/O cast I/O cast - + Join func. Join func. - + Language Taal - + LC COLLATE LC COLLATE - + LC CTYPE LC CTYPE - + Leak proof Lekdicht - + Left type Linkse type - + Length Lengte - + Library Bibliotheek - + Can login Kan inloggen - + Materialized Gematerialiseerd - + Member roles Lid-rollen - + Merges Samenvoegingen - + Name Naam - + Negator op. Negator op. - + Not null Niet null - + Object type Objecttype - + OID OID - + With OIDs Met OIDs - + Old version Oude versie - + Operator Operator - + Operator func. Operator functie - + Output func. Uitvoerfunctie - + Owner Eigenaar - + Owner column Bezittende kolom - + Parents Ouders - + Password Wachtwoord - + Permissions Machtigingen - + Precision Precisie - + Preferred Voorkeur - + Range attributes Omvangsattributen - + Receive func. Ontvangersfunctie - + Ref. roles Ref. rollen - + Replication Replicatie - + Restriction func. Belemmeringsfunctie - + Return type Resultaatstype - + Returns SETOF Geeft SETOF terug - + Right type Rechtse type - + Rows amount Aantal rijen - + Schema Schema - + Security type Beveiligingstype - + Send func. Zendfunctie - + Sort op. Sorteeroperato - + Source type Brontype - + Src. encoding Broncodering - + State type Statustype - + Storage Opslag - + Superuser Superuser - + Tablespace Tablespace - + Type mod. in func. Type mod. in functie - + Type mod. out func. Type mod. buiten functie - + Transition func. Transitiefunctie - + Trusted Vertrouwd - + Type Type - + Type attribute Typeattribuut - + Types Types - + Unlogged Niet gelogged - + Validator func. Validatiefunctie - + Validity Geldigheid - + Windows func. Windowing func. - + false onwaar - + true waar - + Cache value Cachewaarde - + Cycle Cyclus - + Increment Toename - + Max. value Max. waarde - + Min. value Min. waarde - + Start value Startwaarde - + Last value Laatste waarde - + Subtype Subtype - + Op. class Op. klasse - + Canonical func. Canonische func. - + Subtype diff func. Subtype diff func. - + Deferrable Uitstelbaar - + For each row Voor elke rij - + Firing Afvuring - + On insert Bij insert - - + + On delete Bij delete - - + + On update Bij update - + On truncate Bij truncate - + Arguments Argumenten - + Table Tabel - + Trigger func. Trigger func. - - - + + + Columns Kolommen - + Condition Voorwaarde - + Deferment Uitstel - + Event Event - + Execution mode Uitvoeringsmodus - + Commands Commando's - + Position Positie - + Comparison type Vergelijkingstype - + Ref. columns Ref. columns - + Expressions Expressies - + Fill factor Vulfactor - + No inherit Geen overerving - + Op. classes Op. klasses - + Operators Operators - + Ref. table Ref. tabel - + Unique Uniek - + Predicate Predicaat - + Collations Sorteringen - + Inherited Overgeërfd - + + Client encoding + + + + + Configuration file + + + + + Data directory + + + + + Dynamic library path + + + + + Dynamic shared memory + + + + + Hba file + + + + + Listen addresses + + + + + Max. connections + + + + + Listen port + + + + + Server encoding + + + + + SSL + + + + + SSL ca file + + + + + SSL cert file + + + + + SSL crl file + + + + + SSL key file + + + + + Server version + + + + + Ident file + + + + + Password encryption + + + + + Connection ID + + + + + Server PID + + + + + Server protocol + + + + + Referrers + + + + + Identity + + + + + Command + + + + + USING expr. + + + + + CHECK expr. + + + + + Roles + Rollen + + + + RLS enabled + + + + + RLS forced + + + + + Show objects filter + + + + + Show system objects + + + + + Show extension objects + + + + Snippets Snippets - + Drop object Verwijder object - + Drop cascade Verwijder cascade - + Truncate Truncate - + Trunc. cascade Trunc. cascade - + Show data Toon data - + Reload properties Eigenschappen herladen - + Update Updaten - + Rename Hernoem - + Source code Broncode - + Quick refresh - + Full refresh - + + -- Source code unavailable for this kind of object -- + + + + Do you really want to drop the object <strong>%1</strong> <em>(%2)</em>? Bent u zeker dat u het object <strong>%1</strong> <em>%2</em> wilt verwijderen? - + Do you really want to <strong>cascade</strong> drop the object <strong>%1</strong> <em>(%2)</em>? This action will drop all the other objects that depends on it. Bent u er zeker van dat u het object &lt;strong&gt;%1&lt;/strong&gt; &lt;em&gt;(%2)&lt;/em&gt; via &lt;strong&gt;cascade&lt;/strong&gt; wilt verwijderen? Deze actie verwijdert ook alle objecten die afhankelijk zijn van dit object. - + Do you really want to truncate the table <strong>%1</strong>? Bent u zeker dat u de tabel <strong>%1</strong> wil truncaten? - + Do you really want to <strong>cascade</strong> truncate the table <strong>%1</strong>? This action will truncate all the tables that depends on it? Bent u er zeker van dat u de tabel <strong>%1</strong> <em>(%2)</em> via <strong>cascade</strong> wilt verwijderen? Deze actie verwijdert ook alle tabellen die afhankelijk zijn van deze tabel. - + + Also restart sequences + + + + Src. table: %1 Src. column(s): %2 - + Ref. table: %1 Ref. column(s): %2 - + -- Source code genaration for buil-in and base types currently unavailable -- - + -- Source code unavailable for the object %1 (%2). -- - - - DatabaseImportForm - - Database Import - Database Import + + + Warning + Opgepast - - Database import - Database import + + You're running a demonstration version! The data manipulation feature is available only in the full version! + Dit is een demonstratie-versie. De data manipulatie functionaliteit is enkel beschikbaar in de volledige versie! + + + <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? + <strong>PAS OP:</strong> U staat op het punt om de volledige database <strong>%1</strong> te verwijderen! Alle data zal verloren gaan. Bent u zeker dat u verder wilt gaan? + + + + DatabaseImportForm Settings @@ -3329,249 +3357,211 @@ Ref. column(s): %2 Verbinding: - - Origin point: - Oorsprongspunt: - - - - Starting point where objects will be put. - Startpunt waar objecten zullen worden neergezet. - - - - Tables per row: - Tabellen per rij: - - - - Tables per row - Tabellen per rij - - - - Spacing: - Spatiëring: - - - - Spacing between objects - Spatiëring tussen objecten - - - - Schemas per row: - Schemas per rij: - - - + Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types, extensions. - + Automatically resolve dependencies Los afhankelijkheden automatisch op - + Random colors will be assigned to imported relationships facilitating the identification of links between tables mainly in large models. Om de identificatie van de links tussen tabellen in grote modellen makkelijker te maken zullen willekeurige kleuren worden gebruikt om de geïmporteerde relaties aan te duiden. - + Random colors for relationships Willekeurige kleuren voor relaties - + Enables the import of system built-in objects. It's recommend to select only those objects that are directly referenced by the ones to be imported. WARNING: Try to import a huge set of system objects can bloat the resultant model or even crash pgModeler due to memory/cpu overuse. Activeert het importeren van ingebouwde systeemobjecten. Het is aangeraden om enkel objecten te importeren waarnaar onmiddellijk worden gerefereerd. PAS OP: grote hoeveelheden systeemobjecten importeren kan leiden tot een opgezwollen resultaatsmodel of kan zelfs pgModeler tot een crash leiden omwillen van geheugen- of processor-uitputting. - + + + Import database + + + + Import system objects Importeer systeemobjecten - + Enables the import of objects created by extensions. Generally there is no need to check this option but if there are objects in the database that directly references this category of objects this mode must be enabled. Activeert het importeren van objecten die werden aangemaakt door uitbreidingen. Algemeen gezien is er geen nood om deze optie aan te vinken tenzij er objecten in de databse leven die onmiddellijk naar objecten van deze categorie refereren. - + Import extension objects Importeer uitbreidingsobjecten - + pgModeler ignores import errors and will try to create as many as possible objects. By checking this option the import operation will be not aborted but an incomplete model will be constructed. This option generates a log file on pgModeler's temp directory. pgModeler negeert importeerfouten en zal pogen om zoveel mogelijk objecten aan te maken. Door deze optie aan te vinken zal de importeer-taak niet afbreken bij een fout maar zal een onvolledig model worden aangemaakt. Deze optie creëert een log bestand in de tijdelijke map voor pgModeler. - + Ignore import errors Negeer importeerfouten - - Schemas per row - Schemas per rij - - - Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types and extensions. - Los sommige afhankelijkheden van objecten op door de catalogus raad te plegen wanneer een object niet in de geladen set bestaat. In sommige gevallen is het nodig om deze optie met andere opties te combineren. Deze optie is niet van toepassing op database-niveau objecten zoals rollen, tablespaces en talen alsook data types en uitbreidingen. - - - + All catalog queries as well the created objects' source code are printed to standard output (stdout). Alle catalogusqueries plus the broncode van de aangemaakte objecten wordt naar de standaard output (stdout) geprint. - + Debug mode Debugmodus - + Create all imported objects in the current working model instead of create a new one. Maak alle geïmporteerde objecten aan in het huidige model en maak geen nieuw model aan. - + Import objects to the working model Importeer de objecten in het huidige model - + Database Database - + Filter: Filter: - + Filter object by it's OID Filter objecten per hun OID - + By OID Per OID - + Select all objects Selecteer alle objecten - - - - + + + + ... ... - + Clear object selection Maak de objectselectie ongedaan - + Expands all items Alle items uitklappen - + Collapses all items Alle items inklappen - + Output Uitvoer - + Progress label... Vooruitgangslabel... - + Cancel Annuleren - + &Import - + &Close &Sluiten - + <strong>ATTENTION:</strong> You are about to import objects to the current working model! This action will cause irreversible changes to it even in case of critical errors during the process. Do you want to proceed? <strong>OPGEPAST:</strong> U staat op het punt om objecten te importeren in het huidige model! Deze actie zal onherroepbare verandering teweegbrengen, zelfs wanneer kritische problemen opduiken gedurende dit proces. Bent u zeker dat u verder wilt gaan? - + Importing process aborted! Het import proces werd afgebroken! - + Importing process canceled by user! Het import proces werd geannuleerd door de gebruiker! - + Importing process sucessfuly ended! Het import proces werd succesvol beëindigt! - + No databases found Er werd database gevonden - + Found %1 database(s) Er werd(en) %1 database(s) gevonden - + Retrieving objects from database... De objecten worden van de database opgehaald... - + Retrieving cluster level objects... De objecten op cluster-niveau worden opgehaald... - + Retrieving objects of schema `%1'... De objecten uit schema `%1' worden opgehaald... - - Retrieving objects of table `%1'... - De objecten van tabel `%1' worden opgehaald... + + Retrieving objects of `%1' (%2)... + - + This is a PostgreSQL built-in data type and cannot be imported. Dit is een ingebouwd type van PostgreSQL en kan niet worden geïmporteerd. - + This is a pgModeler's built-in object. It will be ignored if checked by user. Dit is een ingebouwd object van pgModeler. Dit object wordt genegeerd indien aangevinkt door de gebruiker. @@ -3590,58 +3580,62 @@ Ref. column(s): %2 Objecten ophalen... `%1' - - - Creating object `%1' (%2)... - Object aanmaken `%1' (%2)... + + Creating object `%1' (%2), oid `%3'... + - - Trying to recreate object `%1' (%2)... - Object `%1' proberen aan te maken (%2)... + + Trying to recreate object `%1' (%2), oid `%3'... + - + + Creating object `%1' (%2)... + Object aanmaken `%1' (%2)... + + + Import failed to recreate some objects in `%1' tries. Het importeren faalde na `%1' pogingen om sommige objecten te her-creëeren. - + Creating permissions for object `%1' (%2)... Machtigingen aanmaken voor object `%1' (%2)... - + Creating columns permissions... Kolommachtigingen aanmaken... - + Updating relationships of `%1' (%2)... Updaten van de relaties voor `%1' (%2)... - + Validating relationships... - + The database import ended but some errors were generated and saved into the log file `%1'. This file will last until pgModeler quit. Het importeren van de database is voltooid maar er werden enkele fouten gegenereerd, deze werden opgeslagen in het log-bestand `%1'. Dit bestand zal worden verwijderd wanneer u pgModeler afsluit. - + Destroying unused detached columns... De vrijstaande kolommen worden verwijderd... - + Assigning sequences to columns... - + Creating table inheritances... Tabel-overervingen worden aangemaakt... @@ -3649,135 +3643,146 @@ Ref. column(s): %2 DatabaseModel - + The demonstration version can create only `%1' instances of each object type! You've reach this limit for the type: `%2' U kan slechts `%1' instancies per object type aanmaken in demonstratie-versies! U heeft deze limiet bereikt voor het type `%2' - + Loading: `%1' (%2) Bezig met laden: `%1' (%2) - - + + Validating relationships... - - Generating %1 of the object `%2' (%3) - Genereren van %1 van het type `%2' (%3) + + Generating %1 code: `%2' (%3) + - + Saving object `%1' (%2) - + Saving metadata of the object `%1' (%2) - + Metadata file successfully saved! - + Process successfully ended but no metadata was saved! - + Creating object `%1' (%2) Object `%1' (%2) wordt aangemaakt. - + Object `%1' (%2) already exists. Ignoring. - + Loading metadata for object `%1' (%2) - + Object `%1' (%2) not found. Ignoring metadata. - + Metadata file successfully loaded! DatabaseWidget - - Form - Venster - Attributes Attributen - + LC_COLLATE: - + LC_CTYPE: - + Template DB: Sjabloon DB: - + Model Author: Modelauteur: - + Encoding: Codering: - + Connections: Verbindingen: - + + Options: + Opties: + + + + Allow connections + + + + + Is template + + + + Default Objects Standaardobjecten - + Tablespace: Tablespace: - + Schema: Schema: - + Collation: Sortering: - + Owner: Eigenaar: @@ -3794,8 +3799,8 @@ Ref. column(s): %2 - - + + Default Standaard @@ -3803,33 +3808,44 @@ Ref. column(s): %2 DomainWidget - Form - Venster + + Attributes + Attributen - + Default Value: Standaardwaarde: - - Constraint - Constraint + + Not null + Niet null + + + + Check constraints + - + + Expression: + Expressie: + + + Name: Naam: - - Not Null: - Not Null: + + Name + Naam - - Check Expr.: - Check Expressie: + + Expression + Expressie @@ -3860,7 +3876,7 @@ Ref. column(s): %2 <html><head/><body><p>pgModeler komt tot stand dankzij <span style=" font-style:italic;">een grote inzet om een kwaliteitsvol product te bezorgen</span>. Dit project heeft een niveau van volwassenheid bereikt die nooit was voorzien. Dit alles is het resultaat van de samenwerken tussen de auteur(s) en de <span style=" font-weight:600;">Open Source gemeenschap</span>. <br/><br/>Dit product heeft nog een lange weg af te leggen; met uw hulp kunnen we deze uitdaging aan en kunnen we nieuwe verbeteringen en toevoegingen aan dit product blijven publiceren bij elke release. Als u vertrouwd op pgMOdeler en denkt dat u kan bijdragen, gelieve dan een donatie te maken aan pgModeler!</p></body></html> - + I want to help! Ik wil helpen! @@ -3873,47 +3889,47 @@ Ref. column(s): %2 Venster - + Column: Kolom: - + Expression: Expressie: - + Collation: Sortering: - + Operator Class: Operator Klasse: - + Operator: Operator: - + Sorting: Sortering: - + Ascending Stijgend - + Descending Afdalend - + Nulls first Nulls eerst @@ -3943,37 +3959,33 @@ Ref. column(s): %2 Nulls eerst - + Collation Sortering - + Operator Operator - + Expression Expressie - + Yes Ja - + No Nee EventTriggerWidget - - Form - Venster - Event: @@ -4009,725 +4021,791 @@ Ref. column(s): %2 - Zero length assignment! - Toewijzing van een waarde met lengte nul! - - - Assignment of a precision greater than the length of the type! Toewijzing van een waarde met grotere precisie dan de toegewezen locatie! - + Assignment of an invalid precision to type time, timestamp or interval. The precision in this case must be equal to or less than 6! Toewijzing van een ongeldige precisie aan het type time, timestamp of interval. De precisie moet in dit geval kleiner dan of gelijk zijn aan 6! - + Assignment of a not allocated column to object `%1' (%2)! Toewijzing van een niet-gealloceerde kolom aan het object `%1' (%2)! - + Reference to a column which index is out of the capacity of the column list! Referentie naar een kolom wiens index buiten de capaciteit van de kolomlijst ligt! - + Assignment of not allocated object! Toewijzing van een niet-gealloceerd object! - + Assignment of a not allocated schema to object `%1' (%2)! Toewijzing van een niet-gealloceerde schema aan het object `%1' (%2)! - + The object `%1' (%2) has inconsistent SQL or XML definition! het object `%1' (%2) heeft een inconsistente SQL of XML definitie! - + The object `%1' (%2) already exists on `%3' (%4)! Het object `%1' (%2) bestaat reeds op `%3' (%4)! - + The object `%1' (%2) cannot be assigned because there is already exists in the container object `%3'! Het object `%1' (%2) kan niet worden toegewezen omdat het reeds bestaat in het container-object `%3'! - + Assigning object of an invalid type! Toewijzing van een object van een ongeldig type! - + Removing an object of an invalid type! Verwijdering van een object van een ongeldig type! - + Obtaining an object of an invalid type! Het verkregen object is van een ongeldig type! - + Assignment of empty name to table return type! Toewijzing van een lege naam aan een tabel-terugkeertype! - + The insertion of the parameter `%1' will not be possible because there is another parameter with same name in the function `%2'! Het toevoegen van parameter `%1' is niet mogelijk omdat de functie `%2' reeds een parameter met deze naam bevat! - + The insertion of the table return type `%1' will not be possible because there is another return type with the same name in the `%2'! Het invoegen van tabel-terugkeertype `%1' is niet mogelijk omdat er reeds een terugkeer-type met deze naam bestaat in `%2'! - + Reference to a parameter which index is out of the parameter list bounds! Een referentie naar een parameter met een index die buiten de limieten ligt van de parameterlijst! - + Reference to an event which does not belongs to trigger! Een referentie naar een event die niet tot de trigger behoort! - + The column `%1' cannot be assigned to the trigger `%2' because they belongs to different parent tables! De kolom `%1' kan niet toegewezen worden aan de trigger `%2' omdat deze tot verschillende ouder-tabellen behoren! - + Assignment of a not allocated function to object `%1' (%2)! Toewijzing van een niet-gealloceerde functie aan het object `%1' (%2)! - + Assignment of a function which return type is different from `%1'! Toewijzing van een functie waarvan het terugkeertype verschilt van `%1'! - + Assignment of a function which parameter count is invalid to the object `%1' (%2)! Toewijzing van een functie waarvan het aantal parameters ongeldig is voor het object `%1' (%2)! - + Assignment of a function which language is invalid! Toewijzing van een functie waarvan de taal ongeldig is! - + Event trigger function must be coded in any language other than SQL! Event triggerfunctie moet geschreven zijn in een taal die verschilt van SQL! - + Assignment of not allocated table to object `%1' (%2)! Toewijzing van een niet-gealloceerde tabel aan object `%1' (%2)! - + Reference to an argument which index is out of argument list bounds! Referentie naar een argument met een index die buiten de limieten ligt van de argumentenlijst! - + Assignment of empty name to an object! Toewijzing van een lege naam aan een object! - + Assignment of a name which contains invalid characters! Toewijzen van een naam die ongeldige karakters bevat! - + Assignment of a name which length exceeds the maximum of 63 characters! Toewijzing van een naam die de maximumlengte van 63 karakters overtreed! - + Assignment of schema object which type is invalid! Toewijzing van een schemaobject wiens type ongeldig is! - + Assignment of tablespace object with invalid type! Toewijzing van een tablespaceobject met een ongeldig type! - + Assignment of tablespace to an invalid object! Toewijzing van een tablespace aan een ongeldig object! - + Assignment of tablespace to a constraint which type is invalid! To belong to a tablespace the constraint must be a primary key or unique! Toewijzing van een tablespace aan een constraint wiens type ongeldig is! Om tot een tablespace te behoren moet een constraint een primary key of een unieke sleutel zijn! - + Assignment of owner object which type is invalid! Toewijzing van een eigenaarsobject wiens type ongeldig is! - + Assignment of owner to an invalid object! Toewijzing van een eigenaar aan een ongeldig object! - + Assignment of appended or prepended SQL to an invalid object! Toewijzing van toegevoegde of voorgevoegde SQL aan een ongeldig object! - + Reference to a function with invalid type! Referentie naar een functie met een ongeldig type! - + Reference to an argument of the operator with invalid type! Referentie naar een argument van de operator met een ongeldig type! - + Reference to an operator with invalid type! Referentie naar een operator met een ongeldig type! - + Assignment of value to an invalid option type on role! Toewijzing van een waarde aan een ongeldig optietype van een rol! - + Reference to an invalid role type! Referentie naar een ongeldig rol-type! - + The insertion of the role `%1' is not possible because this is already being referenced by role `%2'! Het invoegen van de rol `%1' is onmogelijk omdat deze reeds wordt gerefereerd door rol `%2'! - + Reference redundancy detected by having the role `%1' referencing the role `%2'! Referentieredundantie gedetecteerd doordat de rol `%1' refereert naar rol `%2'! - + The role `%1' can not be listed as a member of itself! De rol `%1' kan geen lid zijn van zichzelf! - + Reference to a role which index is out of role list bounds! Referentie naar een rol wiens index buiten de limieten van de rollelijst ligt! - + Insertion of empty command to the rule! Invoeging van een leeg commando aan de regel! - + Reference to a command which index is out of the command list bounds! Referentie naar een commando wiens index buiten de limieten van de commandolijst ligt! - + Is not possible to create a self generalization/copy relationship! The table can not inherit or copy their own attributes! Het is onmodelijk om een zelf-generalisatie/kopieer-relatie aan te maken! De tabel kan niet van zichzelf erven of zijn eigen attributen kopieren! - + Assignment of an object that already belongs to another table! Toewijzing van een object dat reeds aan een andere tabel toehoort! - + Assignment of a schema to the sequence which differs from the schema of the owner table! Toewijzing van een schema aan de sequentie die verschilt van het schema van de eigenaars-tabel! - + Assignment of an invalid value to one of the sequence attributes! Toewijzing van een ongeldige waarde aan een van de sequentie-attributen! - + Assignment of a minimum value to the sequence which is greater than the maximum value! Toewijzing van een minimumwaarde die groter is dan de maximumwaarde van de sequentie! - + Assignment of a start value to the sequence which is extrapolating the range defined by minimum and maximum values! Toewijzing van een startwaarde aan de sequentie die de omvang extrapoleerd als gedefinieerd door de minimum- en maximumwaarden! - + Assignment of a null increment value to the sequence! Toewijzing van een null-vermeerdering aan de sequentie! - + Assignment of null cache value to the sequence! Toewijzing van null-cachewaarden aan de sequentie! - + Assignment of owner table which is not in the same schema as the sequence `%1'! Toewijzing van een eigenaarstabel die zich niet in hetzelfde schema bevindt als de sequentie `%1'! - + Assignment of owner table which does not belong to the same owner of the sequence `%1'! Toewijzing van een eigenaarstabel die niet tot dezelfde eigenaar behoort als de sequentie `%1'! - + Assignment of a nonexistent owner column to the sequence `%1'! Toewijzing van een niet-bestaande eigenaarskolom aan de sequentie `%1'! - + Assignment of an owner column to the sequence `%1' that is not related to any table! Toewijzing van een eigenaarskolom aan de sequentie `%1' die aan geen enkele tabel gerelateerd is! - + Reference to a label which index is out of labels list bounds! Referentie naar een label wiens index buiten de limieten ligt van de label-lijst! - + Allocation of object with invalid type! Allocatie van een object met ongeldig type! - + Assignment of a function with invalid return type to object `%1' (%2)! Toewijzing van een functie met een ongeldige terugkeerwaarde aan object `%1' (%2)! - + Assignment of a function with invalid parameter(s) type(s) to object `%1' (%2)! Toewijzing van een functie met ongeldige parametertype(s) aan object `%1' (%2)! - + Assignment of not allocated language! Toewijzing van een niet-gealloceerde taal! - + Assignment of language object which type is invalid! Toewijzing van een taalobject wiens type ongeldig is! - + Reference to data type with an index outside the capacity of data types list! Referentie naar een datatype met een index die buiten de capaciteit van de datatype lijst ligt! - + Assignment of a null type to object `%1' (%2)! Toewijzing van een null type aan het object `%1' (%2)! - + Assignment of invalid type to the object! Toewijzing van een ongeldig type aan het object! - + Assignment of an empty directory to object `%1' (%2)! Toewijzing van een lege map aan object `%1' (%2)! - + Obtaining types with invalid quantity! Types met ongeldige hoeveelheid verkregen! - + Insertion of item which already exists in the attributes list of the type! Invoegen van een item dat reeds bestaat in de attributenlijst van het type! - + Insertion of invalid item in the attributes list of the type! Invoegen van een ongeldig item in de attributenlijst van het type! - + Insertion of item which already exists in the enumarations list of the type! Invoegen van een item dat reeds bestaat in de enumeratielijst van het type! - + Insertion of invalid item in the enumerations list of the type! Invoegen van een ongeldig item in de enumeratielijst van het type! - + Reference to an attribute which index is out of the attributes list bounds! Referentie naar een attribuut met een index die buiten de limieten van de attributenlijst ligt! - + Reference to an enumeration which index is out of the enumerations list bounds! Referentie naar een enumeratie met een index buiten de limieten van de enumeratielijst! - + Assignment of invalid configuration to the type! Toewijzing van een ongeldige configuratie aan het type! - The data type `%1' can not be assigned because it already exists in the types list of the aggregate function `%2'! - Het datatype `%1' kan niet worden toegewezen omdat het reeds bestaat in de typelijst van de aggregatiefunctie `%2'! + + There is already a relationship between `%1' (%2) and `%3' (%4) in the model! When using relationships of the type generalization, copy and one-to-one there can't be other relationships linked to the pair of tables. + + + + + Unable to load the configuration file `%1'! Please check if file exists in its folder and/or if it is not corrupted! + - + + Invalid syntax in file `%1', line %2, column %3! + + + + + Invalid instruction `%1' on file `%2', line %3, column %4! + + + + + Unknown attribute `%1' in file `%2', line %3, column %4! + + + + + Invalid metacharacter `%1' in file `%2', line %3, column %4! + + + + + Invalid operator `%1' in comparison expression, file `%2', line %3, column %4! + + + + + Attribute `%1' with an undefined value in file `%2', line %3, column %4! + + + + + Attribute `%1' with an invalid name in file `%2', line %3, column %4! + + + + + Could not access the file or directory `%1'! Make sure that it exists or if the user has access permissions on it! + + + + + Could not load file `%1'. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! + + + + + Unsupported PostgreSQL version (%1) detected! Valid versions are between %2 and %3. + + + + + Failed to drop the database `%1' because it is defined as the default database for the connection `%2'! + + + + + The column `%1' must be `NOT NULL' because it composes the primary key of the table `%2'. You need to remove the column from the mentioned contraint in order to disable the `NOT NULL' on it! + + + + + The identity column `%1' has an invalid data type! The data type must be `smallint', `integer' or `bigint'. + + + + + Reference to an invalid affected command in policy `%1'! + + + + + Reference to an invalid special role in policy `%1'! + + + + Assignment of an operator which input type count is invalid to aggregate function! Toewijzing van een operatie wiens inputtypehoeveelheid ongeldig is voor een aggregatiefunctie! - + Assignment of an operator which types of arguments is invalid! Toewijzing van een operator wiens argumententypes ongeldig zijn! - + Assignment of system reserved name to the object `%1' (%2)! Toewijzing van een systeem-gereserveerde naam aan het object `%1' (%2)! - + One function with invalid configuration is been used by the object `%1' (%2)! Een functie met ongeldige configuratie wordt gebruikt door het object `%1' (%2)! - + Assignment of an invalid strategy/support number to an operator class element! Toewijzing van een ongeldig strategy- of supportnummer aan een operatorklasse element! - + Insertion of element which already exists in the element list! Invoegen van een element dat reeds bestaat in de elementenlijst! - + Reference to an element which index is out of element list bounds! Referentie naar een element wiens index buiten de limiet van de elementenlijst valt! - + Reference to an object which index is out of object list bounds! Referentie anar een object wiens index buiten de limiet van de objectenlijst valt! - + Removal of an object not allocated! Verwijdering van een niet-gealloceerd object! - + The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4)! Het object `%1' (%2) kan niet worden verwijderd omdat object `%3' (%4) ernaar verwijst! - + The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4) that belongs to `%5' (%6)! Het object `%1' (%2) kan niet worden verwijderd omdat object `%3' (%4), dat aan `%5' (%6) toehoort, ernaar verwijst! - + Operation with object(s) which type(s) is invalid! Operatie met object(en) van een ongeldig type! - + Reference to object with invalid type! Verwijzing naar een object van een ongeldig type! - + Operation with object not allocated! Operatie op een niet-gealloceerd object! - + The creation of the relationship `%1' between the table `%2' and `%3' can not be done because one does not have a primary key. If the relationship is of the type n-n both tables must have primary keys! Het aanmaken van de relatie `%1' tussen de tabellen `%2' en `%3' kan niet worden voltooid omdat deze geen primary key bevatten. Indien de relatie van het type n-n is, moeten beide tabellen over een primary key beschikken! - + The relationship of the type 1-1 where both tables are mandatory participation is not implemented because it requires fusion between the tables that breaks the modeling done by the user! De relatie van het type 1-1 waar beide tabellen verplicht meespelen is niet geimplementeerd omdat dit een fusie tussen de tabellen vereist die het design van de gebruiker zou breken! - + Assignment of an invalid expression to the object! Toewijzing van een ongeldige expressie aan het object! - + Assignment of a primary key to a table which already has one! Toewijzing van een primary key aan een tabel die reeds over een primary key beschikt! - + Identifier relationship can not be created for a self relationship, relationships of the type n-n, copy or generalization! De identifier-relatie kan niet worden aangemaakt voor een zelf-relatie, relaties van het type n-n, kopie or generalisatie! - + Unable to create a copy relationship because the column `%1' in table `%2' already exists in table `%3'! De kopie-relatie kon niet worden aangemaakt omdat de kolom `%1' in table `%2' reeds bestaat in tabel `%3'! - + Unable to create the generalization relationship because the column `%1' in table `%2' can not be merged with the column `%3' of table `%4' because they have incompatible types! De generalisatierelatie kan niet worden aangemaakt omdat de kolom `%1' in tabel `%2' niet kan worden samengevoegd met kolom `%3' van tabel `%4', deze kolommen hebben incompatibele types! - + Unable to create the generalization relationship because the constraint `%1' in table `%2' can not be merged with the constraint `%3' of table `%4' due to their incompatible composition! De generalisatierelatie kan niet worden aangemaakt omdat de constraint `%1' in tabel `%2' niet kan worden samengevoegd met constraint `%3' van tabel `%4', deze constraints hebben een incompatibele compositie! - + An attribute can not be added to a copy or generalization relationship! Een attribuut kan niet worden toegevoegd aan een kopie of een generalisatierelatie! - + A foreign key can not be added to a relationship because is created automatically when this is connected! Een foreign key kan niet worden toegevoegd aan een relatie omdat deze automatisch wordt aangemaakt wanneer deze wordt verbonden! - + The object `%1' (%2) is referencing the object `%3' (%4) which was not found in the model! Het object `%1' (%2) refereert naar het object `%3' (%4), dit laatste object kon niet worden gevonden in het model! - + Reference to an user-defined data type that not exists in the model! Referentie naar een gebruikersgedefinieerd type dat niet in het model bestaat! - + Assignment of invalid maximum size to operation list! Toewijzing van een ongeldige maximumwaarde aan de operatielijst! - + Unable to write the file or directory `%1'! Make sure the output directory exists, or if the user has write permissions over it! Het bestand of de map `%1' kon niet worden aangemaakt! Zorg ervoor dat de uitvoermap bestaat en dat de gebruiker er schrijfmachtigingen toe heeft! - + Unable to write the file `%1' due to one or more errors in the definition generation process! Het bestand `%1' kan niet worden geschreven omwille van een of meerdere fouten die optraden tijdens het definitie-generatie proces! - There is already a relationship between `%1' (%2) and `%3' (%4) in the model! - Het model bevat reeds een relatie tussen `%1' (%2) en `%3' (%4)! - - - The configuration of the relationship `%1' generates a redundancy between the relationships `%2'. Redundancy on identifier or generalization/copy relationships are not accepted since they result in incorrect column spreading making the model inconsistent! De configuratie van de relatie `%1' creeert een redundantie tussen de relaties `%2'. Redundanties van identifiers of generalisatie/kopie-relaties zijn niet geldig omdat deze kunnen leiden tot het incorrect verspreiden van kolommen en dit kan het model inconsistent maken! - + One or more objects were invalidated and automatically removed because they were referencing table columns which were included through relationships and which no longer exists due to disconnection of relationships or exclusion of such generated columns! Een of meerdere objecten werden als ongeldig gemarkeerd en werde automatisch verwijderd omdat deze naar kolommen refereerden die werden ingesloten door relaties die niet langer bestaan omwille van het ontkoppelen van de relatie of het uitsluiten van zulke gegenereerde kolommen! - + The primary key `%1' can only be allocated if declared within a block of code that defines a table or relationship! Een foreign key `%1' kan niet worden toegevoegd aan een relatie omdat deze automatisch wordt aangemaakt wanneer deze wordt verbonden! - + Reference to an invalid privilege type! Referentie naar een ongeldig machtigingstype! - + Insertion of a role which already exists in the role list of the permission! Invoegen van een rol die reeds in de rollenlijst van de machtiging aanwezig is! - + Assignment of privilege incompatible with the type of object referenced by permission! Toewijzing van een machtiging die niet compatibel is met het type waarnaar wordt verwezen door de machtiging! - + There is already a permission on object `%1' (%2) which has one or more equal roles from those present on permission to be assigned to the object! Er bestaat reeds een machtiging op object `%1' (%2) die een of meerdere zelfde rollen bevat als deze die onderdeel uitmaken van de nieuwe machtiging die aan het object worden toegewezen! - + A permission is referencing the object `%1' (%2) which was not found in the model! Een machtiging refereert naar object `%1' (%2) dat niet in het model kon worden teruggevonden! - + The object `%1' (%2) can not be created because its not being assigned to any schema! Het object `%1' (%2) kan niet worden aangemaakt omdat het niet aan een schema is toegewezen! - + The tablespace `%1' can not be inserted into the model because it points to the same directory as the tablespace `%2'! De tablespace `%1' kan niet worden ingevoegd in het model omdat het naar dezelfde map verwijst als de tablespace `%2'! - + It is not possible to create arrays of domains or sequences (dimension >= 1)! PostgreSQL does not yet implement this feature! Het is niet mogelijk om arrays van domeinen of sequenties (dimensie >= 1) aan te maken! Dit feature is nog niet aanwezig in PostgreSQL! - + The function `%1' can not get a source code as a definition because its language is set to C. Use the attributes symbol and dynamic library instead! De functie `%1' kan geen broncode bevatten als definitie omdat de taal is ingesteld als 'C'. Gebruik het attributensymbool en dynamische bibliotheek in de plaats! - + The function `%1' can have the attributes symbol and dynamic library configured only if the language is set to C. For all other cases you must specify a source code that defines it in the DBMS! De functie `%1' kan enkel symboolattributen en een dynamische bibliotheek configureren waneer de taal is ingesteld als zijnde 'C'. In alle andere gevallen moet u broncode specifieren die de functie definieert in het DBMS! - + The operator `%1' can not be assigned as a comutator of operator `%2' because it has incompatible settings! De operator `%1' kan niet worden toegewezen als comutator van operator `%2' omdat deze incompatibele instellingen heeft! - + The operator `%1' can not be assigned as negator of operator `%2' because it has incompatible settings! De operator `%1' kan niet worden toegewezen als negator van operator `%2' omdat deze incompatibele instellingen heeft! - + The type `%1' can not self refer in the attributes `element' or `copy type' or be used as a data type of an attribute in the configuration of a composite type! Het type `%1' kan geen zelf-referentie bevatten in de attributen 'element' of 'kopie type' noch kan het worden gebruikt als het data type van een attribuut in de configuratie van een composiet-type! - + Assignment of invalid element to type `%1'! Toewijzing van een ongeldig element aan type `%1'! - + Assignment of invalid alignment to type `%1'! Toewijzing van een ongeldig uitlijning aan type `%1'! - + Assignment of invalid name to the table generated from N-N relationship! Een ongeldige naam werd toegewezen aan de tabel gegenereerd op basis van een N-N relatie! - + The relationship `%1' can not make use of the special primary key because it is marked as identifier or it is a self relationship! De relatie `%1' kan geen gebruik maken van de primary key omdat deze is aangeduid als identifier of omdat het een zelfverwijzende relatie is! - + The object `%1' (%2) can not be edited or deleted because it was automatically included through a relationship! If the object is an attribute or constraint the modifications must be done on the relationship editing form. Het object `%1' (%2) kan niet worden bewerkt of verwijderd omdat het automatisch werd ingesloten via een relatie! Indien het object een attribuut of een constraint is moeten de bewerkingen worden uitgevoerd via het Relatie bewerk-venster. - + The object `%1' (%2) can not be deleted because it is protected! Het object `%1' (%2) kan niet worden verwijderd omdat het beschermd is! - + The group `%1' has already been declared earlier! De groep `%1' werd reeds eerder gedeclareerd! - + The group `%1' can not be built in the groups declaration block (%2)! De groep `%1' kan niet worden opgebouwd in de groependeclaratie-block (%2)! - + The group `%1' was built but not declared in the groups declaration block (%2)! De groep `%1' werd opgebouwd maar is niet gedeclareerd in de groependeclaratie-block (%2)! - + The group `%1' can not be built without possessing child elements! De groep `%1' kan niet worden opgebouwd zonder kind-elementen! - + The group `%1' can not be built once more because this was done in previous blocks! De groep `%1' kan niet worden opgebouwd omdat dit reeds werd uitgevoerd in een vorige block! - + The group `%1' has been declared but not built! De groep `%1' werd gedeclareerd maar niet opgebouwd! - + Reference to a column of the objects table with invalid index! Een referentie naar een kolom in de objectentabel met een ongeldige index! - + Reference to a row of the objects table with invalid index! Een referentie naar een rij in de objectentabel met een ongeldige index! - + The object `%1' (%2) can not be manipulated because it is reserved to PostgreSQL! This object is present in the database model only as a reference! Het object `%1' (%2) kan niet worden gemanipuleerd omdat dit een gereserveerd object is in PostgreSQL! Dit object bestaat enkel als referentie in het databasemodel! - + The new configuration of the function invalidates the object `%1' (%2)! In this case it is needed to undo the relationship between the affected object and function in order to the new configuration to take effect! De nieuwe configuratie van de functie maakt het object `%1' (%2) niet langer gevalideerd! Om de nieuwe configuratie in voege te doen treden moet u de relatie tussen het beinvloedde object en de functie ongedaan maken. - + A view reference must be used in at least one these SQL scopes: View Definition, SELECT-FROM, FROM-WHERE or After WHERE! Een viewreferentie moet minstens in een van de volgende SQL scopes worden gebruikt: View Definitie, SELECT-FROM, FROM_WHERE of Na WHERE! - + Constraints like primary key, foreign key or unique must have at least one column related to them! For foreign keys must be selected, in addition, the referenced columns! Constraints zoals primary key, foreign key of unique key moeten minstens een kolom bevatten! Voor foreign keys moeten ook de gerefereerde kolommen worden geselecteerd! - Unable to load one or more configuration files! Please check if files exists in the configuration folder and if they are not corrupted to preventing this error to occur again on the next startup! - Een of meerdere configuratiebestanden kunnen niet worden geladen! Om ervoor te zorgen dat deze fout zich niet voordoet de volgende maal u het programma opstart, gelieve na te kijken of deze bestanden in de configuratie-map bestaan en dat deze niet gecorrupteerd zijn. - - - Could not find the default settings file `%1'! To restore default settings check the existence of the file and try again! Het standaardinstellingsbestand `%1' kon niet worden gevonden. Kijk na of dit bestand bestaat om de standaardinstellingen terug te zetten en probeer opnieuw! - + The export process failed due to an error triggered by the PostgreSQL server in an attempt to execute a SQL command. For more details about the error check the exception stack! ** Executed SQL command: ** @@ -4740,413 +4818,355 @@ Ref. column(s): %2 %1 - + Could not load the plugin `%1' from the library `%2'! Message returned by plugin manager: `%3' De plugin `%1' kon niet worden geladen van de bibliotheek `%2'! De plugin manager antwoordde met: `%3' - + One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details. Een of meerdere plugin werden niet geactiveerd omwille van fouten gedurende het laadproces! Kijk de exception stack na voor meer details. - - - Invalid syntax in file %1, line %2, column %3! - Het bestand %1 bevat ongeldige syntax op lijn %2, kolom %3! - - - - Invalid instruction `%1' on file %2, line %3, column %4! - De instructie `%1' in bestand %2 op lijn %3, kolom %4 is ongeldig! - - - - Unknown attribute `%1' in file %2, line %3, column %4! - De attribuut `%1' in bestand %2 op lijn %3, kolom %4 is ongeldig! - - - - Invalid metacharacter `%1' in file %2, line %3, column %4! - Het metakarakter `%1' in bestand %2 op lijn %3, kolom %4 is ongeldig! - - - - Invalid operator `%1' in comparison expression, file %2, line %3, column %4! - De operator `%1' binnen de vergelijkingsexpressie in bestand %2 op lijn %3, kolom %4 is ongeldig! - - - - Attribute `%1' with an undefined value in file %2, line %3, column %4! - Een attribuut `%1' met een ongedefinieerde waarde in bestand %2 op lijn %3, kolom %4! - - Attribute `%1' with an invalid name in file %2, line %3, column %4! - Een attribuut `%1' met een ongeldige naam in bestand %2 op lijn %3, kolom %4! - - - Assignment of empty XML buffer to parser! Toewijzingen van een lege XML buffer aan de parser! - Could not access the file or directory %1! Make sure that it exists or if the user has access permissions on it! - Het bestand of de map %1 is niet toegankelijk! Zorg ervoor dat het pad bestaat en dat de gebuiker toegangsmachtigingen tot dit pad heeft! - - - Assignment of empty DTD file name! Toewijzing van een lege DTD bestandsnaam! - + Assignment of empty name to the DTD declaration! Toewijzing van een lege naam aan de DTD declaratie! - + Error while interpreting XML buffer at line %1 column %2. Message generated by the parser: %3. %4 Er trad een fout op tijdens het interpreteren van de XML buffer op lijn %1, kolom %2. De parser antwoordde met: %3. %4 - + Operation on unallocated element tree! It is necessary to load the XML parser buffer and interpret it so that the tree is generated! Een operatie werd uitgevoerd op een niet-gealloceerd element in de boomstructuur! De XML parser buffer moet eerst worden geladen en geinterpreteerd zodat deze boomstructuur kan worden gegenereerd! - Could not load file %1. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! - Het bestand %1 kon niet worden geladen. Ditzelfde lijkt inconsistent te zijn of een van zijn dependencies (DTD bestanden) heeft ofwel fouten of ontbreekt! - - - Operation with unallocated tree element! Operatie met een niet-gealloceerd object! - + Operation with element which does not exists in the element tree currently loaded! Er werd een operatie uitgevoerd op een element dat niet bestaat in de huidig geladen elementen-boomstructuur! - + Assignment of a value to an invalid connection parameter! Toewijzing van een waarde aan een ongeldige verbindingsparameter! - + Operation on connection not established! Er werd een operatie uitgevoerd op een niet-verbonden verbinding! - + Attempt to connect without define configuration parameters! Poging tot verbinden zonder dat de configuratieparameters zijn gedefinieerd! - + Attempt to start a connection already stablished! Poging tot het starten van een verbinding die reeds verbonden is! - + Could not connect to the database. Message returned: `%1' Er kon geen verbinding worden gemaakt met de database. Het bericht is: `%1' - + Assignment of not allocated SQL command result! Toewijzing van een niet-gealloceerde SQL commandoresultaat! - + Unable to allocate the result of the SQL command because the response from the DBMS was not understood by the client! Het is niet mogelijk om het resultaat van het SQL commando te allocaren omdat de client het antwoord van de DBMS niet verstond! - + Unable to allocate command result for the SQL because the server has generated a fatal error! Message returned by the DBMS: `%1' Het commandoresultaat voor de SQL code kan niet worden gealloceerd omdat de server een fatale fout genereerde! Het bericht dat terugkwam van de DBMS is: `%1' - + Reference to a column of tuple with invalid index! Referentie naar een kolom van een tuple met een ongeldige index! - + Reference to a column of tuple with invalid name! Referentie naar een kolom van een tuple met een ongeldige naam! - + Reference to a tuple with an invalid index or the result is empty (no tuples)! Referentie naar een tuple met een ongeldige index of het resultaat is leeg (geen tuples)! - + Reference to a column of a tuple which was not yet initialized (tuple navigation not started)! Referentie naar een kolom van een tuple dat nog niet werd geinitializeerd (tuple-navigatie nog niet gestart)! - + Could not execute the SQL command. Message returned: `%1' Het SQL commando kon niet worden uitgevoerd. Het teruggekeerde bericht is: `%1' - + Invalid use of a view reference as whole SQL definition! The assigned reference must be an expression! Ongeldig gebruik van een view-referentie als volledige SQL definitie! De toegewezen referentie moet een expressie zijn! - + Assignment of a second definition expression to the view! Toewijzing van een tweede definitie-expressie aan de view! - + It is not possible mix ordinary references (SELECT-FROM, FROM-WHERE, After WHERE) with references used as view SQL definition! Gewone referenties (SELECT-FROM, FROM-WHERE, Na WHERE) kunnen niet worden gemixt met referenties die gebruikt worden als SQL definitie! - + Assignment of collation object which type is invalid! Toewijzing van een sorteringsobject wiens type ongeldig is! - + At the moment pgModeler does not support the creation of primary keys which some columns were generated by relationship connection. To create primary keys with this feature you can use the field `Identifier' or the tab `Primary key' on relationship editing form! Op dit moment ondersteunt pgModeler de aanmaak van primary keys waarvan sommige kolomen door relatie-verbindingen worden gegenereerd nog niet. Om primary keys met dit feature aan te maken kan u gebruik maken van het veld 'Identifier' of het 'Primary key' tab-blad in het relatie-bewerkingsvenster! - + Collations must be created at least with attributes LC_COLLATE and LC_CTYPE defined! Sorteringsmethodes moeten worden aangemaakt en minstens LC_COLLATE en LC_CTYPE gedefinieerd hebben! - + The object `%1' (%2) cannot reference itself! This operation is not permitted for this kind of object! Het object `%1' (%2) kan niet naar zichzelf verwijzen! Deze operatie is niet toegelaten voor dit type object! - + Only operator families which uses `btree' as indexing method are accepted by operator class elements! Enkel operator-families die gebruik maken van `btree' als indexeringsmethod kunnen worden aanvaard als operatorklasse element! - + Reference to an invalid copy table option! Referentie naar een ongeldige kopie-tabel optie! - + Copy relationship between tables `%1' and `%2' cannot be done because the first one already copies attributes from `%3'! Tables can have only one copy table! De kopie-relatie tussen tabellen `%1' en `%2' kan niet worden aangemaakt omdat de eerste reeds attributen kopieert van `%3'! Tabellen kunnen over slechts een kopie-tabel beschikken! - + The INSTEAD OF mode cannot be used on triggers that belongs to tables! This is available only for view triggers! De INSTEAD OF modus kan niet worden gebruikt voor triggers die aan tabellen toehoren! Dit is enkel beschikbaar voor triggers die aan views toehoren! - + The TRUNCATE event can only be used when the trigger executes for each statement and belongs to a table! Het TRUNCATE event kan enkel worden gebruikt wanneer de trigger uitvoert voor elk statement en aan een tabel toebehoort! - + The INSTEAD OF mode cannot be used on view triggers that executes for each statement! De INSTEAD OF modus kan niet worden gebruikt voor view triggers die voor elk statement worden uitgevoerd! - + Constraint triggers can only be executed on AFTER events and for each row! Constraint triggers kunnen enkel worden uitgevoerd NA events en voor elke rij! - + A view trigger cannot be AFTER/BEFORE when it executes for each row! Een view trigger kan niet AFTER/BEFORE zijn wanneer deze voor elke rij wordt uitgevoerd! - + A trigger cannot make reference to columns when using INSTEAD OF mode and UPDATE event! Een trigger kan niet naar kolommen refereren wanneer deze gebruikt maakt van de INSTEAD OF modus binnen een UPDATE event! - + Assignment of a column which has no parent table to the object `%1' (%2)! Toewijzing van een kolom aan object `%1' (%2) die geen ouder-tabel heeft! - + Only constraint triggers can be deferrable or reference another table! Enkel constraint triggers kunnen uitstelbaar zijn of naar andere tabellen refereren! - + Reference to a function id which is incompatible with the user define type configuration! Een referentie naar een functie id die niet compatibel is met de configuratie van het gebruiker gedefinieerde type! - + The operator class assigned to the object `%1' (%2) must use `btree' as indexing method! De operatorklasse die is toegewezen aan het object `%1' (%2) moet 'btree' als indexeringsmethod gebruiken! - Unsupported PostgreSQL version (%1) detected! Valid versions are: %2 - Er werd een niet-ondersteunde versie van PostgreSQL gedetecteerd (%1)! Geldige versies zijn: %2 - - - The validation process failed due to an error triggered by the validation helper. For more details about the error check the exception stack! Het validatieproces faalde omwille van een fout in de validatie-helper. Kijk voor meer details over de fout de exception stack na! - + The extension `%1' is registered as a data type and cannot have the attribute `handles datatype' modified! De uitbreiding `%1' is geregistreerd als een data type, het 'behandeld data type' attribuut kan niet worden aangepast! - + The fk relationship `%1' cannot be created because the foreign-key that represents it was not created on table `%2'! De fk relatie `%1' kan niet worden aangemaakt omdat de foreign key die deze relatie weergeeft niet werd aangemaakt op tabel `%2'! - + Assignement of an invalid object name pattern to the relationship `%1'! Toewijzijng van een ongeldig objectnaamspatroon aan de relatie `%1'! - + Reference to an invalid object name pattern id on the relationship `%1'! Referentie naar een ongeldige id van objectnaamspatronen voor de relatie `%1'! - + Invalid use of variadic parameter mode! This mode can be used only with an array or "any" data type! - + + The object `%1' (%2), oid `%3', could not be imported due to one or more errors! Check the exception stack for more details. `HINT:' if the object somehow references objects in `pg_catalog' or `information_schema' consider enable the importing of system objects. + + + + It's not possible convert the type of the column `%1' to serial! It must have an `integer' based type and its default value must be a call to `nextval(seq_name::regclass)' function or a sequence object must be directly assigned to the column! - + A parent table of `%1' which OID is `%2' was not found in the set of imported objects! - + The enumeration `%1' can't be assigned to the type `%2' because contains invalid characters! - + The enumeration `%1' can't be assigned to the type `%2' because is too long! - + The connection was idle for too long and was automatically closed! - + The connection was unexpectedly closed by the database server `%1' at port `%2'! - Invalid use of variadic parameter mode! This mode can be used only with array data types! - Ongeldig gebruik van varierende-parametermodus! Deze modus kan enkel worden gebruikt bij array types! - - - + Mixing incompatibles DBMS export modes: `ignore object duplications', `drop database' or `drop objects' cannot be used with `simulate export'! Mixen van niet-compatibele DBMS export-modussen: `negeer object duplicaten', `verwijder database' of `verwijder objecten' kan niet samen worden gebruikt met `simuleer export'! - + Mixing incompatibles DROP options: `drop database' and `drop objects' cannot be used at the same time! Mixen van niet-compatibele DROP opties: `verwijder database' en `verwijder objecten' kunnen niet samen worden gebruikt! - + Invalid object id swapping operation! The objects involved are the same! Ongeldige object id wissel-operatie! De betrokken objecten zijn dezelfde! - + Invalid object id swapping operation! The database itself, tablespaces or roles cannot have the ids swapped! Ongeldige object id wissel-operatie! De database zelf, tablespaces en rollen kunnen geen ids omwisselen! - + The widget already has a parent and cannot be assigned to a different object! Het widget heeft reeds een ouder en kan niet aan een ander object worden toegewezen! - The object `%1' (%2) could not be imported due to one or more errors! Check the exception stack for more details. - Het object `%1' (%2) kon niet worden geïmporteerd omwille van een of meer fouten! Kijk de exception stack na voor meer details. - - - Could not load the database model file `%1'. Check the error stack to see details. Try to run `pgmodeler-cli --fix-model' in order to correct the structure of the file if that is the case. Het datababase modelbestand `%1' kon niet worden geladen. Kijk de foutenstack na voor meer details. Probeer `pgmodeler-cli --fix-model' uit te voeren op het model om de bestandsstructuur te corigeren indien dit nodig zou zijn. - + The column `%1' cannot reference it's parent table `%2' as data type! De kolom `%1' kan niet naar de oudertabel `%2' als data type verwijzen! - + Operation with an invalid element id `%1'! Operatie met een ongeldige olement id `%1'! - + Reference to an invalid color id `%1' for element `%2'! Referentie naar een ongeldige kleuren-id `%1' voor element `%2'! - + Assignment of an invalid object to `%1' (%2)! The assigned object must be of type `%3'. Toewijzing van een ongeldig object aan `%1' (%2)! Het toegewezen object moet van het type `%3' zijn. - + The sequence `%1' can't be assigned to the column `%2' because the data type of the latter is incompatible. The type used must be an integer one! De sequentie `%1' kan niet aan de kolom `%2' worden toegewezen omdat het data type van de kolom niet compatibel is. Het gebruikte type moet een integer type zijn! - + The option to generate temporary object names can only be used in simulation mode! De optie om tijdelijke objectnamen te genereren kan enkel worden gebruikt in simulatie-modus! - It's not possible convert the type of the column `%1' to serial! It must have an `integer' based type and its default value must be a call to `nextval(seq_name::regclass)' function! - Het is niet mogelijk om het type van kolom `%1' naar serial om te vormen! Het type van de kolom moet een `integer'-gebaseerd type zijn en de standaardwaarde moet een aanroep van de `nextval(seq_name::regclass)' functie zijn! - - - + Could not assign the variable `%1' to event trigger's filter. Currently, PostgreSQL supports only the `TAG' variable! De variabele `%1' kon niet worden toegewezen aan de filter van de event trigger! Op dit moment ondersteunt PostgreSQL enkel de `TAG' variabele! - + Could not perform the `%1' operation on `%2' using the data on row `%3'! All changes were rolled back. ** Returned error ** @@ -5159,32 +5179,28 @@ Het bericht dat terugkwam van de DBMS is: `%1' %4 - + Malformed unescaped value on row `%1' column `%2'! Incorrect gevormde un-escape waarde op rij `%1', kolom `%2'! - + Trying to undo/redo an invalid operation over an object that does not exists anymore or can't be handled! The operation history will be cleaned up. Poging tot het ongedaan maken of opnieuw uitvoeren van een ongeldige operatie op een object dat niet langer bestaat of niet kan worden behandeld! De taakgeschiedenis zal worden leeggemaakt. - + The object `%1' (%2) can't be handled because some needed fields are not set! Please, make sure to fill at least the requires fields in order to properly create or update the object. Het object `%1' (%2) kan niet worden behandeld omdat sommige nodige velden niet werden ingesteld! Gelieve de verplichte velden in te voeren om het object correct aan te kunnen maken of passen. - + A relationship can only be swapped by other object of the same kind! De relatie kan enkel worden omgewisseld door een ander object van dezelfde soort! ExtensionWidget - - Form - Venster - Version: @@ -5214,87 +5230,93 @@ Het bericht dat terugkwam van de DBMS is: `%1' Venster - + + Hide this widget + Verberg dit widget + + + + ... + ... + + + Replace one occurrence Vervang één voorkomen - + Replace Vervangen - + Replace all occurrences Vervang alle voorkomens - + Replace All Vervang Allen - + Replace the selection and find the next one Vervang in de selectie en vindt de volgende - + Replace && Find Vervang && Zoek - + Replace: Vervang: - + Find: Zoek: - + Find previous Zoek vorige - + Shift+F3 - + Find next Zoek volgende - + F3 - + Case sensitive Hoofdlettergevoelig - + Regular expression Regular expression - + Whole words Volledig woord - FunctionWidget - - Form - Venster - + FunctionWidget Attributes @@ -5316,90 +5338,82 @@ Het bericht dat terugkwam van de DBMS is: `%1' Aantal rijen - - Langague: - Taal: - - - + Return Method: Terugkeermethode: - + Behavior: Gedrag: - Simple - Simpel - - - + Set Set - Table - Tabel + + Language: + - + Si&mple - + Tab&le - + Return Table Terugkeertabel - + Execution Cost: Uitvoeringskost: - + Windown Func. Windowing Functie - + Leakproof Lekdicht - + Parameters Parameters - + Definition Definitie - + Dynamic Library: Dynamische Bibliotheek - + Symbol: Symbool: - + Library: Bibliotheek: - + Source code: Broncode: @@ -5443,532 +5457,609 @@ Het bericht dat terugkwam van de DBMS is: `%1' Algemeen && Design - + General Algemeen - - The opened models will be saved periodically - De geopende modellen worden periodiek opgeslagen - - - - Autosave interval: - Automatische opslaginterval: - - - + Operation history: Taakgeschiedenis: - - minute(s) - minuten - - - - items - items - - - + Check if there is a new version on server Vink dit aan om na te kijken of een nieuwe versie beschikbaar is op de server - - Check for updates at startup - Zoek naar updates bij het opstarten - - - - pixels - pixels - - - - Grid size: - Rastergrootte: - - - + Design Design - + Graphical objects (table, views and textboxes) will be created in a single step without the need to click on canvas Grafische objecten (tabellen, views en tekstvakken) worden in een enkele stap aangemaakt zonder op het canvas te hoeven klikken - + Simplify creation of graphical objects Should be 'Vereenvoudig de aanmaak van grafische objecten' but that's way too long for the space Versimpel creatie van grafische objecten - + After loading the model the last zoom and position on canvas will be restored Nadat het model geladen is wordt de laatste zoomwaarde en positie op het canvas hersteld - + Save and restore last position and zoom Behoud de laatste positie en zoom - Disable antialiasing for lines and texts improving performance on huge models (requires restart) - Schakel anti-aliassing uit voor lijnen en tekst, dit verbetert de performantie bij grote modellen (vereist opnieuw opstarten van de applicatie) - - - + Disable render smoothness Schakel vlakke rendering uit - + Hide the object that represents the relationship name Verberg het object dat de relatienaam voorstelt - + Hide relationship name Verberg relatienaam - Operations like save, export and diff will be executed without asking user to validate the model - Operaties zoals opslaan, exporteren en diff worden uitgevoerd zonder dat de gebruiker gevraagd wordt om het model te valideren - - - + Validate before save, export or diff Valideer voor opslaan, exporteren of diff - + Hide the object which represents the tag assigned to the table Verberg het tag object dat is toegekend aan de tabel - + Hide table tags Verberg tabel-tags - + Start move the canvas when the cursor is on the canvas edges Verplaatst het canvas wanneer de cursor zich op de rand van het canvas bevindt - + Move canvas by keep mouse on corners Verplaats canvas bij muis in de hoeken - + Hide the portion of table which represent triggers, indexes and rules Verberg het tabel-gedeelte dat triggers, indexes en regels voorstelt - + Hide table extended attributes Verberg uitgebreide attributen - - By default panning mode is triggered with left click and range selection with Shift + left click. - De standaard panning modus wordt geactiveerd met linkermuisknop en een gebied-selectie via Shift+Linkermuisknop. - - - + Disable antialiasing for lines and texts improving performance when handling huge models. - + Triggers a dialog asking the user to validate the model before a save, export or diff operation. - - Swap panning and range selection triggers - Wissel panning- && gebiedsselectietriggers - - - + When enabled this option creates a placeholder object at the previous table's position when starting to move it. This will cause graphical updates on relationship lines to be performed only when the drag & drop action is done improving the performance. Disabling placeholders will cause those updates to be executed every time the table's position changes a single pixel (classical behavior). - + Use placeholders when moving tables - + Toggles the code completion in all fields that accepts the input of SQL commands. Schakelt codevervollediging aan of af in alle velden die SQL commando's aanvaarden. - + + Minimum object opacity (%): + + + + + Defines the minimum opacity percentage applied to the objects when using the fade out feature. A zero opacity causes the object to be completely hidden not being possible to interact with it in the canvas area. + + + + + Canvas grid size: + + + + + Defines the vertical and horizontal grid size. This value affects the spacing of objects when using object grid alignment feature. + + + + + By default the range selection is triggered with Shift + left click. By checking this option range selection will be activated only with a single click and move. + + + + + Trigger range selection with a single click + + + + + Defines the maximum amount of elements held in the operation history. Once reached the maximum number the history is automatically cleaned. + + + + + Defines the period when the opened models will be saved automatically. + + + + + Autosave interval (minutes): + + + + Enable SQL code completion Schakel SQL codevervollediging in - + + Replaces any straight line in relationship by curved ones in order to improve the model's visualization. + + + + + Use curved lines for relationships + + + + + Souce code editor args: + + + + + lines + + + + + Clear the entire SQL comand history. + + + + + Clear history + + + + + Open in file manager + Open in bestandsbeheer + + + + Overrides the default user interface language defined by the system. Requires restarting the program. <strong>NOTE:</strong> UI translations are third party collaborations thus any typo or mistake should be reported directly to their respective maintainers. + + + + + SQL history max. length: + + + + + Check updates at startup + + + + + User interface language: + + + + + Browse the source code editor application + + + + + Souce code editor: + + + + + Configurations directory: + + + + Printing && Code Printen && Code - + Code style Codestijl - + Size: Grootte: - + Font: Lettertype: - + Colors: Kleuren: - - + + Options: Opties: - + Display line numbers Geef lijnnummers weer - + Highlight lines at cursor's position Licht de huidige lijn onder de cursor op - + pt pt - + Custom tab width: - + Printing Printen - + Print grid Print raster - + Print page numbers Print paginanummers - + Paper: Papier: - + A0 (841 x 1189 mm) - + A1 (594 x 841 mm) - + A2 (420 x 594 mm) - + A3 (297 x 420 mm) - + A4 (210 x 297 mm) - + A5 (148 x 210 mm) - + A6 (105 x 148 mm) - + A7 (74 x 105 mm) - + A8 (52 x 74 mm) - + A9 (37 x 52 mm) - + B0 (1030 x 1456 mm) - + B1 (728 x 1030 mm) - + B10 (32 x 45 mm) - + B2 (515 x 728 mm) - + B3 (364 x 515 mm) - + B4 (257 x 364 mm) - + B5 (182 x 257 mm) - + B6 (128 x 182 mm) - + B7 (91 x 128 mm) - + B8 (64 x 91 mm) - + B9 (45 x 64 mm) - + C5E (163 x 229 mm) - + Comm10E (105 x 241 mm) - + DLE (110 x 220 mm) - + Executive (191 x 254 mm) - + Folio (210 x 330 mm) - + Ledger (432 x 279 mm) - + Legal (216 x 356 mm) - + Letter (216 x 279 mm) - + Tabloid (279 x 432 mm) - + Custom Aangepast - + Orientation: Oriëntatie: - + Landscape Landschap - + Portrait Portret - + Unity: Eenheid: - + Custom Size: Aangepaste Grootte: - + Width: Breedte: - + Height: Hoogte: - + Page Margins: Paginamarges: - + Left: Links: - + Left margin Linkermarge - + Top: Kop: - + Top margin Kopmarge - + Right: Rechts: - + Right margin Rechtermarge - + Bottom: Voet: - + Bottom margin Voetmarge - + Milimeters Milimeters - + Pixels Pixels - + Inches Inches - + Centimeter Centimeter - + Line numbers' font color Lettertypekleur van lijnnummers - + Line numbers' background color Achtergrondkleur van lijnnummers - + Highlighted line color Uitlichtkleur - + The little brown fox jumps over the lazy dog The little brown fox jumps over the lazy dog + + + System default + + + + + All files (*.*) + + + + + Load file + + - GraphicalView + GenericSQLWidget - - Connected rels: %1 - Verbonden relaties: %1 + + SQL code + SQL code @@ -5981,10 +6072,6 @@ Het bericht dat terugkwam van de DBMS is: `%1' IndexWidget - - Form - Venster - Attributes @@ -6038,10 +6125,6 @@ Het bericht dat terugkwam van de DBMS is: `%1' LanguageWidget - - Form - Venster - Trusted: @@ -6136,839 +6219,725 @@ Het bericht dat terugkwam van de DBMS is: `%1' Ctrl+F - msg - msg - - - + &File &Bestand - + &Edit &Bewerken - Help - Help - - - + &Show &Weergave - &Plugins - &Plugins - - - + General Algemeen - + Controls Controls - + &Load &Laden - + Sa&ve as - + E&xit - + Exit pgModeler - + &About pgModeler - + &Print - + Print model - + &Undo - + Undo operation - + &Redo - + Redo operation - + &Export &Exporteer - + Ctrl+Shift+E - + &Show grid - + &Close &Sluiten - + &Normal zoom - + &Align to grid - + Show &delimiters - + &Settings - + F12 F12 - + &Overview - + &Support - + Access the support page - + New Nieuw - + &Diff - + + Determine the changes between model/database and another database + + + + Shift+M - + &Bug report - + Objects me&tadata - + Objects metadata - - Ctrl+N - + + Arrange objects + - Save - Opslaan + + Rearrange objects over the canvas + + + + + Ctrl+N + - + Ctrl+S Ctrl+S - + Zoom in Inzoomen - + Ctrl+= Ctrl+= - + Zoom out Uitzoomen - + Zoom - Zoom - - + He&lp - + Pl&ugins - + &New - + New model Nieuw model - + &Save Op&slaan - + &Zoom in - + Zoo&m out - + Ctrl+- Ctrl+- - Load - Laden - - - + Ctrl+O Ctrl+O - Save as - Opslaan als - - - Exit - Afsluiten - - - + Ctrl+Q Ctrl+Q - About pgModeler - Over pgModeler - - - + F4 F4 - Print - Printen - - - + Ctrl+P Ctrl+P - Undo - Ongedaan maken - - - + Ctrl+Z Ctrl+Z - Redo - Opnieuw doen - - - + Ctrl+Y Ctrl+Y - Export - Exporteer - - - + Export the current opened model in different modes Exporteer het huidig geopende model in verschillende modussen - + &Recent Models - + &Import - + Rest&ore Session - + &Fix a model - + &Check for update - + Ctrl+Shift+S Ctrl+Shift+S - + Show grid Raster tonen - + Ctrl+G Ctrl+G - Close - Sluiten - - - + Close current model Sluit dit model - + Ctrl+W Ctrl+W - Normal zoom - Normale zoom - - - + Ctrl+0 Ctrl+0 - Align to grid - Uitlijnen op raster - - - + Align objects position to grid Lijn objecten uit op het raster - + Ctrl+H Ctrl+H - Show delimiters - Delimiters tonen - - - + Show the page delimiters Toon pagina-delimiters - + Ctrl+L Ctrl+L - Settings - Instellingen - - - + Edit pgModeler settings Bewerk de pgModeler instellingen - + Save all Alles opslaan - Overview - Overzicht - - - + Show the model overview Toon modeloverzicht - + F10 F10 - Wiki - Wiki - - - Access the wiki pages - Ga naar de wiki paginas - - - + F1 F1 - + New object - + Plugins Plugins - + Access the list of loaded plugins Bekijk de lijst van geladen plugins - Recent Models - Recente Modellen - - - + Load recently opened model Laad recent geopend model - Import - Importeren - - - + Import existing database to new model (reverse engineering) Importeert een bestaande database in een nieuw model (Reverse Engineering) - + Ctrl+Shift+I Ctrl+Shift+I - Restore Session - Sessie Herstellen - - - Fix a model - Corrigeer een model - - - + New version found! Er is een nieuwe versie beschikbaar! - + Update for the current version is available on project's site Er is een update beschikbaar voor de huidige versie op de website van het project - Check for update - Zoek naar updates - - - + action_main_menu - + Main menu Hoofdmenu - + Show expanded Toon uitgeklapt - + Expands the main menu bar in classical mode Klapt het hoofdmenu uit in klassieke modus - + Hide main menu Verberg hoofdmenu - + Hides the main menu bar and put the action on a separated action This looks like something that could use revisiting (the original EN text that is) Verbergt de hoofdmenu en verplaats de actie naar een afgescheiden actie - + Ctrl+Shift+H Ctrl+Shift+H - Diff - Diff - - - - Determine the changes between model and database - Bepaal de verschillen tussen het model en een database - - - + Ctrl+Shift+D - + Welcome Welkom - + Welcome screen Welkomstscherm - + Shift+W - + Design Design - + Design database models Design databasemodellen - + Shift+D - + Manage Beheer - + Manage existent databases Beheer bestaande databases - Bug report - Bug rapport - - - + Report a bug Rapporteer een bug - + Donate Doneer - + Help pgModeler by donating! Help pgModeler via donering! - + (Demo) (Demo) - - Save all models - Sla alle modellen op - - - Some models were modified! Do you really want to quit pgModeler without save them? - Sommige modellen werden aangepast! Bent u er zeker van dat u pgModeler wilt sluiten zonder deze op te slaan? - Saving temp. models Tijdelijke modellen opslaan - + Clear Menu Menu leegmaken - + The demonstration version can create only `one' instance of database model! De demonstratieversie kan slechts één databasemodel instantie aanmaken! - - + + Save model Model opslaan - The model was modified! Do you really want to close without save it? - Het model werd aangepast! Bent u er zeker van dat u het wilt sluiten zonder het op te slaan? + + Grid + + + + + Hierarchical + - + + Scattered + + + + Save modified model(s) - + The following models were modified but not saved: %1. Do you really want to quit pgModeler? - + The model <strong>%1</strong> was modified! Do you really want to close without save it? - - + + Warning Opgepast - + You're running a demonstration version! The model saving feature is available only in the full version! Dit is een demonstratie-versie! Het opslaan van modellen is enkel beschikbaar in de volledige versie! - - - + + + Confirmation Bevestiging - + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! It's recommended to validate it before save in order to create a consistent model otherwise the generated file will be broken demanding manual fixes to be loadable again! <strong>PAS OP: </strong> Het model <strong>%1</strong> is niet gevalideerd! Het is aangeraden om het model te valideren vooraleer dit op te slaan om ervoor te zorgen dat u een consistent model behoudt, anders is het modelijk dat het gegenereerde bestand onvolledig is en manuele correcties zal vereissen om het opnieuw te kunnen laden! - + Save anyway Toch opslaan - - - + + + Validate Valideer - + Save '%1' as... Sla '%1' op als... - - + + Database model (*.dbm);;All files (*.*) Database model (*.dbm);;Alle bestanden (*.*) - + Access support page - + You're running a demonstration version! Note that you'll be able to create only <strong>%1</strong> instances of each type of object and some key features will be disabled or limited!<br/><br/>You can purchase a full binary copy or get the source code at <a href='http://pgmodeler.com.br'>pgmodeler.com.br</a>. <strong>NOTE:</strong> pgModeler is an open source software, but purchasing binary copies or providing some donations will support the project and cover all development costs.<br/><br/> <strong>HINT:</strong> in order to test all features it's recommended to use the <strong>demo.dbm</strong> model located in </strong>Sample models</strong> at <strong>Welcome</strong> view.<br/><br/><br/><br/> - You're running a demonstration version! The model export feature can be tested twice per pgModeler execution! - Dit is een demonstratie-versie. De model-export functionaliteit kan slechts twee maal per pgModeler uitvoering worden getest! + + Rearrange objects over the canvas is an irreversible operation! Would like to proceed? + - + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! Before run the export process it's recommended to validate in order to correctly create the objects on database server! <strong>PAS OP:</strong> Het model <strong>%1</strong> is niet gevalideerd! Vooraleer u het export proces start is het aangeraden om de validatie uit te voeren. Dit zorgt ervoor dat de objecten correct op de database server kunnen worden aangemaakt! - + Export anyway Toch exporteren - You're running a demonstration version! The database import (reverse engineering) feature is available only in the full version! - Dit is een demonstratie-versie! De database-import functie (reverse engineering) is enkel beschikbaar in de volledige versie! - - - You're running a demonstration version! The model-database diff feature is available only in the full version! - Dit is een demonstratie-versie! De databasemodel diff functie is enkel beschikbaar in de volledige versie! - - - + <strong>WARNING:</strong> The model <strong>%1</strong> is invalidated! Before run the diff process it's recommended to validate in order to correctly analyze and generate the difference between the model and a database! <strong>PAS OP:</strong> Het model <strong>%1</strong> is niet gevalideerd! Het is aangeradem om het model te valideren vooraleer u het diff process start. Dit zorgt voor een correcte analyse en het correct genereren van de diff tussen het model en de database! - + Diff anyway Voer diff toch uit - + Database model printing Databasemodel printen - + Changes were detected in the definitions of paper/margin of the model which may cause the incorrect print of the objects. Do you want to continue printing using the new settings? To use the default settings click 'No' or 'Cancel' to abort printing. Er werden veranderingen gedetecteerd tussen de papier- en margedefinities van het model die ertoe kunnen leiden dat de objectenn foutief worden geprint. Wenst u te printen met deze nieuwe instellingen? Om de standaardinstellingen te gebruiken, klik op 'Nee' of klik 'Annuleren' om het printen af te breken. - + Load model Laad model - + Could not load the database model file `%1'. Check the error stack to see details. You can try to fix it in order to make it loadable again. Het database modelbestand `%1' kon niet worden geladen. Kijk de error stack na voor details. U kan proberen het probleem te corrigeren om het bestand weer laadbaar te maken. - + Fix model Corrigeer model - + Cancel Annuleren - Open Wiki pages - Open Wiki paginas - - - + This action will open a web browser window! Want to proceed? Deze actie opent een browservenster! Wilt u verdergaan? - + (no samples found) (geen voorbeelden gevonden) - You're running a demonstration version! Note that you'll be able to create only <strong>%1</strong> instances of each type of object and some key features will be disabled!<br/><br/>You can purchase a full binary copy or get the source code at <a href='http://pgmodeler.com.br'>pgmodeler.com.br</a>. <strong>NOTE:</strong> pgModeler is an open source software, but purchasing binary copies or providing some donations will support the project and cover all development costs.<br/><br/><br/><br/> - Dit is een demonstratieversie! Houdt er rekening mee dat u slechts <strong>%1</strong> instantie van elk type object aan zal kunnen maken en dat sommige features uitgeschakeld zijn!<br/><br/>U kan de volledige versie aankopen of de broncode raadplegen via <a href='http://pgmodeler.com.br'>pgmodeler.com.br</a>. <strong>LET OP:</strong> pgModeler is open source software maar volledige versies aakopen of doneren aan het project ondersteunen het project en de ontwikkelingskosten hiervan.<br/><br/><br/><br/> - - - The execution of demonstration version has finished! Did you like pgModeler and want to purchase it? Use the following promocodes and receive good discounts:<br/><br/> <strong>D3M02BR0NZ3</strong> (Discount on bronze package)<br/> <strong>D3M02S1LV3R</strong> (Discount on silver package)<br/> <strong>D3M02G0LD</strong> (Discount on gold package)<br/> <strong>D3M02PL4T1NUM</strong> (Discount on platinum package)<br/> <strong>D3M02D14M0ND</strong> (Discount on diamond package)<br/> <br/>Thank you for testing pgModeler! - De uitvoer van de demonstratieversie is voltooid! Vindt u pgModeler een goed product en wenst u het aan te schaffen? Gebruik de volgende promocodes en krijg een aangename korting:<br/><br/> <strong>D3M02BR0NZ3</strong> (Korting voor brons-pakket)<br/> <strong>D3M02S1LV3R</strong> (Korting voor zilver pakket)<br/> <strong>D3M02G0LD</strong> (Korting voor gouden pakket)<br/> <strong>D3M02PL4T1NUM</strong> (Korting voor platinum pakket)<br/> <strong>D3M02D14M0ND</strong> (Korting voor diamanten pakket)<br/> <br/>Hartelijk dank om pgModeler te testen! - - - + save opslaan - + export exporteer - + diff diff - + Executing pending <strong>%1</strong> operation... De uitvoer wacht op <strong>%1</strong> taak... @@ -6981,74 +6950,74 @@ Het bericht dat terugkwam van de DBMS is: `%1' Dialoogvenster - + msg - + Exceptions Uitzonderingen - + Show raw text errors or information. Toon technische error-tekst en -informatie. - + Show/hide exceptions stack. Toon/verberg uitzonderingsstack. - + ... - - + + &Yes &Ja - - + + &No &Nee - + Cancel Annuleren - + &Ok &OK - + &Cancel &Annuleren - + Error Fout - + Alert Waarschuwing - + Information Informatie - + Confirmation Bevestiging @@ -7096,592 +7065,667 @@ Het bericht dat terugkwam van de DBMS is: `%1' Opties - + Handles the following database model attributes in the metadata file: author, zoom factor, last position and default objects. - + Database model metadata - + Handles the objects' positioning in the metadata file. - + Objects' positioning - + Handles the objects' custom colors in the metadata file. Currently available only for relationships and schemas. - + Custom object's colors - - Handles the objects' protection status in the metadata file. + + Handles the objects' protection status in the metadata file. + + + + + Objects' protection status + + + + + Handles the objects' SQL disabled status in the metadata file. + + + + + Objects' SQL disabled status + + + + + Handles the objects' fade out status in the metadata file. - - Objects' protection status + + Objects' fade out status - - Handles the objects' SQL disabled status in the metadata file. + + Save tags to the output file when extracting metadata. When loading the file, the tags are recreated and duplicated ones are ignored. - - Objects' SQL disabled status + + Save textboxes to the output file when extracting metadata. When loading the file, the textboxes are recreated and duplicated ones are ignored. - + Handles the objects' custom SQL commands in the metadata file. - + Custom SQL commands - - Save textboxes to the output file when extracting metadata. When loading the file textboxes are recreated and duplicated ones are ignored. + + Textbox objects - Textbox objects + Tag objects - - Save tags to the output file when extracting metadata. When loading the file tags are recreated and duplicated ones are ignored. + + Handles the tables' and views' extended attributes display status in the metadata file. - - Tag objects + + Tables' extended attributes display + + + + + Save generic SQL objects to the output file when extracting metadata. When loading the file, the objects are recreated and duplicated ones are ignored. + + + + + Generic SQL objects - + Backup file: - - + + Select file - + ... ... - - Apply to: + + Extracts the objects' metadata from the loaded models and apply to the current focused model. A backup file can be specified to where the focused model's current metadata will be saved. - - Operation: + + &Extract and restore + + + + + Extracts the objects metadata from one of the loaded models saving the info to a backup file. + + + + + Extract &only - - Extracts the objects metadata from one of the loaded models and apply to the current model. + + Reads the objects' metadata from a previously saved backup file and apply to the current model. - - Extract from a &model + + &Restore a backup file - - Reads the objects metadata from a previously saved backup file and apply to the current model. + + Apply to: - - Restore a bac&kup file + + Operation: - + Output Uitvoer - + Progress label... Vooruitgangslabel... - - + + model not saved yet - + The backup file cannot be the same as the input model! - + Extracting metadata to file `%1' - + Saving backup metadata to file `%1' - + Applying metadata from file `%1' - + Metadata processing aborted! - + Objects metadata file (*.omf);;All files (*.*) ModelDatabaseDiffForm - - - Database model diff - Databasemodel verschillen - - - - Generate diff from model - Genereer een diff op basis van het model - Settings Instellingen - - Input database - Invoerdatabase - - - + + Connection: Verbinding: - + + + Database: Database: - - Options - Opties - - - Ignores as many as possible errors on import step. This option generates a incomplete diff. - Negeer zoveel mogelijk fouten gedurende de invoer-stap. Deze optie genereerd een onvolledige diff. - - - + Ignore import errors Negeer importeerfouten - Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production server and always make a backup before use this options. - Maak de data van alle tabellen waarvan kolommen werden aangepast leeg. Dit kan nuttig zijn om fouten te vermijden die worden veroorzaakt door type-casting. <strong>PAS OP</strong> gebruik deze optie NIET op een productie-server en maak altijd een backup vooraleer deze opties te gebruiken. - - - - Trucate tables before alter columns - Trunceer de tabellen vooraleer de kolommen aan te passen - - - Import system (built in) objects. Use this if the import step is returning errors. - Importeer systeem- /ingebouwde objecten. Gebruik deze optie indien de importeer-stap fouten genereert. - - - + Import system objects Importeer systeemobjecten - Import extension objects. Use this if the import step is returning errors even importing built in ones. - Importeer uitbreidingsobjecten. Gebruik deze optie indien de importeer-stap fouten genereert. - - - + Import extension objects Importeer uitbreidingsobjecten - + For DROP command, the objects that depends on an object to be dropped will be deleted as well. For TRUNCATE command, tables that are linked to a table to be truncated will be truncate too. <strong>NOTE:</strong> this option can affect more objects than listed in the output or diff preview. Voor DROP commando's worden objecten die afhankelijk zijn van het object dat verwijderd wordt, ook verwijderd. Voor het TRUNCATE commando worden tabellen die gelinkt zijn aan de te trunceren tabel ook getrunceerd. <strong>LET OP:</strong> deze optie kan objecten beïnvloeden die niet in het uitvoer- of diff-voorbeeld opgenomen zijn. - + Drop or truncate in cascade mode Drop of trunceer in cascade modus - + Permissions already set on database objects will be kept.The ones configured on the model will be applied to the database. Machtigingen die reeds op databaseobjecten zijn toegepast zullen behouden blijven. De machtigingen die door het model worden gespecifieerd zullen worden toegepast op de database. - + Keep object's permissions Behoudt de machtigingen van het object - + Database cluster level objects like roles and tablespaces will not be dropped. Database cluster-niveau objecten zoals rollen en tablespaces zullen niet worden verwijderd. - + Keep cluster objects Behoudt clusterobjecten - + Recreate only unmodifiable objects Hercreeer enkel niet-aanpasbare objecten - Instead of use an ALTER command to modify certain kind of objects a DROP and CREATE will be used in order to do a full modification. This option does not affects database objects. - In plaats van een ALTER commando om een bepaald soort object aan te passen, wordt eerst een DROP en dan een CREATE gebruikt. Deze optie beïnvloedt geen database objecten. - - - + Force recreation of objects Forceer het heraanmaken van objecten - + Ignores errors generated by duplicated objects when exporting the diff to database. Negeer fouten die worden gegenereerd door duplicate objecten gedurende het exporteren van de diff naar de database. - + Ignore duplicity errors Negeer fouten omwille van duplicaten - + Serial columns are converted to integer and having the default value changed to <strong>nextval(sequence)</strong> function call. By default, a new sequence is created for each serial column but checking this option sequences matching the name on column's default value will be reused and will not be dropped. Seriële kolommen worden geconverteerd naar integers en hun standaardwaarde wordt ingesteld als een functieaanroep naar <strong>nextval(sequentie)</strong>. Normaal gezien wordt een nieuwe sequentie aangemaakt voor elke seriële kolom maar deze optie aanvinken zorgt ervoor dat sequenties die de naam van de kolom gebruiken worden hergebruikt in plaats van verwijderd. - + Reuse sequences on serial columns Hergebruik sequenties op seriële kolommen - + No command to rename the destination database will be generated even the model's name differ from database name. Behoudt de naam van de doeldatabase wanneer deze verschilt van de databasenaam in het model. - + Preserve database name Behoudt databasenaam - + Diff mode Diff modus - + Override the PostgreSQL version when generating the diff. The default is to use the same version as the input database. Zet de versie waarvoor de diff wordt gegenereerd expliciet zelf. Standaard wordt dezelfde versie gebruikt als de invoerdatabase. - + Use PostgreSQL: Gebruikt PostgreSQL: - + Compares the model and the input database storing the diff in a SQL file for later usage. Vergelijkt het model en de invoerdatabase en slaat het verschil op in een SQL bestand voor later gebruik. - Store in SQL file - Sla op in SQL bestand - - - + File: Bestand: - + Select output file Selecteer uitvoerbestand - + ... ... - + Compares the model and the input database generating a diff and applying it directly to the latter. <strong>WARNING:</strong> this mode causes irreversible changes on the database and in case of failure the original structure is not restored, so make sure to have a backup before proceed. Vergelijkt het model met de invoerdatabase en genereerd een diff die op die laatste wordt toegepast. <strong>PAS OP:</strong> deze modus veroorzaakt onherroepelijke veranderingen in de database en in geval van falen wordt de originele structuur niet hersteld, zorg ervoor dat u een backup hebt vooraleer u verdergaat. - Apply on server - Toepassen op de server - - - + Ignores as many as possible errors on import step. This option generates an incomplete diff. - + Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production servers and always make a backup before use it. - + Import system (built-in) objects. Use this if the import step is returning errors related to missing objects. - + Import objects created by extensions. Use this if the import step is returning errors even importing built in ones. - + Instead of use an ALTER command to modify certain kind of objects a DROP and CREATE will be used in order to do a full modification. This option does not affects the database object. - + Avoid the generation of DROP commands for objects that exists in database but not in the model. This is useful when diff a partial model against the complete database. - + Do not drop missing objects - + Store in S&QL file - + + Diff tool + + + + + Generate diff code + + + + + Source database + + + + + Current model: + + + + + (model) + + + + + Compare to + + + + Appl&y on server - + + Diff + Diff + + + + Froce the generation of DROP commands for columns and constraints that exist in database but not in the model. This is useful when diff a partial model against the complete database and the user needs to drop columns and constraint but preserve the rest of the objects. + + + + + Drop missing columns and constraints + + + + + Truncate tables before alter columns + + + + + Import && Export + + + + + Import + Importeren + + + + Export + Exporteer + + + + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + + + + + Ignore error codes + + + + Output Uitvoer - + Changes: Aanpassingen: - + Cancel Annuleren - + Progress label... Vooruitgangslabel... - + Step label... Staplabel... - + <html><head/><body><p>Objects marked with an <span style=" font-weight:600;">ALTER</span> may not be effectively changed unless that the differences detected are in attributes that can be modified through ALTER commands otherwise no operationwill be performed or, if the force recreation is checked, the object will be dropped and created again.</p></body></html> <html><head/><body><p>Objecten die zijn aangeduid met <span style=" font-weight:600;">ALTER</span> kunnen mogelijkerwijs niet worden aangepast tenzij de gedetecteerde verschillen in de attribute liggen die kunnen worden aangepast via een ALTER commando; in alle andere gevallen zal geen actie worden ondernomen of, indien 'Forceer het heraanmaken van objecten' is aangevinkt, zal het object worden verwijderd en heraangemaakt.</p></body></html> - + Objects to be created Objecten die aangemaakt moeten worden - - - - + + + + 0 0 - + Objects to be dropped Objecten die verwijderd moeten worden - + Possible objects to be changed Objecten die mogelijkerwijs aangepast moeten worden - + Ignored objects (system ones or with sql disabled) Genegeerde objecten (systeemobjecten of objecten waarvan SQL is uitgeschakeld) - + Diff Preview Diff voorbeeld - + &Apply diff Diff &Toepassen - + &Generate &Genereer - + &Close &Sluiten - - + + Waiting process to start... Wachten op het starten van de taak... - - Importing database <strong>%1</strong>... - Bezig met het importeren van database <strong>%1</strong>... - - - - Comparing the model <strong>%1</strong> and database <strong>%2</strong>... - Bezig met het vergelijken van model <strong>%1</strong> en database <strong>%2</strong>... - - - + Confirmation Bevestiging - + <strong>WARNING:</strong> The generated diff is ready to be exported! Once started this process will cause irreversible changes on the database. Do you really want to proceed? <strong>PAS OP:</strong> De gegenereerde diff is klaar om geëxporteerd te worden! Eens gestart zal dit proces onherroepelijke veranderingen aanbrengen aan de database. Bent u zeker dat u wilt verdergaan? - + Apply diff Diff toepassen - + Preview diff Diff belijken - - Exporting diff to database <strong>%1</strong>... - Diff exporteren naar database <strong>%1</strong>... + + model not saved yet + + + + + (none) + + + + + Step %1/%2: Importing database <strong>%3</strong>... + + + + + Step %1/%2: Comparing <strong>%3</strong> and <strong>%4</strong>... + + + + + Step %1/%2: Exporting diff to database <strong>%3</strong>... + - + Diff process paused. Waiting user action... Het diff proces is gepauzeerd. Wachten op een actie van de gebruiker... - + Saving diff to file <strong>%1</strong> De diff wordt opgeslagen in het bestand <strong>%1</strong> - + Diff process sucessfully ended! Het diff proces werd succesvol beëindigd! - - + + No operations left. Er zijn geen operaties meer. - + Operation cancelled by the user. De operatie werd geannulleerd door de gebruiker. - + Process aborted due to errors! Het proces werd afgebroken omwille van fouten! - + -- SQL code purposely truncated at this point in demo version! - + -- No differences were detected between model and database. -- -- Er werden geen verschillen gedetecteerd tussen het model en de database. -- - + Error code <strong>%1</strong> found and ignored. Proceeding with export. Foutencode <strong>%1</strong> trad op en werd genegeerd. De export gaat voort. - + Save diff as... Sla diff op als... - + SQL code (*.sql);;All files (*.*) SQL Code (*.sql);;Alle bestanden (*.*) @@ -7690,10 +7734,6 @@ Het bericht dat terugkwam van de DBMS is: `%1' ModelExportForm - Model Export - Modelexport - - Export model Exporteer model @@ -7704,227 +7744,217 @@ Het bericht dat terugkwam van de DBMS is: `%1' Instellingen - + Database server Database server - + pgModeler ignores errors generated by duplicated objects and creates only that ones which does not exists in the database. This option may be used when an object was created after a previous model export. pgModeler negeert fouten die worden gegenereerd door duplicate objecten en creëert objecten die nog niet in de database bestaan. Deze optie kan worden gebruikt wanneer een object werd gecreëerd door een eerdere model export. - + Ignore object duplicity Negeer object-duplicaten - + Connection: Verbinding: - + PostgreSQL version in which the SQL code should be generated. It is recommended to select this option only when the version of the DBMS, somehow, is not identifiable or if you need to generate a specific version of SQL code for test purposes. De PostgreSQL versie waarvoor SQL code moet worden gegenereerd. Het is aangeraden om deze optie enkel in te stellen wanneer de versie niet automatisch kan worden bepaald of wanneer u een specifieke versie nodig hebt voor bijvoorbeeld test-doeleinden. - - + + PostgreSQL: PostgreSQL: - + + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + + + + + Ignore error codes + + + + If <strong>DB</strong> is checked pgModeler will destroy the database if already exists on the server. When <strong>Objects</strong> is checked pgModeler will execute the DROP command attached to SQL-enabled objects. <strong>WARNING:</strong> this option leads to data loss so make sure to have a backup first. Indien <strong>DB</strong> aangevinkt is, zal pgModeler de database verwijderen indien deze reeds in de server bestaat. Indien <strong>Objecten</string> is aangevinkt zal pgModeler DROP commando's toevoegen aan de objecten waarvoor SQL is ingeschakeld. <strong>PAS OP:</strong> deze optie kan tot dataverlies leiden, zorg ervoor dat u een recente backup kan terugplaatsen. - + Drop: Verwijder: - + DB DB - Objects - Objecten - - - + pgModeler will destroy the database if already exists on the server. Make sure to have a backup before use this option because all data will be lost. pgModeler zal de database verwijderen indien deze reeds in de server aanwezig is. Zorg ervoor dat u een recente backup kan terugplaatsen indien nodig want alle data zal verloren gaan. - PNG Image - PNG Afbeelding - - - + Zoom: Zoom: - + Show grid Raster tonen - + Show delimiters Delimiters tonen - + Exporting the model page by page will generate files with a <strong>_p[n]</strong> suffix where <strong>n</strong> is the page id. Check if the current user has write permission on output folder. Het model pagina per pagina exportern genereert bestanden met de suffix <strong>_p[n]</strong> waarbij <strong>n</strong> de pagina id is. Zorg ervoor dat de huidige gebruiker schrijf-machtiging heeft in de uitvoermap. - + Page by page Pagina per pagina - - + + Select target file Selecteer doelbestand - - + + ... ... - Image: - Afbeelding: - - - + SQL file SQL bestand - - + + File: Bestand: - + Ob&jects - + Graphics file - - Image (PNG) - - - - + Type: Type: - - Vectorial (SVG) + + PostgreSQL version in which the SQL code should be generated + De PostgreSQL versie waarvoor SQL code moet worden gegenereerd + + + + I&mage (PNG) - - PostgreSQL version in which the SQL code should be generated - De PostgreSQL versie waarvoor SQL code moet worden gegenereerd + + &Vectorial (SVG) + - + Output Uitvoer - + Cancel Annuleren - + Progress label... Vooruitgangslabel... - + &Export &Exporteer - + &Close &Sluiten - + Error code <strong>%1</strong> found and ignored. Proceeding with export. Foutencode <strong>%1</strong> trad op en werd genegeerd. De export gaat voort. - + Initializing model export... Model export wordt geïnitialiseerd... - + Saving file '%1' Bestand `%1' wordt opgeslagen - - + + Exporting process aborted! Het export proces werd afgebroken! - + Export model as... Exporteer model als... - + SQL script (*.sql);;All files (*.*) - + Portable Network Graphics (*.png);;All files (*.*) - + Scalable Vector Graphics (*.svg);;All files (*.*) - SQL code (*.sql);;All files (*.*) - SQL Code (*.sql);;Alle bestanden (*.*) - - - PNG image (*.png);;All files (*.*) - PNG Afbeelding (*.png);;Alle bestanden (*.*) - - - + Exporting process canceled by user! Het export proces werd geannuleerd door de gebruiker! - + Exporting process sucessfuly ended! Het export proces werd succesvol beëindigt! @@ -7932,156 +7962,140 @@ Het bericht dat terugkwam van de DBMS is: `%1' ModelExportHelper - + Generating SQL code for PostgreSQL `%1' Bezig met het genereren van SQL code voor PostgreSQL `%1' - + Output SQL file `%1' successfully written. Het uitvoer-SQL bestand `%1' werd succesvol opgeslagen. - + Rendering objects to page %1/%2. Objecten worden gerendered naar pagina %1/%2. - + Output image `%1' successfully written. Uitvoerafbeelding `%1' werd succesvol opgeslagen. - + Exporting model to SVG file. - + SVG representation of database model - + SVG file generated by pgModeler - + Output file `%1' successfully written. - + Starting export to DBMS. De export naar het DBMS begint. - + PostgreSQL version detection overridden. Using version `%1'. PostgreSQL versie-detectie werd overschreven. Versie `%1' wordt gebruikt. - + PostgreSQL `%1' server detected. PostgreSQL `%1' server ontdekt. - + Generating temporary names for database, roles and tablespaces. De tijdelijke namen voor de database, rollen en tablespaces worden gegenereerd. - + Enabling the SQL code for database `%1' to avoid errors. SQL code voor de database `%1' wordt geactiveerd om fouten te vermijden. - + Ignoring object duplication errors. Duplicaten-fouten worden genegeerd. - + Ignoring the following error code(s): `%1'. De volgende foutencode(s) worden genegeerd: `%1' - + Trying to drop database `%1'. Proberen om database `%1' te verwijderen. - + Simulation mode activated. Simulatiemodus geactiveerd. - Creating object `%1' (%2). - Creëer object `%1' (%2). - - - Creating database `%1'. - Creëer database `%1'. - - - Connecting to database `%1'. - Verbinden met database `%1'. - - - + Generating SQL for `%1' objects... Genereren van SQL voor `%1' objecten... - + Destroying objects created on the server. Objecten aangemaakt op de server worden verwijderd. - + Restoring original names of database, roles and tablespaces. De originele namen van de database, rollen en tablespaces worden teruggezet. - Dropping object `%1' (%2). - Object `%1' (%2) wordt verwijderd. - - - - - + + + Creating object `%1' (%2) Object `%1' (%2) wordt aangemaakt. - + Creating database `%1' - + Connecting to database `%1' - + Renaming `%1' (%2) to `%3' - - + + Dropping object `%1' (%2) Object `%1' (%2) wordt verwijderd - + Changing object `%1' (%2) Object `%1' (%2) wordt aangepast. - + Running auxiliary command. Een hulpcommando wordt uitgevoerd. @@ -8159,18 +8173,6 @@ p, li { white-space: pre-wrap; } Fix tries: Correctiepogingen: - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Waiting process to start...</p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wachten op het starten van het process...</p></body></html> - Select input file @@ -8230,30 +8232,22 @@ p, li { white-space: pre-wrap; } - + Alt+C - - Ctrl+Up - Ctrl+Op - Next model Volgende model - Ctrl+Down - Ctrl+Neer - - - + Close model Sluit model - + ... ... @@ -8267,127 +8261,131 @@ p, li { white-space: pre-wrap; } ModelObjectsWidget - Model Objects Modelobjecten - + + Visible object types + + + + Hide this widget Verberg dit widget - - - - - - + + + + + + ... ... - + 1 1 - + ID ID - + Object Object - + Type Type - + Parent Object Ouder Object - + Parent Type Ouder Type - - Visible Object Types - Zichtbare Object Types - - - + Select All Selecteer Alles - + Clear All Alles Wissen - + + Model objects + + + + Select Selecteer - + Return Keer terug - + Cancel Annuleren - + Esc Esc - + Tree view Boomstructuur - + List view Lijst - + Objects view configuration Object-overzichtsconfiguratie - + Expands all items Alle items uitklappen - + Collapses all items Alle items inklappen - + Filter: Filter: - + By ID Volgens ID - + New Nieuw @@ -8399,6 +8397,12 @@ p, li { white-space: pre-wrap; } Model overview Modeloverzicht + + + Failed to generate the overview image. +The requested size %1 x %2 was too big and there was not enough memory to allocate! + + ModelRestorationForm @@ -8452,20 +8456,16 @@ p, li { white-space: pre-wrap; } &Restore &Herstel - - Modified: %1 - Aangepast: %1 - ModelValidationHelper - + There are pending errors! SQL validation will not be executed. Er zijn fouten! SQL validatie zal niet worden uitgevoerd. - + Operation canceled by the user. De operatie werd geannuleerd door de gebruiker. @@ -8478,143 +8478,123 @@ p, li { white-space: pre-wrap; } Venster - + Enables the validation of SQL code in DBMS. This process requires the use of a pre-configured connection. SQL validation will occur only in the last step (when all objects were validated) or when there are no warnings. - + Connection to be used in the SQL validation - + pgModeler will generate unique and temporary names for database, role and tablespace objects. This option avoids object duplication errors when running the SQL validation. - + Use unique temporary names for cluster level objects - + Warnings: does not prevents model to be saved. Let op: dit voorkomt niet dat het model kan worden opgeslagen. - - + + 0 0 - + Errors: model will not be saved while there are validation errors. Fouten: het model zal niet worden opgeslagen zolang er validatiefouten zijn. - + Hide this widget Verberg dit widget - + ... ... - Use unique temporary names for database, role and tablespace objects - Gebruik unieke namen voor de database, rollen en tablespace objecten - - - Enable validation of SQL code on DBMS (requires connection) - Activeer validatie van SQL code op het DBMS (vereist een verbinding) + + Swap ids + - + SQL Validation: SQL Validatie: - Connection alias - Verbindingsalias - - - + PostgreSQL version PostgreSQL versie - SQL validation, if enabled, will occur only on the last step or when there are no warnings. - Wanneer SQL validatie is geactiveerd, zal deze enkel worden uitgevoerd als laatste stap of wanneer er geen waarschuwingen zijn. - - - Using temporary names will avoid object duplication errors when running the SQL validation. - Tijdelijke namen gebruiken vermijdt object-duplicatiefouten wanneer SQL validatie wordt uitgevoerd. - - - + Try to resolve the reported issues. Probeer om de gerapporteerde problemen te verhelpen. - - Apply Fix - Verhelp - - - + Ctrl+S Ctrl+S - + Clear validation results Validatieresultaten leegmaken - + Clear Leegmaken - + Try to apply a fix on the selected validation info. Probeer de validatieinformatie te verhelpen. - + Options Opties - + Cancel the SQL validation in progress. Annuleer de lopende SQL validatie. - + Cancel Annuleren - + Esc Esc - - Change the creation order for two objects by swapping their ids - Wijzig de aanmaak-volgorde voor twee objecten door hun ids om te wisselen + + Apply fixes + - - Swap Ids - Wissel Ids om + + Change the creation order for two objects by swapping their ids + Wijzig de aanmaak-volgorde voor twee objecten door hun ids om te wisselen - + Va&lidate Va&lideer @@ -8624,76 +8604,82 @@ p, li { white-space: pre-wrap; } Autodetecteer - + The object <strong>%1</strong> <em>(%2)</em> [id: %3] is being referenced by <strong>%4</strong> object(s) before its creation. Het object <strong>%1</strong> <em>(%2)</em> [id: %3] wordt door <strong>%4</strong> object(en) gerefereerd vóór zijn aanmaak. - + The object <strong>%1</strong> <em>(%2)</em> [id: %3]%4 is referencing columns created by <strong>%5</strong> relationship(s) but is created before them. Het object <strong>%1</strong> <em>(%2)</em> [id: %3]%4 refereerd naar kolommen aangemaakt door <strong>%5</strong> relatie(s) maar wordt vóór deze aangemaakt. - + The object <strong>%1</strong> <em>(%2)</em> has a name that conflicts with <strong>%3</strong> object's name(s). Het object <strong>%1</strong> <em>(%2)</em> heeft een naam die conflicteerd met de naam van <strong>%3</strong> andere objecten. - + The relationship <strong>%1</strong> [id: %2] is in a permanent invalidation state and needs to be relocated. De relatie <strong>%1</strong> [id: %2] is in een permanente ongeldige staat en moet worden herplaats. - + SQL validation failed due to error(s) below. <strong>NOTE:</strong><em> These errors does not invalidates the model but may affect operations like <strong>export</strong> and <strong>diff</strong>.</em> SQL validatie faalde omwille van de volgende fouten. <strong>LET OP:</strong><em> Deze fouten ontkrachten het model niet maar kunnen <strong>export</strong> en <strong>diff</strong> beïnvloeden.</em> - <strong>HINT:</strong> try to swap the mentioned relationship by another one in order to solve this situation. Note that other objects may be lost in this process. - <strong>HINT:</strong> probeer om de vermeldde relatie om te wisselen met een andere relatie om dit probleem trachten te verhelpen maar wees ervan bewust dat dit ervoor kan zorgen dat bepaalde andere objecten verloren gaan in het process. + + The column <strong>%1</strong> on <strong>%2</strong> <em>(%3)</em> is referencing the geospatial data type <strong>%4</strong> but the <strong>postgis</strong> extension is not present in the model! + - + <strong>HINT:</strong> try to swap the relationship by another ones that somehow are linked to it through generated columns or constraints to solve this issue. Note that other objects may be lost in the swap process. - + + <strong>HINT:</strong> Create the extension in the model or let it be created by applying the needed fixes. + + + + <em>The above object was created by a relationship. Change the name pattern on it's generator relationship. Fix will not be applied!</em> <em>Het hierboven vermeldde object werd aangemaakt door een relatie. Verander het naamspatroon van de genererende relatie. Dit probleem kan niet automatisch worden verholpen!</em> - + Conflicting object: <strong>%1</strong> <em>(%2)</em>. Conflicterende object: <strong>%1</strong> <em>(%2)</em>. - + Relationship: <strong>%1</strong> [id: %2]. Relatie: <strong>%1</strong> [id: %2]. - + Referrer object: <strong>%1</strong> <em>(%2)</em> [id: %3]. Refererende object: <strong>%1</strong> <em>(%2)</em> [id: %3]. - + SQL validation not executed! No connection defined. - + Database model successfully validated. Het database model werd succesvol gevalideerd. - + Running SQL commands on server... De SQL commando's worden uitgevoerd op de server... - + Processing object: %1 Bezig met het verwerken van object: %1 @@ -8701,397 +8687,510 @@ p, li { white-space: pre-wrap; } ModelWidget - + One to One (1-1) Een-op-een (1-1) - + One to Many (1-n) Een op meer (1-n) - + Many to Many (n-n) Meer op meer (n-n) - - + + Copy Kopieer - Generalization - Generalisatie - - - + Inheritance Overerving - + <strong>ATTENTION:</strong> The database model is protected! Operations that could modify it are disabled! <strong>OPGELET:</strong> Het databasemodel is beschermd! Operaties die het zouden kunnen aanpassen zijn uitgeschakeld! - + Source Bron - + Alt+S Alt+S - + Show object source code Toon object broncode - - + + Properties Eigenschappen - + Space Spatie - + Edit the object properties Bewerk de eigenschappen van het object - - + + Protect Bescherm - - + + Unprotect Bescherming af - + Protects object(s) from modifications Beschermt object(en) tegen aanpassingen - - + + Delete Verwijderen - + Del Del - - + + Del. cascade Verwijder cascade - + Shift+Del Shift+Del - + Select all Selecteer Alles - + + Select tagged + + + + + Select + Selecteer + + + Ctrl+A Ctrl+A - + Selects all the graphical objects in the model Selecteert alle grafische objecten in het model - + + Edit data + + + + Convert Converteer - + Ctrl+C Ctrl+C - + Paste Plakken - + Ctrl+V Ctrl+V - + Cut Knippen - + Ctrl+X Ctrl+X - + Deps && Referrers Afhankelijkheden && Verwijzers - + New Nieuw - + Add a new object in the model Voeg een nieuw object toe aan het model - + Quick Snel - + Quick action for the selected object Snelle actie voor het geselecteerde object - + Rename Hernoem - + F2 F2 - + Quick rename the object Snelle hernoeming van het object - + Move to schema Verplaats naar schema - + Set tag Zet tag - + Edit permissions Machtigingen aanpassen - + Ctrl+E Ctrl+E - + Change owner Eigenaar veranderen - + Select children Selecteer kinderen - - Highlight - Licht op - - - + Open relationship Open relatie - + Custom SQL Aangepaste SQL - + Alt+Q Alt+Q - + Convert to sequence Converteer naar sequentie - + Convert to serial Converteer naar serieel - + Break line Nieuw lijn - + Remove points Verwijder punten - + Enable SQL Schakel SQL in - + Disable SQL Schakel SQL uit - + + Duplicate + + + + + Ctrl+D + + + + + Extended attributes + + + + + + Show + + + + + + Hide + + + + + Jump to table + + + + + Schemas rectangles + + + + + Fade in/out + + + + + + Fade in + + + + + + Fade out + + + + + + + Relationships + Relaties + + + + Swap ids + + + + + Edit the objects creation order by swapping their ids + + + + 90° (vertical) 90° (vertikaal) - + 90° (horizontal) 90° (horizontaal) - + 90° + 90° (vertical) 90° + 90° (vertikaal) - + 90° + 90° (horizontal) 90° + 90° (horizontaal) - + + + + All objects + + + + + + Schemas + + + + + + Tables + Tabellen + + + + + Views + + + + + + Textboxes + + + + Zoom: %1% Zoom: %1% - + Do you really want to convert the relationship into an intermediate table? Bent u zeker dat u de relatie wilt converteren naar een intermediaire tabel? - + Loading database model Het databasemodel wordt geladen - + Saving database model Het databasemodel wordt opgeslagen - + Do you want to %1 the selected schema's children too? - + protect - + unprotect - + Also copy all dependencies of selected objects? This minimizes the breakdown of references when copied objects are pasted into another model. Wenst u alle afhankelijken van de geselecteerde objecten ook te kopiëren? Dit minimalizeert het verbreken van referenties wanneer gekopieerde objecten in een ander model worden geplakt. - + Pasting objects... Bezig met het plakken van objecten... - + Validating object: `%1' (%2) Bezig met het valideren van object: `%1' (%2) - + Generating XML for: `%1' (%2) Bezig met het genereren van XML voor: `%1' (%2) - + Pasting object: `%1' (%2) Bezig met het plakken van object: `%1' (%2) - + Not all objects were pasted to the model due to errors returned during the process! Refer to error stack for more details! Niet alle objecten werden in het model geplakt omwille van fouten die werden gegenereerd gedurende dit proces. Kijk de error-stack na voor meer details! - + <strong>CAUTION:</strong> You are about to delete objects in cascade mode which means more objects than the selected will be dropped too. Do you really want to proceed? <strong>PAS OP:<strong> U staat op het punt om objecten te verwijderen in cascade modus, dit betekent dat ook objecten die niet geselecteerd zijn verwijderd kunnen worden. Bent u zeker dat u wilt verdergaan? - + <strong>CAUTION:</strong> Remove multiple objects at once can cause irreversible invalidations to other objects in the model causing such invalid objects to be deleted too. Do you really want to proceed? <strong>PAS OP:</strong> Meerdere objecten in één keer verwijderen kan onherroepbare ongeldigheden veroorzaken in andere objecten binnen het model en ervoor zorgen dat deze objecten ook worden verwijderd. Bent u zeker dat u verder wenst te gaan? - + <strong>CAUTION:</strong> Remove a relationship can cause irreversible invalidations to other objects in the model causing such invalid objects to be deleted too. Do you really want to proceed? <strong>PAS OP:</strong> Een relatie verwijderen kan onherroepbare ongeldigheden veroorzaken in andere objecten en ervoor zorgen dat deze objecten ook worden verwijderd. Bent u er zeker van dat u wenst verder te gaan? - + Do you really want to delete the selected object? Bent u er zeker van dat u het geselecteerde object wenst te verwijderen? - + The cascade deletion found some problems when running! Some objects could not be deleted or registered in the operation's history! Please, refer to error stack for more details. Het cascade verwijderen kwam enkele problemenen tegen tijdens het uitvoeren! Sommige objecten konden niet worden verwijderd of geregistreerd in de actie-geschiedenis! Gelieve de error-stack na te kijken voor meer details. - + (no objects) (geen objecten) - + + None + + + + Source code Broncode - + Constraints Constraints @@ -9099,39 +9198,35 @@ p, li { white-space: pre-wrap; } ModelsDiffHelper - + Processing object `%1' (%2)... Object `%1' wordt behandeld (%2)... - + Skipping object `%1' (%2)... Object `%1' wordt overgeslagen (%2)... - + Processing diff infos... Diff informatie wordt verwerkt... - + Processing `%1' info for object `%2' (%3)... `%1' informatie voor object `%2' wordt verwerkt (%3)... - + No differences between the model and database. - + Preparing diff code... - - Comparison between model and database finished. - De vergelijking tussen het model en de database is voltooid. - NewObjectOverlayWidget @@ -9141,119 +9236,119 @@ p, li { white-space: pre-wrap; } Venster - + Role Rol - + Tag Tag - + Cast Cast - - + + A A - + Language Taal - + Textbox Tekst box - + Event Trigger Event Trigger - + Tablespace Tablespace - + Schema Schema - + Domain Domein - + Conversion Conversie - + Aggregate Aggregator - + Collation Sortering - + Table Tabel - + Type Type - + Op. Family Op. Familie - + Sequence Sequentie - + Extension Uitbreiding - + Function Functie - + Op. Class Op. Klasse - + Operator Operator - + View View - - + + Permissions Machtigingen @@ -9263,202 +9358,218 @@ p, li { white-space: pre-wrap; } Regel - + Index Index - + Column Kolom - + Constraint Constraint - + + Generic SQL + + + + Trigger Trigger - + + Policy + + + + Many-to-many Meer-op-meer - + One-to-many Een-op-meer - + One-to-one Een-op-een - + Inheritance Overerving - + Copy Kopieer - + G G - + K K - + H H - + J J - + D D - + E E - + F F - + L L - + O O - + U U - + I I - + R R - + S S - + Q Q - + T T - + P P - + M M - + Y Y - + W W - + + 9 9 - + Z Z - + X X - + C C - + V V - + B B - + + 8 + 8 + + + 1 1 - + 2 2 - + 3 3 - + 5 5 - + 4 4 - + 0 0 @@ -9466,84 +9577,125 @@ p, li { white-space: pre-wrap; } NumberedTextEditor - + + Load + Laden + + + + Load the object's source code from an external file + + + + + Edit + + + + + Edit the source code in the preferred external editor + + + + + Clear + Leegmaken + + + Upper case - + Lower case - + Ident right - + Ident left + + + SQL file (*.sql);;All files (*.*) + SQL Code (*.sql);;Alle bestanden (*.*) + + + + Load file + + + + + The source editor `%1' is running on `pid: %2'. + + + + + Could not start the source code editor application `%1'! Make to sure that the source editor path defined in the general settings points to a valid executable and the current user has permission to run the application. Error message returned: `%2' + + ObjectDepsRefsWidget - - Form - Venster - Dependencies Afhankelijken - - + + ID ID - - + + Object Object - - + + Type Type - - + + Parent Object Ouder Object - - + + Parent Type Ouder Type - + Exclude indirect dependencies Sluit indirecte afhankelijken uit - + References Referenties - + Include indirect references Neem indirecte afhankele op - + This object does not exists anymore. The dependencies and references listing are disabled. Dit object bestaat niet langer. Het lijsten van afhankelijken en referenties is uitgeschakeld. @@ -9561,113 +9713,135 @@ p, li { white-space: pre-wrap; } Venster - + Pattern: Patroon: - + Find Zoek - + Defines the search filter Definieert de zoekfilter - + Filter Filter - + Clears the search results Maakt de zoekresultaten leeg - + Clear Leegmaken - - Highlight graphical objects when selecting them or their children on the result list - Licht grafische objecten op wanneer deze of hun kinderen geselecteerd worden in de resultatenlijst - - - - Highlight - Licht op - - - - + + ... ... - + Hide this widget Verberg dit widget - + + (Un)selects the graphical objects in the results grid + + + + + Select + Selecteer + + + Regular Expression Regular expression - + Exact Match Exacte Overeenkomst - + Select All Selecteer Alles - + Clear All Alles Wissen - + Case Sensitive Hoofdlettergevoelig - + ID ID - + Object Object - + Type Type - + Parent Object Ouder Object - + Parent Type Ouder Type - + + Fades outs all the graphical objects in the results grid (or those not listed). The current fade in/out state of all objects is modified. + + + + + Fade out + + + + + + Listed + + + + + + Not listed + + + + Found <strong>%1</strong> object(s). <strong>%1</strong> object(en) gevonden. - + No objects found. Geen objecten gevonden. @@ -9719,144 +9893,142 @@ p, li { white-space: pre-wrap; } Selecteer Object - + Select %1 - ObjectTableWidget + ObjectsTableWidget - + Form - Venster + Venster - + Add Item - Item Toevoegen + Item Toevoegen - + Ins - Ins + Ins - + Remove Item - Item Verwijderen + Item Verwijderen - + Del - Del + Del - + Update Item - Item Updaten + Item Updaten - + Alt+R - Alt+R + Alt+R - + Remove All - Alles Verwijderen + Alles Verwijderen - + Shift+Del - Shift+Del + Shift+Del + + + + Duplicate item + + + + + Ctrl+D + - + Edit Item - Item Aanpassen + Item Aanpassen - + Space - Spatie + Spatie - + Move Up - Naar Boven + Naar Boven - + Ctrl+Up - Ctrl+Up + - + Move Down - Naar Beneden + Naar Beneden - + Ctrl+Down - Ctrl+Down + - + Move to start - Naar de eerste plaats + Naar de eerste plaats - + Ctrl+Home - Ctrl+Home + Ctrl+Home - + Move to end - Naar de laatste plaats + Naar de laatste plaats - + Ctrl+End, Ctrl+S - Ctrl+End, Ctrl+S + Ctrl+End, Ctrl+S - Confirmação - Bevestiging + + + Confirmation + Bevestiging - + Do you really want to remove the selected item? - Bent u zeker dat u het geselecteerde item wilt verwijderen? - - - - - Confirmation - Bevestiging + Bent u zeker dat u het geselecteerde item wilt verwijderen? - - Do you really want to remove the all items? - Bent u zeker dat u alle items wilt verwijderen? + + Do you really want to remove all the items? + OperationList - + (invalid object) (ongeldig object) - - Undoing change on object `%1' (%2). - Aanpassingen op object `%1' ongedaan maken (%2). - - - Redoing change on object `%1' (%2). - Aanpassingen op object `%1' opnieuw topassen (%2). - OperationListWidget @@ -9913,65 +10085,53 @@ p, li { white-space: pre-wrap; } Opnieuw doen - + Object: %1 Object: %1 - + Name: %1 Naam: %1 - + created aangemaakt - + removed verwijderd - + modified aangepast - + moved verplaatst - + Operation: %1 Actie: %1 - Undoing operations... - Acties ongedaan maken... - - - Redoing operations... - Acties opnieuw uitvoeren... - - - + Operation history exclusion Actiegeschiedenisuitsluiting - + Delete the executed operations history is an irreversible action, do you want to continue? Het verwijderen van de geschiedenis van de uitgevoerde acties kan niet worden ongedaan gemaakt, bent u zeker dat u wilt verdergaan? OperatorClassWidget - - Form - Venster - Default Class: @@ -10056,10 +10216,6 @@ p, li { white-space: pre-wrap; } OperatorFamilyWidget - - Form - Venster - Indexing: @@ -10068,10 +10224,6 @@ p, li { white-space: pre-wrap; } OperatorWidget - - Form - Venster - MERGES @@ -10140,10 +10292,6 @@ p, li { white-space: pre-wrap; } ParameterWidget - - Form - Venster - Default Value: @@ -10172,10 +10320,6 @@ p, li { white-space: pre-wrap; } PermissionWidget - - Form - Venster - @@ -10193,499 +10337,763 @@ p, li { white-space: pre-wrap; } Niet-uitvoerbare SQL code - - - Roles - Rollen + + + Roles + Rollen + + + + + Privileges + Machtiginen + + + + Edit permissions + Machtigingen aanpassen + + + + &Grant + + + + + Re&voke + + + + + Cascade + Cascade + + + + Privilege + Machtiging + + + + GRANT OPTION + GRANT OPTION + + + + Add Permission + Machtiging toekennen + + + + Update Permission + Machtiging aanpassen + + + + Cancel Operation + Actie annuleren + + + + Code Preview + Codevoorbeeld + + + + Id + Id + + + + Name + Naam + + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + + + + + -- No permissions defined for the specified object! + -- Er zijn geen machtigingen gedefinieerd voor het gespecifieerde object! + + + + /* Could not generate the SQL code preview for permissions! + /* Er kon geen SQL Codevoorbeeld worden gegenereerd voor de machtigingen! + + + + PgModelerCLI + + + Unrecognized option '%1'. + Niet-herkende optie '%1'. + + + + Value not specified for option '%1'. + Er is geen waarde gespecifieerd voor optie '%1'. + + + + Option '%1' does not accept values. + Optie '%1' aanvaardt geen waardes. + + + + Usage: pgmodeler-cli [OPTIONS] + Gebruik: pgmodeler-cli [OPTIES] + + + + + command line interface. + commandolijn interface. + + + + General options: + Algemene opties: + + + + PNG and SVG export options: + + + + + DBMS export options: + DBMS exporteringsopties: + + + + Miscellaneous options: + Andere opties: + + + + There are no connections configured. + Er zijn geen verbindingen geconfigureerd. + + + + Input file must be different from output! + Het invoerbestand mag niet hetzelfde zijn als het uitvoerbestand! + + + + Incomplete connection information! + Onvolledige verbindingsinformatie! + + + + Invalid zoom specified! + Een ongeldige zoom gespecifieerd! + + + + Invalid action specified to update mime option! + The actie om de mime optie the updaten is ongeldig! + + + + Starting model fixing... + Modelcorrectie begint... + + + + Starting mime update... + Mime update begint... + + + + Starting model export... + Model export begint... + + + + Model successfully fixed! + Het model werd succesvol gecorrigeerd! + + + + Connection aliased as '%1' was not found in the configuration file. + + + + + PostgreSQL Database Modeler Project - pgmodeler.io + + + + + Copyright 2006-2018 Raphael A. Silva <raphael@pgmodeler.io> + + + + + This CLI tool provides several operations over models and databases without the need to perform them +in pgModeler's graphical interface. All available options are described below. + + + + + %1, %2 [FILE] Input model file (.dbm). This is mandatory for fix, export operations. + + + + + %1, %2 [DBNAME] Input database name. This is mandatory for import operation. + + + + + %1, %2 [FILE] Output file. This is mandatory for fixing model or exporting to file, png or svg. + + + + + %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + + + + + %1, %2 [NUMBER] Model fix tries. When reaching the maximum count the invalid objects will be discarded. + + + + + %1, %2 Export the input model to a sql script file. + + + + + %1, %2 Export the input model to a png image. + + + + + %1, %2 Export the input model to a svg file. + + + + + %1, %2 Export the input model directly to a PostgreSQL server. + + + + + %1, %2 Import a database to an output file. + + + + + %1, %2 Compares a model and a database or two databases generating the SQL script to synch the latter in relation to the first. + + + + + %1, %2 Force the PostgreSQL version of generated SQL code. + - - - Privileges - Machtiginen + + %1, %2 Silent execution. Only critical messages and errors are shown during process. + - Grant - GRANT + + %1, %2 Show this help menu. + - Revoke - REVOKE + + Connection options: + - - Edit permissions - Machtigingen aanpassen + + %1, %2 List available connections in file %3. + - - &Grant + + %1, %2 [ALIAS] Connection configuration alias to be used. - - Re&voke + + %1, %2 [HOST] PostgreSQL host in which a task will operate. - - Cascade - Cascade + + %1, %2 [PORT] PostgreSQL host listening port. + - - Privilege - Machtiging + + %1, %2 [USER] PostgreSQL username. + - - GRANT OPTION - GRANT OPTION + + %1, %2 [PASSWORD] PostgreSQL user password. + - - Add Permission - Machtiging toekennen + + %1, %2 [DBNAME] Connection's initial database. + - - Update Permission - Machtiging aanpassen + + %1, %2 Draws the grid in the exported image. + - - Cancel Operation - Actie annuleren + + %1, %2 Draws the page delimiters in the exported image. + - - Code Preview - Codevoorbeeld + + %1, %2 Each page will be exported in a separated png image. (Only for PNG images) + - - Type: - Type: + + %1, %2 [FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG images) + - - Role - Rol + + %1, %2 Ignores errors related to duplicated objects that eventually exist in the server. + - - Id - Id + + %1, %2 [CODES] Ignores additional errors by their codes. A comma-separated list of alphanumeric codes should be provided. + - - Leave the <em><strong>Roles</strong></em> empty to create a permission applicable to <strong><em>PUBLIC</em></strong>. - Laat de <em><strong>Rollen</strong></em> leeg om een machtiging aan te maken die op <strong><em>PUBLIC</em></strong> van toepassing is. + + %1, %2 Drop the database before execute a export process. + - - -- No permissions defined for the specified object! - -- Er zijn geen machtigingen gedefinieerd voor het gespecifieerde object! + + %1, %2 Runs the DROP commands attached to SQL-enabled objects. + - - /* Could not generate the SQL code preview for permissions! - /* Er kon geen SQL Codevoorbeeld worden gegenereerd voor de machtigingen! + + %1, %2 Simulates an export process by executing all steps but undoing any modification in the end. + - - - PgModelerCLI - - Unrecognized option '%1'. - Niet-herkende optie '%1'. + + %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + - - Value not specified for option '%1'. - Er is geen waarde gespecifieerd voor optie '%1'. + + Database import options: + - - Option '%1' does not accept values. - Optie '%1' aanvaardt geen waardes. + + %1, %2 Ignore all errors and try to create as many as possible objects. + - - Connection aliased as '%1' was not found on configuration file. - De verbindingsalias '%1' werd niet teruggevonden in het configuratiebestand. + + %1, %2 Import system built-in objects. This option causes the model bloating due to the importing of unneeded objects. + - - Usage: pgmodeler-cli [OPTIONS] - Gebruik: pgmodeler-cli [OPTIES] + + %1, %2 Import extension objects. This option causes the model bloating due to the importing of unneeded objects. + - - - command line interface. - commandolijn interface. + + %1, %2 Run import in debug mode printing all queries executed in the server. + - - PostgreSQL Database Modeler Project - pgmodeler.com.br - PostgreSQL Database Modelling Project - pgmodeler.com.br + + Diff options: + - - Copyright 2006-2015 Raphael A. Silva <raphael@pgmodeler.com.br> - Copyright 2006-2015 Raphael A. Silva <raphael@pgmodeler.com.br> + + %1, %2 [DBNAME] The database used in the comparison. All the SQL code generated is applied to it. + - This CLI tool provides the operations to export pgModeler's database models without -the need to load them on graphical interface as well to fix model files to the most recent -accepted structure. All available options are described below. - Dit CLI tool maakt het mogelijk om pgModeler database modellen te exporteren zonder -deze in de grafische interface te hoeven laden alsook om modellen te herstellen naar de -laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschreven. + + %1, %2 Save the generated diff code to output file. + - - General options: - Algemene opties: + + %1, %2 Apply the generated diff code on the database server. + - - %1, %2=[FILE] Input model file (.dbm). Mandatory use when fixing a model or exporting it. - %1, %2=[BESTAND] Input model bestand (.dbm). Verplicht wanneer een model wordt geïmporteerd or hersteld. + + %1, %2 Don't preview the generated diff code when applying it to the server. + - - %1, %2=[FILE] Output file. Mandatory use when fixing model or export to file or png. - %1, %2=[BESTAND] Uitvoerbestand. Verplicht wanneer een model wordt hersteld of geexporteerd naar een bestand of PNG. + + %1, %2 Drop cluster level objects like roles and tablespaces. + - - %1, %2 Try to fix the structure of the input model file in order to make it loadable again. - %1, %2 Probeer de structuur van het invoerbestand te herstellen zodat het opnieuw kan worden geladen. + + %1, %2 Revoke permissions already set on the database. New permissions configured in the input model are still applied. + - - %1, %2 Model fix tries. When reaching the maximum count the invalid objects will be discard. - %1, %2 Aantel herstelpogingen. Na het bereiken van deze limiet worden ongeldige objecten verwijderd. + + %1, %2 Drop missing objects. Generates DROP commands for objects that are present in the input model but not in the compared database. + - - %1, %2 Export to a sql script file. - %1, %2 Exporteer naar een sql script bestand. + + %1, %2 Force the drop of missing columns and constraints. Causes only columns and constraints to be dropped, other missing objects aren't removed. + - - %1, %2 Export to a png image. - %1, %2 Exporteer naar een PNG afbeelding. + + %1, %2 Rename the destination database when the names of the involved databases are different. + - - %1, %2 Export directly to a PostgreSQL server. - %1, %2 Exporteer direct naar een PostgreSQL server. + + %1, %2 Don't drop or truncate objects in cascade mode. + - - %1, %2 List available connections on %3 file. - %1, %2 Toon de beschikbare verbindingen in bestand %3. + + %1, %2 Truncate tables prior to alter columns. Avoids errors related to type casting when the new type of a column isn't compatible to the old one. + - - %1, %2 Version of generated SQL code. Only for file or dbms export. - %1, %2 Versie voor de gegenereerde SQL code. ENkel geldig bij bestands- of DBMS export. + + %1, %2 Don't reuse sequences on serial columns. Drop the old sequence assigned to a serial column and creates a new one. + - - %1, %2 Silent execution. Only critical errors are shown during process. - %1, %2 Stille uitvoer. Enkel kritische fouten worden getoond tijdens het proces. + + %1, %2 Don't force the recreation of objects. Avoids the usage of a DROP and CREATE commands to create a new version of the objects. + - - %1, %2 Show this help menu. - %1, %2 Toon deze helpmenu. + + %1, %2 Don't recreate the unmodifiable objects. These objects are the ones which can't be changed via ALTER command. + - PNG export options: - PNG exporteeringsopties: + + %1, %2 [ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + - - %1, %2 Draws the grid on the exported png image. - %1, %2 Tekent het raster in de geexporteerde PNG afbeelding. + + ** The diff process allows the usage of the following options related to import and export operations: + - - %1, %2 Draws the page delimiters on the exported png image. - %1, %2 Tekent de paginamarkering op de geexporteerde PNG afbeelding. + + * Export: + - %1, %2 Each page will be exported on a separated png image. - %1, %2 Elke pagina wordt als apparte PNG afbeelding geexporteerd. + + * Import: + - %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 - %1, %2=[FACTOR] Past een zoom (in procent) toe vooraleer te exporteren naar PNG afbeelding. Geaccepteerde zoomintervals: %3-%4 + + ** When running the diff using two databases (%1 and %2) there's the need to specify two connections/aliases. + - - This CLI tool provides the operations to export pgModeler's database models without - the need to load them on graphical interface as well to fix model files to the most recent - accepted structure. All available options are described below. + + If only one connection is set it will be used to import the input database as well to retrieve database used in the comparison. - - %1, %2 Export to a svg file. + + A second connection can be specified by appending a 1 on any connection configuration parameter listed above. - - PNG and SVG export options: + + Available connections (alias : connection string) - - %1, %2 Each page will be exported on a separated png image. (Only for PNG) + + No operation mode was specified! - - %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG) + + Export, fix model, import database, diff and update mime operations can't be used at the same time! - - DBMS export options: - DBMS exporteringsopties: + + Multiple export mode was specified! + - - %1, %2 Ignores errors related to duplicated objects that eventually exists on server side. - %1, %2 Negeert fouten omwille van duplicate objecten die uiteindelijk op de server zullen bestaan. + + No input file was specified! + - - %1, %2 Drop the database before execute a export process. - %1, %2 Verwijder de database vooraleer het exporteringsprocess te starten. + + No input database was specified! + - - %1, %2 Runs the DROP commands attached to SQL-enabled objects. - %1, %2 Voert de DROP commando's uit die geassocieerd zijn met SQL-ingeschakelde objecten. + + No output file was specified! + - - %1, %2 Simulates a export process. Actually executes all steps but undoing any modification. - %1, %2 Simuleert het exporteringsprocess. Alle stappen worden uitgevoerd maar aanpassingen worden ongedaan gemaakt. + + No input file or database was specified! + - - %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. - %1, %2 Genereert tijdelijke namen voor databases, rollen en tablespaces wanneer simulatiemodus is gespecifieerd. + + The input file and database can't be used at the same time! + - - %1, %2=[ALIAS] Connection configuration alias to be used. - %1, %2=[ALIAS] Verbindingsconfiguratiealias diemoet worden gebruikt. + + No database to be compared was specified! + - - %1, %2=[HOST] PostgreSQL host which export will operate. - %1, %2=[HOST] PostgreSQL host waarnaar te exporteren. + + No diff action (save or apply) was specified! + - - %1, %2=[PORT] PostgreSQL host listening port. - %1, %2=[POORT] De poort waarop de PostgreSQL host luistert. + + No output file for the diff code was specified! + - - %1, %2=[USER] PostgreSQL username. - %1, %2=[GEBRUIKER] PostgreSQL gebruikersnaam. + + ** Error code `%1' found and ignored. Proceeding with export. + - - %1, %2=[PASSWORD] PostgreSQL user password. - %1, %2=[WACHTWOORD] PostgreSQL wachtwoord. + + ** Command: %1 + - - %1, %2=[DBNAME] Connection's initial database. - %1, %2=[DBNAAM] De verbinding's initiele database. + + Extracting objects' XML... + De XML van de objecten word geextraheerd... - - Miscellaneous options: - Andere opties: + + Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! + Het invoerbestand is ongeldig! Kijk na of dit bestand door pgModeler werd gegenereerd ofdat het bestand gecorrupteerd raakte! - - %1, %2=[ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. - %1, %2=[ACTIE] Behandelt de bestandsassociatie met .dbm bestanden. De ACTIE kan [%3 | %4] zijn. + + Recreating objects... + De objecten worden heraangemaakt... - - There are no connections configured. - Er zijn geen verbindingen geconfigureerd. + + +** Object(s) that couldn't fixed: + ** Object(en) die niet kon(den) worden gecorrigeerd: - - Available connections (alias : conn. string) - Beschikbare verbindingen (alias: conn. string) + + WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) + OPGEPAST: Er zijn objecten die niet konden worden gecorrigeerd. We proberen opnieuw... (poging %1 van %2) - - No export mode specified! - Er is geen exportmodus gespecifieerd! + + + Loading input file: %1 + - - Export, fix model and update mime operations can't be used at the same time! - 'Exporteer en corrigeer model' kan niet samen worden gebruikt met 'update the mime operaties'! + + Fixed model file: %1 + - - Multiple export mode specified! - Meerdere exportmodussen gespecifieerd! + + Export to PNG image: %1 + - - No input file specified! - Er werd geen invoerbestand gespecifieerd! + + Export to SVG file: %1 + - - No output file specified! - Er werd geen uitvoerbestand gespecifieerd! + + Export to SQL script file: %1 + - - Input file must be different from output! - Het invoerbestand mag niet hetzelfde zijn als het uitvoerbestand! + + Export to DBMS: %1 + - - Incomplete connection information! - Onvolledige verbindingsinformatie! + + Export successfully ended! + + - - Invalid zoom specified! - Een ongeldige zoom gespecifieerd! + + Starting database import... + - - Invalid action specified to update mime option! - The actie om de mime optie the updaten is ongeldig! + + + Input database: %1 + - - Starting model fixing... - Modelcorrectie begint... + + Saving the imported database to file... + - - Starting mime update... - Mime update begint... + + Import successfully ended! + + - - Starting model export... - Model export begint... + + Starting diff process... + - - Loading input file: - Bezig met het laden van invoerbestand: + + Input model: %1 + - - Fixed model file: - Het modelbestand werd gecorrigeerd: + + Compare to: %1 + - - Model successfully fixed! - Het model werd succesvol gecorrigeerd! + + Loading input model... + - - Mime database successfully updated. - De mime database werd succesvol geupdate. + + + Importing the database `%1'... + - - Export to PNG image: - Exporteren naar PNG afbeelding: + + Comparing the generated models... + - - Export to SVG file: + + No differences were detected. - - Export to SQL script file: - Exporteren naar SQL script bestand: + + Saving diff to file `%1' + - - Export to DBMS: - Exporteren naar DBMS: + + ** WARNING: You are about to apply the generated diff code to the server. Data can be lost in the process! + - - Export successfully ended! - De export is succesvol beëindigd! + + ** Proceed with the diff applying? (yes/no) > + - - Extracting objects' XML... - De XML van de objecten word geextraheerd... + + yes + - - Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! - Het invoerbestand is ongeldig! Kijk na of dit bestand door pgModeler werd gegenereerd ofdat het bestand gecorrupteerd raakte! + + + no + - - Recreating objects... - De objecten worden heraangemaakt... + + Diff code not applied to the server. + - - -** Object(s) that couldn't fixed: - ** Object(en) die niet kon(den) worden gecorrigeerd: + + Applying diff to the database `%1'... + - - WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) - OPGEPAST: Er zijn objecten die niet konden worden gecorrigeerd. We proberen opnieuw... (poging %1 van %2) + + Diff successfully ended! + + + + + + Mime database successfully updated! + + - + Database model files (.dbm) are already associated to pgModeler! Database modelbestanden (.dbm) zijn reeds geassocieerd met pgModeler! - + There is no file association related to pgModeler and .dbm files! Er is geen bestandsassociatie tussen pgModeler and .dbm bestanden! - + Mime database operation: %1 Mime databaseoperatie: %1 - + Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. Het bestand %1 kan niet worden verwijderd! Kijk na of de huidige gebruiker voldoende machtigingen heeft om het bestand te verwijderen en of het bestand bestaat. - + Running update-mime-database command... Het update-mime-database commando wordt uitgevoerd... @@ -10711,17 +11119,17 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr PgModelerUiNS - + Do you want to apply the <strong>SQL %1 status</strong> to the object's references too? This will avoid problems when exporting or validating the model. Wenst u de <strong> SQL %1 status</strong> ook toe te passen op de referenties van het object? Dit vermijdt problemen bij het exporteren of valideren van het model. - + disabling uitschakelen - + enabling inschakelen @@ -10817,7 +11225,7 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr [ ]: - + NONE GEEN @@ -10860,18 +11268,66 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr Bibliotheek + + PolicyWidget + + + Basics + + + + + Command: + + + + + Permissive + + + + + Roles + Rollen + + + + Expressions + Expressies + + + + USING: + + + + + CHECK: + + + + + Name + Naam + + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + + + QObject - + new_database nieuwe_database - - - - + + + + %1 (line: %2) %1 (lijn %2) @@ -10917,158 +11373,178 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr Verbindingsmodus - - This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. - Deze modus is enkel beschikbaar voor <strong>one-to-one</strong>, <strong>one-to-many</strong> en <strong>fk relaties</strong> maar voorziet in betere semantiek bij het linken van tabellen door de lijnen te plaatsen op de exacte locatie waar de relatie zich bevindt. - - - + Connect FK to PK columns Verbindt FK naar PK kolommen - - This mode is the classical one. It connects the relationship to tables through their central points. - Dit is de klassieke modus. Deze verbindt de relaties tussen tabellen via hun centrale punt. + + This mode renders the relationships in crow's foot notation which has a better semantics and readability. It also determines the optimal point where the relationship is connected on the tables' edges taking their position into account. + + + + + Crow's foot notation + + + + + This mode determines the optimal point where the relationship is connected on the tables' edges taking their position into account. It implies the usage of the classical ER notation. + + + + + Connect tables' edges + + + + + This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. It implies the usage of the classical ER notation. + + + + + This mode is the classical one. It connects the relationship to tables through their central points. It implies the usage of the classical ER notation. + - + Connect tables' center points Verbindt de centrale punten van de tabellen - + FK Settings && Patterns FK instellingen && Patronen - + Foreign key settings Foreign key instellingen - + Deferral: Uitstel: - + Deferrable: Uitstelbaar: - + ON DELETE: ON DELETE: - + ON UPDATE: ON UPDATE: - + Name patterns Naamspatronen - + Pattern for foreign key generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). Het patroon voor de foreign key wordt gegenereerd op basis van de pk van de gerefereerde tabel (1-1 en 1-n) of op basis van de pk van de brontabel (n-n). - + Foreign Key (Source): Foreign Key (Bron): - + Relationship type: Relatietype: - + Pattern for columns generated based upon target table's pk (n-n). Het patroon voor kolommen die worden gegenereerd op basis van de pk van de doeltabel (n-n). - + Column (Target): Kolom (Doel): - + One to one (1:1) Een-op-een (1:1) - + One to many (1:n) Een op meerdere (1:n) - + Many to many (n:n) Meerdere op meerdere (n:n) - + Generalization Generalisatie - + Copy Kopieer - + Pattern for columns generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). Het patroon voor de kolommen wordt gegenereerd op basis van de pk van de gerefereerde tabel (1-1 en 1-n) of op basis van de pk van de brontabel (n-n). - + Column (Source): Kolom (Bron): - + Pattern for foreign key generated based upon target table's pk (n-n). Het patroon voor de foreign key wordt gegenereerd op basis van de pk van de doeltabel (n-n). - + Foreign Key (Target): Foreign Key (Doel): - + Pattern for unique key generated by the relationship. Het patroon voor de unieke sleutel wordt gegenereerd op basis van de relatie. - + Unique Key Name: Naam van de unieke sleutel: - - + + Pattern for primary key generated by identifier relationship. Het patroon voor de primary key wordt gegenereerd op basis van de relatie met de identifier. - + Primary Key Name: Naam van de Primary Key: - + Primary Key Column: Primary Key Kolom: - + Default Standaard @@ -11076,327 +11552,311 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr RelationshipWidget - Form - Venster - - - + General Algemeen - + Table 1: Tabel 1: - + Name Patterns Naamspatronen - - + + Use the values defined on settings dialogs for the fields below Gebruik de waarden ingesteld in het instellingsvenster voor de velden hieronder - - + + Use global settings for these fields Gebruik globale instellingen voor deze velden - + Pattern for columns generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). Het patroon voor de kolommen wordt gegenereerd op basis van de pk van de gerefereerde tabel (1-1 en 1-n) of op basis van de pk van de brontabel (n-n). - + Column (Source): Kolom (Bron): - + Pattern for columns generated based upon target table's pk (n-n). Het patroon voor kolommen die worden gegenereerd op basis van de pk van de doeltabel (n-n). - + Column (Target): Kolom (Doel): - + Pattern for foreign key generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n). Het patroon voor de foreign key wordt gegenereerd op basis van de pk van de gerefereerde tabel (1-1 en 1-n) of op basis van de pk van de brontabel (n-n). - + Foreign Key (Source): Foreign Key (Bron): - + Pattern for foreign key generated based upon target table's pk (n-n). Het patroon voor de foreign key wordt gegenereerd op basis van de pk van de doeltabel (n-n). - + Foreign Key (Target): Foreign Key (Doel): - - + + Pattern for primary key generated by identifier relationship. Het patroon voor de primary key wordt gegenereerd op basis van de relatie met de identifier. - + Primary Key Name: Naam van de Primary Key: - + Pattern for unique key generated by the relationship. Het patroon voor de unieke sleutel wordt gegenereerd op basis van de relatie. - + Unique Key Name: Naam van de unieke sleutel: - + Primay Key Column: Primary Key Kolom: - + Cardinality: Cardinaliteit: - - + + Name of the table generated from many to many relationship De naam van de tabel die is gegenereerd op basis van de meer-op-meer relatie - + Gen. Table Name: Algemene Tabelnaam: - + Rel. Type: Relatietype: - + Table 2: Tabel 2: - + [SRC] is required [BRON] is vereist - + [DST] is required [DOEL] is vereist - + Foreign key Settings Foreign key instellingen - + Deferrable: Uitstelbaar: - + Deferral: Uitstel: - + ON DELETE: ON DELETE: - + ON UPDATE: ON UPDATE: - + One to one relationship Een-op-een relatie - + &1-1 - + &gen - + E&XCLUDING - 1-1 - 1-1 - - - + One to many relationship Een-op-meer relatie - + 1-n 1-n - + Many to many relationship Meer-op-meer relatie - + n-n n-n - + Generalization relationship (inheritance) Generalisatierelatie (overerving) - gen - gen - - - + Dependency / Copy relationship Afhankelijkheid / Kopieer de relatie - + dep dep - + Relationship generated via foreign key Relatie gegenereerd via foreign key - + fk fk - + The receiver's primary key will be composed by the generated foreign key columns. De ontvanger's primary key wordt samengesteld door de gegenereerde foreign key kolommen. - + Identifier Identifier - + Instead of create a multi-valued primary key with the generated foreign keys columns a single column is created and used as primary key. In plaats van een multi-kolom primary key te creeren op basis van de foreign key kolommen, wordt een enkele kolom aangemaakt en gebruikt als primary key. - + Single PK column Enkele PK kolom - + Custom Color: Aangepaste kleur: - + Copy Options Kopieeropties - + INDEXES INDEXES - + COMMENTS COMMENTS - + INCLUDING INCLUDING - + DEFAULTS DEFAULTS - EXCLUDING - EXCLUDING - - - + CONSTRAINTS CONSTRAINTS - + Use defaults Gebruik standaardwaarden - + ALL ALL - + STORAGE STORAGE - + Attributes Attributen - + Constraints Constraints - + Primary key Primary key - + Advanced Geavanceerd @@ -11432,10 +11892,6 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr This advanced tab shows the objects (columns or table) auto created by the relationship's connection as well the foreign keys that represents the link between the participant tables. Dit geavanceerde tab-blad toont de objecten (kolommen of tabellen) die automatisch worden aangemaakt door de verbindingen van de relatie alsook de foreign keys die de link tussen de deelnemende tabellen voorstelt. - - Available tokens to define name patterns:<br/> <strong>%1</strong> = Reference (source) primary key column name. <em>(Ignored on constraint patterns)</em><br/> <strong>%2</strong> = Reference (source) table name.<br/> <strong>%3</strong> = Receiver (destination) table name.<br/> <strong>%4</strong> = Generated table name. <em>(Only for n:n relationships)</em> - Beschikbare tokens om naamspatronen te definieren:<br/> <strong>%1</strong> = (Bron)referentie primary key kolom naam. <em>(Genegeerd bij constraint-patronen)</em><br/> <strong>%2</strong> = (Bron)referentie tabelnaam.<br/> <strong>%3</strong> = Receiver (doel) tabelnaam.<br/> <strong>%4</strong> = Gegenereerde tabelnaam. <em>(Enkel voor n:n relaties)</em> - Available tokens to define name patterns:<br/> <strong>%1</strong> = Reference (source) primary key column name. <em>(Ignored on constraint patterns)</em><br/> <strong>%2</strong> = Reference (source) table name.<br/> <strong>%3</strong> = Receiver (destination) table name.<br/> <strong>%4</strong> = Generated table name. <em>(Only for n:n relationships)</em> @@ -11447,80 +11903,84 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr Standaard - + Referer View: Refererende View: - + Referer view references one or more columns of a table to construct it's own columns. De refererende view refereert naar een of meerdere kolommen van een tabel om zijn eigen kolommen aan te maken. - + Referenced table has its columns referenced by a view in order to construct the columns of this latter. De gerefereerde tabel heeft kolommen waarnaar wordt gerefereerd door een view die deze kolommen gebruikt om zijn eigen kolommen aan te maken. - + Referer Table: Refererende Tabel: - + Referer table references one or more columns of a table through foreign keys. This is the (n) side of relationship. De refererende tabel refereert naar een of meerdere kolommen in een andere tabel via foreign keys. Dit is the (n)-zijde van de relatie. - + Referenced table has its columns referenced by a table's foreign key. This is the (1) side of relationship. De gerefereerde tabel heeft kolommen waarnaar wordt gerefereerd door een foreign key in een andere tabel. Dit is de (1) zijde van de relatie. - + Referenced Table: Gerefereerde Tabel: - - - + + + Reference Table: Referentietabel: - + Reference table has the columns from its primary key will copied to the receiver table in order to represent the linking between them. This is the (1) side of relationship. De referentietabel heeft kolommen in zijn primary key die gekopieerd zullen worden naar de ontvangende tabel om de link tussen deze te bewerkstelligen. Dit is de (1) zijde van de relatie. - + Receiver Table: Ontvangende Tabel: - + Receiver (or referer) table will receive the generated columns and the foreign key in order to represent the linking between them. This is the (n) side of relationship. De ontvanger (of gerefereerde) tabel zal de gegenereerde kolommen en de foreign key ontvangen om de link tussen beiden te bewerkstelligen. Dit is de (n) zijde van de relatie. - + In many-to-many relationships both tables are used as reference to generate the table that represents the linking. Columns from both tables are copied to the resultant table and two foreign keys are created as well in order to reference each participant table. In meer-op-meer relaties worden beide tabellen als referentie gebruikt om de link-tabel te representeren. Kolommen van beide tabellen worden gekopieerd naar de resulterende link-tabel en foreign keys naar elke deelnemende tabel worden aangemaakt. - - + + is required is vereist - RoleWidget + ResultSetModel - Form - Venster + + [binary data] + [binaire data] + + + RoleWidget yyyy-MMM-dd hh:mm:ss @@ -11528,7 +11988,7 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr - + Validity Geldigheid @@ -11549,78 +12009,75 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr - Inherit Permissions - Erf Machtigingen Over + Inherit permissions + - Can create Database - Kan Database Aanmaken + Can create database + - Can Login - Kan Inloggen + Bypass RLS + - Can create Role - Kan Rol Aanmaken + Can use replication + - Can use Replication - Kan Replicatie Gebruiken + Can login + Kan inloggen - - + + Can create role + + + + + Members Leden - - + + Member of Lid van - - + + Members (Admin.) Leden (Admin.) - + Password: Wachtwoord: - + Encrypted Geëncrypteerd - - Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. - <strong><em>-1</em></strong> toewijzen aan <strong><em>Verbindingen</em></strong> maakt een rol aan zonder verbindingslimiet.<br/> Vink <strong><em>Geldigheid</em></strong> af om een rol aan te maken die nooit vervalt. - Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. - + Role Rol RuleWidget - - Form - Venster - Event: @@ -11665,227 +12122,269 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr Venster - - Load SQL script - Laad SQL script + + Save SQL commands + Sla SQL commando's op - - &Load - &Laden + + Search in SQL code + - - - Save SQL commands - Sla SQL commando's op + + Close the current SQL script + - - &Save - Op&slaan + + SQL script currently handled + - - Search in SQL code + + (not saved) + + + + + Handle external SQL script - - &Find - &Zoeken + + &Script + - + Alt+F Alt+Z - + + Fi&nd + + + + Run the specified SQL command Voer het commando uit - + Run SQL Uitvoeren - + F6 F6 - + Clear sql input field and results Wis SQL invoerveld en resultaten - + Clear All Alles Wissen - - + + Export results to a CSV file Exporteer de resultaten naar CSV bestand - + Snippe&ts Snippe&ts - + + Alt+T + + + + E&xport E&xporteren - + + Alt+X + + + + Toggles the output pane - + &Output - + Alt+O Alt+O - - - + + Current working database + + + + + + Results - + Messages - + History - Shows the command history - Toon de commandogeschiedenis - - - &History - &Geschiedenis - - - Alt+H - Alt+G - - - Command History - Commandogeschiedenis - - - Clear sql input field and results. - Wis SQL invoerveld en resultaten - - - Clear - Leegmaken - - - - + ... ... - 0 - 0 + + SQL file (*.sql);;All files (*.*) + SQL Code (*.sql);;Alle bestanden (*.*) + + + + Load + Laden - Rows returned: - Aantal rijen: + + Save + Opslaan - - SQL file (*.sql);;All files (*.*) - SQL Code (*.sql);;Alle bestanden (*.*) + + Save as + Opslaan als - + [binary data] [binaire data] - [<strong>%1</strong>] SQL command successfully executed. <em>Rows affected <strong>%2</strong></em> - [<strong>%1</strong>] SQL command werd succesvol uitgevoerd. <em><strong>%2</strong> rijen werden beïnvloed</em> - - - + No results retrieved or changes done due to the error above. - - + + Messages (%1) - + Results (%1) - - [%1]: SQL command successfully executed. <em>%2 <strong>%3</strong></em> + + [%1]: SQL command successfully executed in <em><strong>%2</strong></em>. <em>%3 <strong>%4</strong></em> - + Rows affected - + Rows retrieved - + Load SQL commands Laad SQL commando's - + Save CSV file Sla CSV bestand op - + Comma-separated values file (*.csv);;All files (*.*) Bestand met komma-gesepareerde waarden (*.csv);;Alle bestanden (*.*) - + The SQL input field and the results grid will be cleared! Want to proceed? Het SQL invoerveld en de resultaten-lijst zullen worden leeggemaakt! Wenst u verder te gaan? - + Copy selection Kopiëer de selectie - + + Plain format + + + + + CVS format + + + + + This action will wipe out all the SQL commands history for all connections! Do you really want to proceed? + + + + Clear history + + + Save history + + + + + Reload history + + + + + Find in history + + + + + Hide find tool + + + + + This action will wipe out all the SQL commands history for the current connection! Do you really want to proceed? + + SQLToolWidget @@ -11895,90 +12394,125 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr Venster - + Database explorer Databaseverkenner - + Disconnect from all databases Van alle databases ontkoppelen - - + + ... - + Update the database list - + Toggle the object's attributes grid - + Attributes Attributen - + Alt+R Alt+R - + Toggle the display of source code pane - - + + Source code Broncode - Update the database list. - Update de database lijst. - - - + SQL execution SQL uitvoering - - - + Warning Opgepast - + <strong>ATTENTION:</strong> Disconnect from all databases will close any opened tab in this view! Do you really want to proceed? <strong>LET OP:</strong> Van alle databases ontkoppelen sluit alle tab-bladen in dit venster! Bent u zeker dat u verder wilt gaan? + + + SceneInfoWidget - - <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? - <strong>PAS OP:</strong> U staat op het punt om de volledige database <strong>%1</strong> te verwijderen! Alle data zal verloren gaan. Bent u zeker dat u verder wilt gaan? + + Form + Venster - - You're running a demonstration version! The data manipulation feature is available only in the full version! - Dit is een demonstratie-versie. De data manipulatie functionaliteit is enkel beschikbaar in de volledige versie! + + + Current position of the mouse in the canvas + + + + + + + + - + + + + + + Current zoom factor + + + + + + Currently selected object(s) + + + + + + Dimensions of the selected object(s) + + + + + No selection + + + + + N/A + + + + + Sel. objects: %1 + SchemaWidget - - Form - Venster - Fill color: @@ -11993,44 +12527,50 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr SequenceWidget - Form - Venster - - - + Cyclic: Cyclisch: - + Start: Start: - + Maximum: Maximum: - + Minimum: - + + Defualt values: + + + + Increment: Toename: - + Cache: Cache: - + Owner Col.: Bezittende kolom: + + + User defined + + SnippetsConfigWidget @@ -12194,65 +12734,8 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr Algemeen - - SourceCodeEditorForm - - Form - Venster - - - Load SQL script - Laad SQL script - - - &Load - &Laden - - - Save SQL commands - Bewaar SQL commando's - - - &Save - Op&slaan - - - &Find - &Zoek - - - Alt+F - Z is accelarator for Find - Alt+Z - - - Clear sql input field and results - Wis SQL invoerveld en resultaten - - - Clear All - Alles Wissen - - - Export results to a CSV file - Exporteer de resultaten naar CSV bestand - - - &Apply - Not sure p is a good accellerator here (t would be better but that is used for snippets) - Toe&passen - - - &Cancel - &Annuleren - - SourceCodeWidget - - Form - Venster - Version: @@ -12308,42 +12791,33 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr XML XML - - - Type: - Type: - Source code visualization Broncodevisualisatie - <strong>Original:</strong> displays only the original object's SQL code.<br/><br/><strong>Dependencies:</strong> display the original code including all dependencies needed to properly create the selected object.<br/><br/><strong>Children:</strong> display the original code including all children's SQL code. This option is used only by schemas, tables and views. - <strong>Origineel:</strong> toon enkel de originele SQL code van het object.<br/><br/><strong>Afhankelijken:</strong> toon de originele code inclusief alle afhankelijken die nodig zijn om het geselecteerde object correct aan te maken.<br/><br/><strong>Kinderen:</strong> toon de originele code inclusief de code voor alle kinderen. Deze optie wordt enkel gebruikt door schema's, tabellen en views. - - - + <strong>Original:</strong> displays only the original object's SQL code.<br/><br/> <strong>Dependencies:</strong> displays the original code including all dependencies needed to properly create the selected object.<br/><br/> <strong>Children:</strong> displays the original code including all object's children SQL code. This option is used only by schemas, tables and views. - + Save SQL code as... Sla SQL code op als... - + SQL code (*.sql);;All files (*.*) SQL Code (*.sql);;Alle bestanden (*.*) - + Generating source code... De broncode wordt gegeneerd... - + -- NOTE: the code below contains the SQL for the selected object -- as well for its dependencies and children (if applicable). -- @@ -12368,68 +12842,98 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr - + -- SQL code purposely truncated at this point in demo version! - - --- SQL code purposely truncated at this point on demo version! - -- In de demo-versie wordt de SQL code hier moedwillig afgekort! - - - + -- SQL code unavailable for this type of object -- -- Er is geen SQL code beschikbaar voor dit type object -- - + <!-- XML code preview disabled in demonstration version --> <!-- XML codevoorbeelden zijn niet beschikbaar in de demo-versie --> SwapObjectsIdsWidget - - Form - Venster - Change objects creation order - - Create: - Aanmaken: + + Create: + Aanmaken: + + + + + ID: + ID: + + + + Before: + Voor: + + + + Change the objects creation order is an irreversible operation and cause the operations history to be automatically erased. Note that the creation order configured in this form is not definitive and may change after a model validation. + + + + + Swap the object ids changing their creation order + + + + + Swap ids + + + + + Filter: + Filter: + + + + ID + ID + + + + Object + Object - - - ID: - ID: + + Type + Type - - Before: - Voor: + + Parent Object + Ouder Object - - It's recommended to use this feature only when the SQL validation fails in cases when a object is being referenced in portions where the ordinary validation couldn't reach, e.g., inside of a rule command or check constraint expression. - Het is aangeraden om dit feature enkel te gebruiken wanneer SQL validatie faalt in gevallen waarin naar een object wordt verwezen in delen waar de gewone validitie niet inkijkt, bijvoorbeeld binnen een regel-commando or check-constraint expressie. + + Parent Type + Ouder Type - + Swap the values of the fields Wissel de veldwaarden om - + Swap values Wissel de waarden om @@ -12437,12 +12941,12 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr Table - + new_table nieuwe_tabel - + In demonstration version tables can have only `%1' instances of each child object type or ancestor tables! You've reach this limit for the type: `%2' Tabellen kunnen slechts `%1' instancies per kind-object type of voorouder-tabellen hebben in demonstratie-versies! U heeft deze limiet bereikt voor het type `%2' @@ -12455,324 +12959,407 @@ laatste geaccepteerde structuur. Alle beschikbare opties worden hieronder beschr - + Add empty rows - - - Add - Toevoegen - - - + Ins Ins - - Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely igored when generating the <strong>INSERT</strong> commands. + + Add an empty column - - Add an empty column + + Delete rows - - Remove all rows from the grid preserving columns + + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> - - - Clear - Leegmaken + + Remove all rows from the grid preserving columns + - + Shift+Del Shift+Del - + Delete the selected rows - - - Delete - Verwijderen - - - - + + Del Del - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> + + Duplicate the selected rows - - Duplicate the selected rows + + Ctrl+D + + + + + Delete the selected columns + + + + + Copy items on the grid + + + + + Copy + + + + + Add row + + + + + Delete column + + + + + Paste items on the grid + + + + + Paste + Plakken + + + + Ctrl+V + Ctrl+V + + + + Fills the grid using a CSV file + + + + + <html><head/><body><p>Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely ignored when generating the <span style=" font-weight:600;">INSERT</span> commands.</p></body></html> + + + + + Add column - Duplicate + Duplicate rows - - Ctrl+D + + Change the values of all selected cells at once - - Delete the selected columns + + Bulk data edit - + + Ctrl+E + Ctrl+E + + + Remove all columns (and rows) from the grid - + + Delete all columns + + + + Ctrl+Shift+Del - + + Delete all rows + + + + Delete columns is an irreversible action! Do you really want to proceed? - + Remove all rows is an irreversible action! Do you really want to proceed? - + Remove all columns is an irreversible action! Do you really want to proceed? - + + Unknown column - + Duplicated column - - - (no columns) - - TableObjectView - + Relationship: %1 Relatie: %1 - - TableView - - - Connected rels: %1 - Verbonden relaties: %1 - - TableWidget - - Form - Venster - Options Opties - + Tag: Tag: - + With OID Met OID - + Generate ALTER for columns/constraints Genereer ALTER voor kolommen/constraints - + Unlogged Niet gelogged - + + Enable row level security + + + + + Force RLS for owner + + + + &Columns - + Co&nstraints - + Tri&ggers - + &Rules - + &Indexes - - &Tables + + &Policies - Columns - Kolommen - - - Constraints - Constraints - - - Triggers - Triggers - - - Rules - Regels - - - Indexes - Indexen - - - Tables - Tabellen + + &Tables + - + Edit data - + Define initial data for the table - - - - - - + + + + + + + Name Naam - + Schema Schema - - - + + + Type Type - + + PK + + + + Default Value Standaardwaarde - - Attribute - Attribuut + + Attribute(s) + + + + + It is not possible to mark a column as primary key when the table already has a primary key which was created by a relationship! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. + - + + It is not possible to mark a column created by a relationship as primary key! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. + + + + ON DELETE ON DELETE - + ON UPDATE ON UPDATE - + Refer. Table Refer. Tabel - + Firing Afvuring - + Events Events - + Execution Uitvoering - + Event Event - + Indexing Indexering - + + Command + + + + + Permissive + + + + + USING expression + + + + + CHECK expression + + + + + Roles + Rollen + + + Parent Ouder - + Copy Kopie + + + Yes + Ja + + + + No + Nee + TablespaceWidget @@ -12789,10 +13376,6 @@ Relationship: %1 TagWidget - - Form - Venster - Colors @@ -12827,23 +13410,19 @@ Relationship: %1 TaskProgressWidget - + Executing tasks Taken uitvoeren - - + + Waiting task to start... Wachten op het starten van de taak... TextboxWidget - - Form - Venster - Font: @@ -12880,17 +13459,13 @@ Relationship: %1 Onderstrepen - + Select text color Selecteer tekstkleur TriggerWidget - - Form - Venster - Constraint @@ -12977,22 +13552,18 @@ Relationship: %1 Uitvoer: - + Column Kolom - + Type Type TypeWidget - - Form - Venster - Range @@ -13135,10 +13706,6 @@ Relationship: %1 Co&mposite - - Composite - Composite - Enumerations @@ -13222,10 +13789,6 @@ Relationship: %1 Update Notifier Update Aankondiging - - New update found! - Er is een nieuwe update! - Hide this widget @@ -13246,10 +13809,6 @@ Relationship: %1 mmm dd, yyyy mmm dd, yyyy - - Version: - Versie: - Update found! @@ -13291,248 +13850,263 @@ Relationship: %1 Verkrijg de broncode - <strong>Note:</strong> Both actions below will open a new web browser window - <strong>Let op:</strong> Beide acties zullen in een browservenster openen - - - - Recover a package - Herstel een pakket - - - - Purchase a new package - Koop een nieuw pakket aan - - - - + + Failed to check updates Het ophalen van update informatie faalde - - The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <strong>%1</strong>. - Het ophalen van nieuwe versie informatie faalde! Gelieve uw internetverbinding na te kijken en opnieuw te proberen! De verbindingsfout die werd gegenereerd is <strong>%1</strong>. + + The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <em>%1</em> - <strong>%2</strong>. + - + No updates found Geen nieuwe updates - + You are running the most recent pgModeler version! No update needed. Dit is de meest recente versie van pgModeler! - + The update notifier failed to check for new versions! A HTTP status code was returned: <strong>%1</strong> Het ophalen van nieuwe versie informatie faalde! De volgende HTTP status code werd gegenereerd: <strong>%1</strong> ViewWidget - - Form - Venster - References Referenties - + Expression Alias: Expressiealias: - + Column: Kolom: - + Table: Tabel: - + Table Alias: Tabelalias: - + Used in: Gebruikt in: - + Column Kolom - + Expression Expressie - + Reference Type: Referentietype: - - SELECT-FROM - SELECT-FROM + + View Definition + Viewdefinitie + + + + Expression: + Expressie: + + + + Column Alias: + Kolomalias: + + + + The element will be used as part of the SELECT statement to retrieve columns or expressions that will compose the view's columns + - - FROM-WHERE - FROM-WHERE + + SELECT ... + - - After WHERE - Na WHERE + + The element will be used as part of the WHERE clause in form of conditional expression + - View Definition - Viewdefinitie + WHERE ... + - - Expression: - Expressie: + + The element is used in the FROM portion of the command in order to reference tables or construct JOIN statements + - Column Alias: - Kolomalias: + FROM ... + + + + + The element's expression is used exclusively as the view's definition + + + + + The element will be appended to the very end of the view's definition. This is useful when using GROUP BY/HAVING statements + + + + + End expression + - + Triggers Triggers - + Rules Regels - + + Indexes + Indexen + + + Table Expression Tabelexpressie - + Code Preview Codevoorbeeld - + Options Opties - + Tag: Tag: - + Mode: Modus: - + Ordinary Gewoon - + Recursi&ve - + &Materialized - Recursive - Recursief - - - Materialized - Gematerialiseerd - - - + With no data Zonder data - + Col./Expr. Kol./Expr. - + Alias Alias - + Alias Col. Alias Kol. - - Flags: SF FW AW VD - Vlaggen: SF FW AW VD + + Flags: SF FW AW EX VD + - - To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[tablel].*</strong></em> - Om naar alle kolommen in een tabel te refereren (*), laat het veld <strong>Kolom</strong> leeg, dit is equivalent aan <em><strong>[schema].[tabel].*</strong></em> + + To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[table].*</strong></em> + - - + + + Name Naam - + Refer. Table Refer. Tabel - + Firing Afvuring - + Events Events - + + Indexing + Indexering + + + Execution Uitvoering - + Event Event - + /* Could not generate the SQL code. Make sure all attributes are correctly filled! /* De SQL code kon niet worden gegenereerd. Kijk na of alle attributen correct zijn ingevuld! diff --git a/lang/pt_BR.qm b/lang/pt_BR.qm index 9060df3e01..b3cecf0428 100644 Binary files a/lang/pt_BR.qm and b/lang/pt_BR.qm differ diff --git a/lang/pt_BR.ts b/lang/pt_BR.ts index caf91dac77..8b1f3fc5cf 100644 --- a/lang/pt_BR.ts +++ b/lang/pt_BR.ts @@ -1,62 +1,6 @@ - - AboutForm - - About pgModeler - Sobre o pgModeler - - - Close - Fechar - - - PostgreSQL Database Modeler - Modelador de Banco de Dados PostgreSQL - - - Design, configure, deploy - Desenhe, configure, implante - - - Copyright 2006-2013 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -The pgModeler project is a CASE tool for modeling relational databases for PostgreSQL DBMS through the use of modeling techniques from entity-relationship diagrams as well merging concepts that PostgreSQL implements. - -Special thanks to friends of the software development team of the Legislative Assembly, Tocantins, Brazil: Michel de Almeida, Felipe Santana, Jonas Nepomuceno, Ricardo Ishibashi and Álvaro Nunes. - Copyright 2006-2012 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de bancos de dados relacionais para o SGDB PostgreSQL através do uso de técnicas de modelagem de diagramas entidade-relacionamento, como também mesclando conceitos implementados pelo próprio PostgreSQL. - -Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Assembleia Legislativa, Tocantins, Brasil: Michel de Almeida, Felipe Santana, Jonas Nepomuceno, Ricardo Ishibashi and Álvaro Nunes. {2006-2013 ?} - - - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 3. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -The complete text of GPLv3 is at LICENSE file on source code root directory. Also, you can get the complete GNU General Public License at <http://www.gnu.org/licenses/> - Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral da GNU como publicada pela Free Software Foundation versão 3. - -Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; inclusive sem a garantia implícita de COMERCIABILIDADE ou ADEQUAÇÃO À UM PROPÓSITO ESPECÍFICO. Leia a Licença Pública Geral da GNU para mais detalhes. - -O texto completo da GPLv3 está no arquivo LICENSE no diretório raiz do código fonte. Você também pode obter a Licença Pública Geral da GNU completa em <http://www.gnu.org/licenses/> - - - Version %1 - Versão %1 - - - Copyright 2006-2013 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -The pgModeler project is a CASE tool for modeling relational databases for PostgreSQL DBMS through the use of modeling techniques from entity-relationship diagrams as well merging concepts that PostgreSQL implements. - Em dúvida sobre "bem como mesclando". - Copyright 2006-2013 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de bancos de dados relacionais para o SGDB PostgreSQL através do uso de técnicas de modelagem de diagramas entidade-relacionamento, como também mesclando conceitos implementados pelo próprio PostgreSQL. - - AboutWidget @@ -71,22 +15,10 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. - - Design, configure, deploy - Desenhe, configure, implante - - - <a href="http://pgmodeler.com.br">http://pgmodeler.com.br</a> - - pgModeler is proudly a brazilian software! - - <html><head/><body><p>Copyright 2006-2016 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> - - Hide this widget @@ -95,18 +27,6 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de ... - - 0.0.0.0 - - - - (CODE_NAME) - - - - Build: - - (BUILD_NUM) @@ -116,156 +36,28 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de - Contributors - - - - <html><head/><body><p>This page is dedicated to all contributors who gave a bit of their time in make pgModeler a better software somehow. The complete list of people that helped pgModeler can be found at <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>If you have a great idea to improve pgModeler please submit it <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">here</span></a>. No ideas for now but want to help? Why not donate a few bucks <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">here</span></a>!?</p></body></html> - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - Name - Nome - - - Country - - - - Contribution - - - - Damien Degois - - - - France - - - - French UI translation and several improvements in auxiliary scripts. - - - - Ji Bin - - - - China - - - - Chinese UI translation and small fixes. - - - - Pierre-Samuel LE STANG - - - - French UI translation. - - - - Lisandro Damián Nicanor - - - - Argentina - - - - Improvements on build scripts enabling the custom packaging in Linux distros; Per-user settings; pgModeler's package maintainer in Debian Linux. - - - - Pavel Alexeev - - - - Russia - - - - Additional work for packaging in Linux distros; pgModeler's package maintainer in Fedora Linux. - - - - Mariusz Fik - - - - Poland - - - - Custom packaging first ideas. Tester of first version of custom packaging patch. - - - - Jonathan DUPRE + 0.0.0 - Gilberto Castillo + build: - Cuba + <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" text-decoration: underline; color:#2980b9;">https://pgmodeler.io</span></a></p></body></html> - Spanish UI translation. + <html><head/><body><p>Copyright 2006-2018 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.io</span></a>&gt;</p></body></html> AggregateWidget - - Form - Formulário - Final Function: Função Final: - - Transition Function: - Função de Transição: - Sort Operator: Operador de Ordenação: @@ -299,17 +91,6 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de - - Aplicacao - - Error - Erro - - - Unknown exception caught! - Exceção desconhecida capturada! - - AppearanceConfigWidget @@ -520,18 +301,6 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de Colors: Cores: - - Font color / Fill color 1 - Cor da fonte / Cor do preenchimento 1 - - - Fill color 2 - Cor do preenchimento 2 - - - Border color - Cor da borda - Underline Sublinhado @@ -552,13 +321,17 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de Placeholder: Body + + Constraint: Name + + + + Constraint: Descriptor + + Application - - Error - Erro - Unknown exception caught! Exceção desconhecida capturada! @@ -569,26 +342,10 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de - BancoDadosWidget - - Model Author: - Autor do Modelo: - + BaseConfigWidget - Encoding: - Codificação: - - - Connections: - Conexões: - - - Default - Padrão - - - Template DB: - DB Modelo: + A backup of the previous settings was saved into <strong>%1</strong>! + @@ -751,6 +508,14 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de Basic Relationship + + Policy + + + + Generic SQL + + BaseObjectView @@ -761,10 +526,6 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de BaseObjectWidget - - Form - Formulário - Name: Nome: @@ -790,22 +551,10 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de Schema: Esquema: - - Permissions: - Permissões: - - - Edit Permissions - Editar Permissões - This object is protected thus no change in form will be applied to it. Este objeto está protegido, assim nenhuma alteração no formulário será aplicada ao mesmo. - - Create / Edit: - Criar / Editar: - Value(s) Valor(es) @@ -814,18 +563,10 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de Version Versão - - The field(s) or value(s) highlighted on the form is(are) for the exclusive use and/or mandatory in specific versions of PostgreSQL. Failure to complete that may cause errors in the generation of SQL code for each version shown in tool tips of the highlighted fields. - O(s) campo(s) ou valor(es) destacado(s) no formulário é(são) de uso exclusivo e/ou obrigatório em versões específicas do PostgreSQL. O não preenchimento do(s) mesmo(s) pode ocasionar erros na geração de código SQL de cada versão indicada nas dicas de ferramenta dos campos destacados. - Edit permissions Editar permissões - - Disables the generated SQL code using comment tokens (--) - Desabilitar o código SQL gerado usando símbolos de comentário (--) - Disable SQL code Desabilitar código SQL @@ -838,10 +579,6 @@ O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de Required field. Leaving this empty will raise errors! Campo requerido. Deixá-lo em branco gerará erros! - - The <em style='color: %1'><strong>highlighted</strong></em> fields on the form are available only on specific PostgreSQL versions. When generating SQL code for versions other than those specified on field's tooltips pgModeler will ignore it's values. - Os campos <em style='color: %1'><strong>destacados</strong></em> no formulário estão disponíveis apenas em versões específicas do PostgreSQL. Ao gerar código SQL para versões diferentes daquelas especificadas nas dicas de campo, o pgModeler ignorará estes valores. - Edit object's permissions Editar permissões do objeto @@ -875,6 +612,17 @@ This will disable the code of all child and referrer objects. + + BaseTableView + + Toggles the extended attributes display + + + + Connected rels: %1 + + + BugReportForm @@ -951,5729 +699,3554 @@ This will disable the code of all child and referrer objects. - CaixaMensagem + BulkDataEditWidget - Show/hide exceptions stack. - Exibir/Esconder pilha de exceções. + Bulk data edit + + + + CastWidget - &Yes - &Sim + Cast Type: + Molde de Tipo: - &No - &Não + Assignment + Atribuição - Cancel - Cancelar + Input / Output + Entrada / Saída - Error - Erro + Source data type + Tipo dado origem - Alert - Alerta + Target data type + Tipo dado destino - Information - Informação + The function to be assigned to a cast from <em><strong>typeA</strong></em> to <em><strong>typeB</strong></em> must have the following signature: <em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>. + A função a ser atribuída à uma moldagem do <em><strong>tipoA</strong></em> para o <em><strong>tipoB</strong></em> deve possuir a seguinte assinatura: <em><strong>tipoB</strong> funcao(<strong>tipoA</strong>, integer, boolean)</em>. - &Cancel - &Cancelar + I&mplicit + - Exceptions - Exceções + Conversion Func.: + Função de Conv.: - Show excpetion stack in text format (useful to report errors). - Exibe a pilha de exceções em formato texto (útil para se reportar erros). + E&xplicit + - CaixaTextoWidget + CodeCompletionWidget - Bold - Negrito + Makes the widget closable only by ESC key or mouse click on other controls. + - Italic - Itálico + SQL Keyword + - Select text color - Selecionar cor de texto + (no items found.) + - Underline - Sublinhado + Make &persistent + - CastWidget - - Form - Formulário - - - Cast Type: - Molde de Tipo: - + CollationWidget - Implicit - Implícita + Locale: + Localidade: - Assignment - Atribuição + Encoding: + Codificação: - Input / Output - Entrada / Saída + LC_COLLATE: + - Conversion Function: - Função de Conversão: + LC_CTYPE: + - Source data type - Tipo dado origem + The fields <strong><em>Collation</em></strong>, <strong><em>Locale</em></strong>, <strong><em>LC_COLLATE & LC_CTYPE</em></strong> are mutually exclusive, so you have to set only one of them in order to properly handle a collation. + Os campos <strong><em>Intercalação</em></strong>, <strong><em>Localidade</em></strong>, <strong><em>LC_COLLATE & LC_CTYPE</em></strong> são mutuamente exclusivos, então você tem que definir apenas um deles a fim de manipular corretamente a intercalação. - Target data type - Tipo dado destino + Not defined + Não definido + + + ColorPickerWidget - The function to be assigned to a cast from <em><strong>typeA</strong></em> to <em><strong>typeB</strong></em> must have the following signature: <em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>. - A função a ser atribuída à uma moldagem do <em><strong>tipoA</strong></em> para o <em><strong>tipoB</strong></em> deve possuir a seguinte assinatura: <em><strong>tipoB</strong> funcao(<strong>tipoA</strong>, integer, boolean)</em>. + Form + Formulário - I&mplicit + Generate random color(s) - Conversion Func.: - Função de Conv.: + Alt+R + - E&xplicit + Select color - ClasseOperadoresWidget - - Default Class: - Classe Padrão: - - - Indexing: - Indexação: - + ColumnWidget - Elements - Elementos + Default Value: + Valor Padrão: - Elemente Type: - Tipo de Elemento: + E&xpression: + - Operator - Operador + &NOT NULL + - Function - Função + Se&quence: + - Storage - Armazenamento + Edit the underlying sequence's attributes + - Function: - Função: + Edit sequence + - Operator: - Operador: + Identity: + + + + ConfigurationForm - Support/Strategy: - Suporte/Estratégia: + pgModeler Configuration + Configuração do pgModeler - Recheck - Rechecar + &Apply + &Aplicar - Family: - Família: + &Cancel + &Cancelar - Storage Type - Tipo de Armazenamento + Defaults + Padrões - Object - Objeto + General + Geral - Type - Tipo + Plug-ins + Plugins - Support/Strategy - Suporte/Estratégia + Any modification made until now in the current section will be lost! Do you really want to restore default settings? + Qualquer modificação feita até agora na seção atual será perdida! Deseja realmente restaurar as configurações padrão? - Yes - Sim + Relationships + - No - Não + Appearance + - - - CodeCompletionWidget - Make persistent + Connections - Makes the widget closable only by ESC key or mouse click on other controls. + Snippets - SQL Keyword + In some cases restore the default settings related to it may solve the problem. Would like to do that? - (no items found.) + Restore - CodigoFonteWidget + ConnectionsConfigWidget - Version: - Versão: + Connections: + Conexões: - Type: - Tipo: + Create new connection + Criar nova conexão - Source code visualization - Visualização de Código-Fonte + Cancel edition + Cancelar edição - Generating source code... - Gerando código-fonte... + Edit selected connection + Editar conexão selecionada - -- SQL code unavailable for this type of object -- - -- Código SQL não disponível para este tipo de objeto. -- + Delete selected connection + Apagar conexão selecionada - - - CollationWidget - Form - Formulário + Connection Alias: + Apelido da Conexão: - Locale: - Localidade: + Connection DB: + BD Conexão: - Encoding: - Codificação: + Host/Port: + Servidor/Porta: - LC_COLLATE: - + User: + Usuário: - LC_CTYPE: - + Password: + Senha: - The fields <strong><em>Collation</em></strong>, <strong><em>Locale</em></strong>, <strong><em>LC_COLLATE & LC_CTYPE</em></strong> are mutually exclusive, so you have to set only one of them in order to properly handle a collation. - Os campos <strong><em>Intercalação</em></strong>, <strong><em>Localidade</em></strong>, <strong><em>LC_COLLATE & LC_CTYPE</em></strong> são mutuamente exclusivos, então você tem que definir apenas um deles a fim de manipular corretamente a intercalação. + Timeout: + Tempo limite: - Not defined - Não definido + second(s) + segundo(s) - - - ColorPickerWidget - Form - Formulário + SSL Mode: + Modo SSL: - Generate random color(s) - + Disable + Desabilitar - Alt+R - + Allow + Permitir - Select color - + Require + Requerir - - - ColumnWidget - Form - Formulário + AC verification + Verificação de AC - Default Value: - Valor Padrão: + Full verification + Verificação Completa - Not Null: - Não Nulo: + Client Certificate: + Certificado Cliente: - E&xpression: - + ~/.postgresql/postgresql.crt + - &NOT NULL - + Client Key: + Chave Cliente: - Se&quence: - + ~/.postgresql/postgresql.key + - - - ColunaWidget - Default Value: - Valor Padrão: + Root Certificate: + Certificado Raiz: - Not Null: - Não Nulo: + ~/.postgresql/root.crt + - - - ConfAparenciaWidget - Element: - Elemento: + Revoked Certs.: + Cert. Revogados: - Global: Font style - Global: Estilo de fonte + ~/.postgresql/root.crl + - Global: Constraints descriptor - Global: Descritor de restrições + Force GSSAPI + Forçar GSSAPI - Global: Object selection - Global: Seleção de objetos + Add + Adicionar - Global: Position hint text - Global: Texto informativo de posição + Update + Atualizar - Global: Position hint box - Global: Caixa do informativo de posição + Test + Testar - Global: Objects type - Global: Tipo de objetos + Success + Sucesso - Global: Lock arc - Global: Arco de cadeado + Edit database connections + - Global: Lock body - Global: Corpo do cadeado + Duplicate the selected connection + - Table: Schema name - Tabela: Nome de esquema + General + Geral - Table: Table name - Tabela: Nome de tabela + Other params: + - Table: Columns box - Tabela: Caixa de colunas + Specify additional connection parameters in the form [param]=[value]. These parameters are described in the <strong>libpq</strong> chapter at PostgreSQL docs. + - Table: Extended attributes box - Tabela: Caixa de atributos extendidos + Default for: + - Table: Title box - Tabela: Caixa de título + Automatically browses the named database when using this connection to manage databases on <strong>Manage</strong> view. + - Index: Descriptor - Índice: Descritor + Auto browse + - Trigger: Descriptor - Gatilho: Descritor + Diff + - View: Schema name - Visão: Nome de esquema - - - View: View name - Visão: Nome de visão + Export + Exportar - View: References box - Visão: Caixa de referências + Import + - View: Title box - Visão: Caixa de título + Validation + - View: Table / columns alias - Visão: Alias de tabela / coluna + Security + - View: Referenced column - Visão: Coluna referenciada + Kerberos Server: + - View: Referenced table - Visão: Tabela referenciada + Indicates in which operations (diff, export, import or validation) the connection is used if none is explicitly specified by the user. + - View: Reference descriptor - Visão: Descritor de referência + There is a connection being created or edited! Do you want to save it? + - Textbox: Body - Caixa de Texto: Corpo + Found %1 connection(s) + - Column: Column name - Coluna: Nome de coluna + No connections found + - Column: Descriptor - Coluna: Descritor + Edit connections + - Column: Included / Inherited by relationship - Coluna: Incluída / Herdada por relacionamento + Connection successfully established! + +Server details: + +PID: `%1' +Protocol: `%2' +Version: `%3' + + + + ConstraintWidget - Column: Protected - Coluna: Protegida + Constraint Type: + Tipo de Restrição: - Column (pk): Column name - Coluna (pk): Nome de coluna + Fill Factor: + Fator Preenc.: - Column (pk): Descriptor - Coluna (pk): Descritor + Match: + Confrontar: - Column (fk): Column name - Coluna (fk): Nome de coluna + Deferrable: + Postergável: - Column (fk): Descriptor - Coluna (fk): Descritor + Deferral: + Postergação: - Column (uq): Column name - Coluna (uq): Nome de coluna + ON DELETE: + - Column (uq): Descriptor - Coluna (uq): Descritor + ON UPDATE: + - Column (nn): Column name - Coluna (nn): Nome de coluna + Columns + Colunas - Column (nn): Descriptor - Coluna (nn): Descritor + Column: + Coluna: - Relationship: Descriptor - Relacionamento: Descritor + Referenced Columns + Colunas Referenciadas - Relationship: Label text - Relacionamento: Texto do rótulo + Table: + Tabela: - Relationship: Label box - Relacionamento: Caixa do rótulo + Column + Coluna - Relationship: Attribute text - Relacionamento: Texto do atributo + Type + Tipo - Relationship: Attribute descriptor - Relacionamento: Descritor do atributo + No inherit: + Sem herança: - Bold - Negrito + Exclude Elements + Excluir Elementos - Italic - Itálico + Columns which were included by relationship can not be added / removed manually from the primary key. If done such changes they can raise errors. To create primary key using columns included by relationship use the following options: identifier field, attributes & constraints tab or primary key tab on the relationship form. + Colunas que foram incluídas por relacionamento não podem ser adicionadas / removidas manualmente da chave primária. Se tais alterações forem feitas elas podem gerar erros. Para criar chaves primárias usando colunas incluídas por relacionamentos use as seguintes opções: campo identificador, aba atributos & restrições ou aba chave primária no formulário de relacionamento. - Colors: - Cores: + This attribute cannot be changed once the object is created. + - Font color / Fill color 1 - Cor da fonte / preenchimento 1 + Expression: + Expressão: - Fill color 2 - Cor de preenchimento 2 + Indexing: + Indexação: + + + ConversionWidget - Border color - Cor da borda + Source Encoding: + Codificação Origem: - Underline - Sublinhado + Target Encoding: + Codificação Destino: - Rule: Name - Regra: Nome + Default Conversion: + Conversão Padrão: - Rule: Descriptor - Regra: Descritor + The function to be assigned to an encoding conversion must have the following signature: <em>void function(integer, integer, cstring, internal, integer)</em>. + A função a ser atribuída a uma conversão de codificação deve possuir a seguinte assinatura: <em>void funcao(integer, integer, cstring, internal, integer)</em>. - Index: Name - Índice: Nome + Conversion Func.: + Função de Conv.: + + + CrashHandlerForm - Trigger: Name - Gatilho: Nome + Crash Handler + - Font: - Fonte: + Stack trace + Rastreamento de pilha - - - ConfConexoesWidget - Connections: - Conexões: + Input: + - Create new connection - Criar nova conexão + Load report file for analysis + - Cancel edition - Cancelar edição + Save the attached model file on the filesystem + - Edit selected connection - Editar conexão selecionada + pgModeler bug report (*.bug);;All files (*.*) + - Connection Alias: - Alias Conexão: + Load report + - Connection DB: - BD Conexão: + Save model + Salvar modelo - Host/Port: - Host/Porta: + Database model (*.dbm);;All files (*.*) + Modelo de banco de dados (*.dbm);; Todos os arquivos (*.*) - User: - Usuário: + Crash handler + - Password: - Senha: + Bug report analysis mode activated. + - Timeout: - Timeout: + Oops! pgModeler just crashed! + Oopa! O pgModeler acaba de travar! - second(s) - segundo(s) + We apologize for what happened! It is clear that a nasty bug caused that. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. + + + + CsvLoadWidget - SSL Mode: - Modo SSL: + Form + Formulário - Disable - Desativado + Load CSV + - Allow - Permitir + CSV File: + - Require - Requerido + Select output file + - AC verification - Verificação de AC + ... + - Full verification - Verificação Completa + Separator: + - Client Key: - Chave Cliente: + Use the first row as column names in the CSV file. By unchecking this option the first row is used as data. + - Revoked Certs.: - Cert. Revogados: + Columns in the first row + - Kerberus Server: - Servidor Kerberus: + Load + Carregar - Force GSSAPI - Forçar GSSAPI + Semicolon (;) + - Options: - Opções: + Comma (,) + - Add - Adicionar + Space + - Update - Atualizar + Tabulation + - Test - Testar + Other + - Delete selected connection - Excluir conexão selecionada + ; + - Client Certificate: - Certificado Cliente: + Text delimiter: + - Root Certificate: - Certificado Raiz: + " + - Success - Sucesso + Load CSV file + - Connection successfuly stablished! - Conexão efetuada com sucesso! + Comma-separted values (*.csv);;All files (*.*) + - ConfGeralWidget + CustomSQLWidget - Grid size: - Tamanho da grade: + Add custom SQL code + - Operation history: - Histórico de operações: + SQL code + - items - itens + Puts an SELECT command template at current cursor position. + - Save model every: - Salvar modelo a cada: + &SELECT + - minute(s) - minuto(s) + Puts an INSERT command template at current cursor position. + - Save widgets position - Salvar posição de widgets + &INSERT + - Save current session - Salvar sessão atual + Puts an UPDATE command template at current cursor position. + - Paper: - Papel: + &UPDATE + - Custom (Based on margins) - Personalizado (Baseado nas margens) + Puts an DELETE command template at current cursor position. + - Orientation: - Orientação: + &DELETE + - Portrait - Retrato + &Clear + - Landscape - Paisagem + Append SQL + - Margins: - Margens: + Append the SQL code at the very end of model definition. +Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE command. + - Milimeters - Milímetros + Append at end of model definition. + - Inches - Polegadas + Prepend SQL + - Centimeter - Centímetros + Prepend at beginning of model definition. + - Left: - Esq.: + <html><head/><body><p>Use custom commands with extreme caution because you can change the semantics of the entire model when running SQL validation or export processes. Additionally, depending on the amount of commands, those processes can have their performance sensibly degradated.</p></body></html> + - Left margin - Margem esquerda + Generic INSERT + - Top: - Topo: + Include serial columns + - Top margin - Margem topo + Exclude serial columns + - Right: - Dir.: - + Generic SELECT + + - Right margin - Margem direita + Table SELECT + - Bottom: - Base: + Generic UPDATE + - Bottom margin - Margem base + Table UPDATE + + + + Generic DELETE + + + + Table DELETE + - ConfigurationForm + DataManipulationForm - pgModeler Configuration - Configuração do pgModeler + Data Manipulation + - &Apply - &Aplicar + &Close + &Fechar - &Cancel - &Cancelar + Refresh listing + - Defaults - Padrões + F5 + - General - Geral + Save changes + - Style - Estilo + Ctrl+S + - Connetions - Conexões + Export results to CSV file + - Plug-ins - Plugins + Ctrl+X + - Confirmation - Confirmação + Undo modifications + - Any modification made until now in the current section will be lost! Do you really want to restore default settings? - Qualquer modificação feita até agora na seção atual será perdida! Deseja realmente restaurar as configurações padrão? + Ctrl+Z + - Relationships + Add empty rows - Appearance + Ins - Connections + Mark the selected rows to be deleted - Snippets + Del - - - ConnectionsConfigWidget - Form - Formulário + Duplicate the selected rows + - Connections: - Conexões: + Ctrl+D + - Create new connection - Criar nova conexão + Filter the result set + - Cancel edition - Cancelar edição + Table: + Tabela: - Edit selected connection - Editar conexão selecionada + Schema: + Esquema: - Delete selected connection - Apagar conexão selecionada + in + - Connection Alias: - Apelido da Conexão: + Hide views + - Connection DB: - BD Conexão: + Filter expression + - Host/Port: - Servidor/Porta: + Order && Limit + - User: - Usuário: + results (Use <strong>0</strong> for no limit) + - Password: - Senha: + Limit in: + - Timeout: - Tempo limite: + Add Item + Adicionar Item - second(s) - segundo(s) + Remove Item + Remover Item - SSL Mode: - Modo SSL: + Clear the order by columns list + - Disable - Desabilitar + Move selected item up + - Allow - Permitir + Move selected item down + - Require - Requerir + ASC + - AC verification - Verificação de AC + DESC + - Full verification - Verificação Completa + Column: + Coluna: - Client Certificate: - Certificado Cliente: + <strong>WARNING: </strong> There are some changed rows waiting the commit! Do you really want to discard them and retrieve the data now? + - ~/.postgresql/postgresql.crt - + Rows returned: <strong>%1</strong>&nbsp;&nbsp;&nbsp; + - Client Key: - Chave Cliente: + <em>(Limit: <strong>%1</strong>)</em> + - ~/.postgresql/postgresql.key - + none + - Root Certificate: - Certificado Raiz: + No objects found + - ~/.postgresql/root.crt - + Found %1 object(s) + - Revoked Certs.: - Cert. Revogados: + Views can't have their data handled through this grid, this way, all operations are disabled. + - ~/.postgresql/root.crl - + The selected table doesn't owns a primary key! Updates and deletes will be performed by considering all columns as primary key. <strong>WARNING:</strong> those operations can affect more than one row. + - Kerberus Server: - Servidor Kerberus: + This row is marked to be %1 + - Force GSSAPI - Forçar GSSAPI + deleted + - Options: - Opções: + updated + - Add - Adicionar + inserted + - Update - Atualizar + [binary data] + - Test - Testar + <strong>WARNING:</strong> Once commited its not possible to undo the changes! Proceed with saving? + - Success - Sucesso + delete + - Connection successfuly stablished! - Conexão estabelecida com sucesso! + update + - Edit database connections + insert - Duplicate the selected connection + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> - General - Geral + Copy items on the grid + - Other params: + Paste items on the grid - Specify additional connection parameters in the form [param]=[value]. These parameters are described in the <strong>libpq</strong> chapter at PostgreSQL docs. + Ctrl+V - Default for: + Browse referenced tables - Automatically browses the named database when using this connection to manage databases on <strong>Manage</strong> view. + Change the values of all selected cells at once - Auto browse + Ctrl+E - Diff + Add new rows from a CSV file - Export - Exportar + Copy as CSV + - Import + Copy as text - Validation + Copy items - Security + Pase items - Kerberos Server: + Browse tables - Indicates in which operations (diff, export, import or validation) the connection is used if none is explicitly specified by the user. + Duplicate row(s) - Connection successfuly stablished! - -Server details: - -PID: `%1' -Protocol: `%2' -Version: `%3' + Delete row(s) - There is a connection being created or edited! Do you want to save it? + Edit cell(s) - Found %1 connection(s) + Column + Coluna + + + Referenced tables - No connections found + (none) - Edit connections + Referrer tables - ConstraintWidget + DatabaseExplorerWidget Form - Formulário + Formulário - Constraint Type: - Tipo de Restrição: + Open the grid to visualize or edit data + - Check Expr.: - Expr.Checagem: + Data &Grid + - Fill Factor: - Fator Preenc.: + Alt+G + - Match: - Confrontar: + Open a new SQL execution pane + - Deferrable: - Postergável: + ... + - Deferral: - Postergação: + Ctrl+F6 + - ON DELETE: - + Update the objects tree + - ON UPDATE: - + Drop this database + - Columns - Colunas + Expands all items + Expandir todos os itens - Column: - Coluna: + Collapses all items + Recolher todos os itens - Referenced Columns - Colunas Referenciadas + Filters the currently loaded items in the tree by using a pattern and matching their names. If <strong>By OID</strong> is checked the pattern is interpreted as an integer value that represents the object id (OID). <br><br/><strong>HINT:</strong> if you need to search the entire database use the full refresh (<strong>Ctrl+F5</strong>) prior the filtering. + - Table: - Tabela: + Filter: + - Column - Coluna + By OID + - Type - Tipo + Attribute + Atributo - Columns which were included by relationship can not be added / removed manually from the primary key. If done such changes they will be ignored. To create primary key using columns included by relationship use the feature attributes, constraints and primary key on the relationship form. - Colunas as quais foram incluídas por relacionamento não podem ser adicionadas/removidas manualmente das chaves-primárias. Caso isso ocorra tais alterações serão ignoradas. Para criar chaves-primárias usando colunas incluídas por relacionamentos utilize o recurso de atributos, restrições e chave-primária no formulário de edição relacionamentos. + Value + - No inherit: - Sem herança: + Show raw attributes + - Exclude Elements - Excluir Elementos + (not found, OID: %1) + - Columns which were included by relationship can not be added / removed manually from the primary key. If done such changes they can raise errors. To create primary key using columns included by relationship use the following options: identifier field, attributes & constraints tab or primary key tab on the relationship form. - Colunas que foram incluídas por relacionamento não podem ser adicionadas / removidas manualmente da chave primária. Se tais alterações forem feitas elas podem gerar erros. Para criar chaves primárias usando colunas incluídas por relacionamentos use as seguintes opções: campo identificador, aba atributos & restrições ou aba chave primária no formulário de relacionamento. + -- Source code not generated! Hit F7 or middle-click the item to load it. -- + - This attribute cannot be changed once the object is created. + Admin. roles - Expression: - Expressão: + Alignment + - Indexing: - Indexação: + Analyze func. + - - - ConversaoCodificacaoWidget - Source Encoding: - Codificação Origem: + Arg. count + - Target Encoding: - Codificação Destino: + Arg. default count + - Convertion Function: - Função de Conversão: + Arg. defaults + - Default Conversion: - Conversão Padrão: + Arg. modes + - The function to be assigned to an encoding conversion must have the following signature: <em>void function(integer, integer, cstring, internal, integer)</em>. - A função a ser atribuída a uma conversão de codificação deve possuir a seguinte assinatura: <em>void funcao(integer, integer, cstring, internal, integer)</em>. + Arg. names + - - - ConversaoTipoWidget - Conversion Type: - Tipo da Conversão: + Arg. types + - Implicit - Implícita + Behavior type + - Assignment - Atribuição + By value + Por valor - Input / Output - Entrada / Saída + Cast type + - Convertion Function: - Função de Conversão: + Category + - The function to be assigned to a cast from <em><strong>typeA</strong></em> to <em><strong>typeB</strong></em> must have the following signature: <em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>. - A função a ser atribuída a uma conversão do <em><strong>tipoA</strong></em> para o <em><strong>tipoB</strong></em> deve possuir a seguinte assinatura: <em><strong>tipoB</strong> funcao(<strong>tipoA</strong>, integer, boolean)</em>. + Collatable + Intercalável - Source data type - Tipo dado origem + Collation + Intercalação - Target data type - Tipo dado destino + Comment + - - - ConversionWidget - Form - Formulário + Commutator Op. + - Source Encoding: - Codificação Origem: + Configuration + - Target Encoding: - Codificação Destino: + Conn. limit + - Default Conversion: - Conversão Padrão: + Constraint + Restrição - The function to be assigned to an encoding conversion must have the following signature: <em>void function(integer, integer, cstring, internal, integer)</em>. - A função a ser atribuída a uma conversão de codificação deve possuir a seguinte assinatura: <em>void funcao(integer, integer, cstring, internal, integer)</em>. + Create DB + - Conversion Func.: - Função de Conv.: + Create role + - - - CrashHandler - pgModeler Crash Handler - Gerenciador de erros do pgModeler + Curr. version + - Oops! pgModeler just crashed! - Oopa! O pgModeler acaba de travar! + Default + Padrão - Create - Criar + Default value + - &Cancel - &Cancelar + Definition + Definição - We apologize for what happened! It is clear that a nasty bug caused it. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. - Pedimos desculpas pelo ocorrido! Está claro que um bug desagradável causou isso. Por favor, preencha o formulário abaixo descrevendo suas ações antes do pgModeler fechar inesperadamente. Isso ajudará na eliminação do bug e melhoria do software. + Delimiter + - Report - Relatório + Dest. type + - Actions made before the crash: - Ações feitas antes do travamento: + Dimension + Dimensão - Loaded Model - Modelo Carregado + Directory + - Attach the below database model file that possibly generates the crash. - Anexar abaixo o modelo de banco de dados que possivelmente gera o travamento. + Dest. encoding + - Stack trace - Rastreamento de pilha + Element + Elemento - pgModeler crash file analysis - Análise de arquivo de travamento do pgModeler + Encoding + - Error - Erro + Encrypted + Encriptado - File: %1 -Size: %2 bytes - - - Arquivo: %1 -Tamanho: %2 bytes - - + Enumerations + Enumerações - Information - Informação + Exec. cost + - Crash report successfuly generated! Please send the file '%1' to %2 in order be debugged. Thank you for the collaboration! - Relatório de travamento gerado com sucesso! Por favor, envie o arquivo '%1' para %2 a fim de que possa ser depurado. Obrigado pela colaboração! + Expression + Expressão - - - CrashHandlerForm - Crash Handler + Op. family - Stack trace - Rastreamento de pilha + Final func. + - Input: - + Function + Função - Load report file for analysis + Func. type - Save the attached model file on the filesystem + Handler func. - pgModeler bug report (*.bug);;All files (*.*) + Handles type - Load report + Hashes - Save model - Salvar modelo + Index type + - Database model (*.dbm);;All files (*.*) - Modelo de banco de dados (*.dbm);; Todos os arquivos (*.*) + Inherit + - Crash handler + Ini. condition - Bug report analysis mode activated. + Inline func. - Oops! pgModeler just crashed! - Oopa! O pgModeler acaba de travar! + Input func. + - We apologize for what happened! It is clear that a nasty bug caused that. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. + Internal length - - - CustomSQLWidget - Add custom SQL code + Interval type - SQL code + I/O cast - Puts an SELECT command template at current cursor position. + Join func. - &SELECT - + Language + Linguagem - Puts an INSERT command template at current cursor position. + LC COLLATE - &INSERT + LC CTYPE - Puts an UPDATE command template at current cursor position. + Leak proof - &UPDATE + Left type - Puts an DELETE command template at current cursor position. - + Length + Comprimento - &DELETE - + Library + Biblioteca - &Clear + Can login - Append SQL + Materialized - Append the SQL code at the very end of model definition. -Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE command. + Member roles - Append at end of model definition. + Merges - Prepend SQL - + Name + Nome - Prepend at beginning of model definition. + Negator op. - <html><head/><body><p>Use custom commands with extreme caution because you can change the semantics of the entire model when running SQL validation or export processes. Additionally, depending on the amount of commands, those processes can have their performance sensibly degradated.</p></body></html> + Not null - Type: - Tipo: + Object type + - Generic INSERT + OID - Include serial columns + With OIDs - Exclude serial columns + Old version - Generic SELECT - + Operator + Operador - Table SELECT + Operator func. - Generic UPDATE + Output func. - Table UPDATE + Owner - Generic DELETE + Owner column - Table DELETE + Parents - - - DataManipulationForm - Data Manipulation + Password - &Close - &Fechar + Permissions + Permissões - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> - + Precision + Precisão - Refresh listing - + Preferred + Preferido - Refresh + Range attributes - F5 + Receive func. - Save changes + Ref. roles - Save - Salvar - - - Ctrl+S + Replication - Copy the selection as CSV buffer + Restriction func. - Copy - Copiar - - - Ctrl+C + Return type - Export results to CSV file + Returns SETOF - Export - Exportar - - - Ctrl+X + Right type - Undo modifications + Rows amount - Undo - Desfazer + Schema + Esquema - Ctrl+Z + Security type - Add empty rows + Send func. - Add - Adicionar - - - Ins + Sort op. - Mark the selected rows to be deleted + Source type - Delete + Src. encoding - Del + State type - Duplicate the selected rows - + Storage + Armazenamento - Duplicate - + Superuser + Superusuário - Ctrl+D - + Tablespace + Espaço de Tabela - Filter the result set + Type mod. in func. - Table: - Tabela: - - - Schema: - Esquema: + Type mod. out func. + - in + Transition func. - Hide views + Trusted - Filter expression - + Type + Tipo - Order && Limit + Type attribute - results (Use <strong>0</strong> for no limit) + Types - Limit in: + Unlogged - Add Item - Adicionar Item + Validator func. + - Remove Item - Remover Item + Validity + Validade - Clear the order by columns list + Windows func. - Move selected item up + false - Move selected item down + true - ASC + Cache value - DESC + Cycle - Column: - Coluna: - - - <strong>WARNING: </strong> There are some changed rows waiting the commit! Do you really want to discard them and retrieve the data now? + Increment - Rows returned: <strong>%1</strong>&nbsp;&nbsp;&nbsp; + Max. value - <em>(Limit: <strong>%1</strong>)</em> + Min. value - none + Start value - No objects found + Last value - Found %1 object(s) - + Subtype + Subtipo - Views can't have their data handled through this grid, this way, all operations are disabled. + Op. class - The selected table doesn't owns a primary key! Updates and deletes will be performed by considering all columns as primary key. <strong>WARNING:</strong> those operations can affect more than one row. + Canonical func. - This row is marked to be %1 + Subtype diff func. - deleted + Deferrable - updated + For each row - inserted - + Firing + Disparo - [binary data] + On insert - <strong>WARNING:</strong> Once commited its not possible to undo the changes! Proceed with saving? + On delete - delete + On update - update + On truncate - insert - + Arguments + Argumentos - - - DatabaseExplorerWidget - Form - Formulário + Table + Tabela - Toggles the display of system objects. + Trigger func. - System - + Columns + Colunas - Toggles the display of extension objects + Condition - Extension + Deferment - Open the grid to visualize or edit data - + Event + Evento - Data &Grid + Execution mode - Alt+G + Commands - Open a new SQL execution pane + Position - ... + Comparison type - Ctrl+F6 + Ref. columns - Update the objects tree + Expressions - Ctrl+S + Fill factor - Drop this database + No inherit - Expands all items - Expandir todos os itens + Op. classes + - Collapses all items - Recolher todos os itens + Operators + Operadores - Filters the currently loaded items in the tree by using a pattern and matching their names. If <strong>By OID</strong> is checked the pattern is interpreted as an integer value that represents the object id (OID). <br><br/><strong>HINT:</strong> if you need to search the entire database use the full refresh (<strong>Ctrl+F5</strong>) prior the filtering. + Ref. table - Filter: - + Unique + Único - By OID + Predicate - Attribute - Atributo - - - Value + Collations - Show raw attributes + Inherited - (not found, OID: %1) + Snippets - -- Source code not generated! Hit F7 or middle-click the item to load it. -- + Drop object - Admin. roles + Drop cascade - Alignment + Truncate - Analyze func. + Trunc. cascade - Arg. count + Show data - Arg. default count + Reload properties - Arg. defaults - + Update + Atualizar - Arg. modes + Rename + Renomear + + + Source code - Arg. names + Quick refresh - Arg. types + Full refresh - Behavior type + Do you really want to drop the object <strong>%1</strong> <em>(%2)</em>? - By value - Por valor + Do you really want to <strong>cascade</strong> drop the object <strong>%1</strong> <em>(%2)</em>? This action will drop all the other objects that depends on it. + - Cast type + Do you really want to truncate the table <strong>%1</strong>? - Category + Do you really want to <strong>cascade</strong> truncate the table <strong>%1</strong>? This action will truncate all the tables that depends on it? - Collatable - Intercalável + Src. table: %1 +Src. column(s): %2 + - Collation - Intercalação + Ref. table: %1 +Ref. column(s): %2 + - Comment + -- Source code genaration for buil-in and base types currently unavailable -- - Commutator Op. + -- Source code unavailable for the object %1 (%2). -- - Configuration + Toggle the display of filter widget as well the system/extension objects. - Conn. limit + Sort items alphabetically. When unchecked, items are sorted by OID. - Constraint - Restrição + Sort alphabetically + - Create DB + Client encoding - Create role + Configuration file - Curr. version + Data directory - Default - Padrão + Dynamic library path + - Default value + Dynamic shared memory - Definition - Definição + Hba file + - Delimiter + Listen addresses - Dest. type + Max. connections - Dimension - Dimensão + Listen port + - Directory + Server encoding - Dest. encoding + SSL - Element - Elemento + SSL ca file + - Encoding + SSL cert file - Encrypted - Encriptado + SSL crl file + - Enumerations - Enumerações + SSL key file + - Exec. cost + Server version - Expression - Expressão + Ident file + - Op. family + Password encryption - Final func. + Connection ID - Function - Função + Server PID + - Func. type + Server protocol - Handler func. + Referrers - Handles type + Identity - Hashes + Command - Index type + USING expr. - Inherit + CHECK expr. - Ini. condition + Roles + Papéis + + + RLS enabled - Inline func. + RLS forced - Input func. + Show objects filter - Internal length + Show system objects - Interval type + Show extension objects - I/O cast + -- Source code unavailable for this kind of object -- - Join func. + Also restart sequences - Language - Linguagem + Warning + - LC COLLATE + You're running a demonstration version! The data manipulation feature is available only in the full version! - LC CTYPE + <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? + + + DatabaseImportForm - Leak proof + Settings - Left type + Options - Length - Comprimento + Connection: + Conexão: - Library - Biblioteca + Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types, extensions. + - Can login + Automatically resolve dependencies - Materialized + Random colors will be assigned to imported relationships facilitating the identification of links between tables mainly in large models. - Member roles + Random colors for relationships - Merges + Enables the import of system built-in objects. It's recommend to select only those objects that are directly referenced by the ones to be imported. WARNING: Try to import a huge set of system objects can bloat the resultant model or even crash pgModeler due to memory/cpu overuse. - Name - Nome + Import system objects + - Negator op. + Enables the import of objects created by extensions. Generally there is no need to check this option but if there are objects in the database that directly references this category of objects this mode must be enabled. - Not null + Import extension objects - Object type + pgModeler ignores import errors and will try to create as many as possible objects. By checking this option the import operation will be not aborted but an incomplete model will be constructed. This option generates a log file on pgModeler's temp directory. - OID + Ignore import errors - With OIDs + All catalog queries as well the created objects' source code are printed to standard output (stdout). - Old version + Debug mode - Operator - Operador + Create all imported objects in the current working model instead of create a new one. + - Operator func. + Import objects to the working model - Output func. + Database + Banco de Dados + + + Filter: - Owner + Filter object by it's OID - Owner column + By OID - Parents + Select all objects - Password + ... - Permissions - Permissões + Clear object selection + - Precision - Precisão + Expands all items + Expandir todos os itens - Preferred - Preferido + Collapses all items + Recolher todos os itens - Range attributes + Output - Receive func. - + Progress label... + Rótulo de progresso... - Ref. roles - + Cancel + Cancelar - Replication + &Import - Restriction func. - + &Close + &Fechar - Return type + <strong>ATTENTION:</strong> You are about to import objects to the current working model! This action will cause irreversible changes to it even in case of critical errors during the process. Do you want to proceed? - Returns SETOF + Importing process aborted! - Right type + Importing process canceled by user! - Rows amount + Importing process sucessfuly ended! - Schema - Esquema + No databases found + - Security type + Found %1 database(s) - Send func. + Retrieving objects from database... - Sort op. + Retrieving cluster level objects... - Source type + Retrieving objects of schema `%1'... - Src. encoding + This is a PostgreSQL built-in data type and cannot be imported. - State type + This is a pgModeler's built-in object. It will be ignored if checked by user. - Storage - Armazenamento + Import database + - Superuser - Superusuário + Retrieving objects of `%1' (%2)... + + + + DatabaseImportHelper - Tablespace - Espaço de Tabela + Retrieving system objects... `%1' + - Type mod. in func. + Retrieving objects... `%1' - Type mod. out func. + Creating object `%1' (%2)... - Transition func. + Import failed to recreate some objects in `%1' tries. - Trusted + Creating permissions for object `%1' (%2)... - Type - Tipo + Creating columns permissions... + - Type attribute + Updating relationships of `%1' (%2)... - Types + Validating relationships... - Unlogged + The database import ended but some errors were generated and saved into the log file `%1'. This file will last until pgModeler quit. - Validator func. + Creating table inheritances... - Validity - Validade + Destroying unused detached columns... + - Windows func. + Assigning sequences to columns... - false + Creating object `%1' (%2), oid `%3'... - true - - - - Cache value + Trying to recreate object `%1' (%2), oid `%3'... + + + DatabaseModel - Cycle + The demonstration version can create only `%1' instances of each object type! You've reach this limit for the type: `%2' - Increment + Loading: `%1' (%2) - Max. value + Validating relationships... - Min. value + Saving object `%1' (%2) - Start value + Saving metadata of the object `%1' (%2) - Last value + Metadata file successfully saved! - Subtype - Subtipo + Process successfully ended but no metadata was saved! + - Op. class + Creating object `%1' (%2) - Canonical func. + Object `%1' (%2) already exists. Ignoring. - Subtype diff func. + Loading metadata for object `%1' (%2) - Deferrable + Object `%1' (%2) not found. Ignoring metadata. - For each row + Metadata file successfully loaded! - Firing - Disparo + Generating %1 code: `%2' (%3) + + + + DatabaseWidget - On insert - + Template DB: + DB Modelo: - On delete - + Model Author: + Autor do Modelo: - On update - + Encoding: + Codificação: - On truncate - + LC_COLLATE: + - Arguments - Argumentos + Connections: + Conexões: - Table - Tabela + LC_CTYPE: + - Trigger func. - + Default + Padrão - Columns - Colunas + Attributes + Atributos - Condition + Default Objects - Deferment - + Tablespace: + Esp. de Tabela: - Event - Evento + Schema: + Esquema: - Execution mode - + Collation: + Intercalação: - Commands + Owner: - Position + The fields <strong>LC_COLLATE</strong> and <strong>LC_CTYPE</strong> have pre-configured values based upon the running system. You can freely modify those values if you intend to export the model to another host. - Comparison type + Use the above fields to specify the default attributes assigned to new objects created on the database model. Leaving a field empty will cause PostgreSQL to use the default values when exporting the model. - Ref. columns - + Options: + Opções: - Expressions + Allow connections - Fill factor + Is template + + + DomainWidget - No inherit - + Default Value: + Valor Padrão: - Op. classes - + Name: + Nome: - Operators - Operadores + Attributes + Atributos - Ref. table + Not null - Unique - Único + Check constraints + - Predicate - + Expression: + Expressão: - Collations - + Name + Nome - Inherited - + Expression + Expressão + + + DonateWidget - Snippets - + Form + Formulário - Drop object + Donate to pgModeler - Drop cascade + Hide this widget - Truncate + ... - Trunc. cascade + <html><head/><body><p>pgModeler is brought to you thanks to a <span style=" font-style:italic;">great effort to create and distribute a quality product</span>. This project is reaching out levels of maturity never imagined. All this is the result of a joint work between its author and the <span style=" font-weight:600;">Open Source community</span>. <br/><br/>This software has a long way to go yet and with your help we'll keep maintaining the good job and bringing new improvements on each release. If you did like pgModeler and thinks it deserves a contribution please make a donation!</p></body></html> - Show data + I want to help! + + + ElementsWidget - Reload properties - + Form + Formulário - Update - Atualizar + Column: + Coluna: - Rename - Renomear + Expression: + Expressão: - Source code - + Collation: + Intercalação: - Quick refresh - + Operator Class: + Classe de Operadores: - Full refresh - + Operator: + Operador: - Do you really want to drop the object <strong>%1</strong> <em>(%2)</em>? - + Sorting: + Ordenação: - Do you really want to <strong>cascade</strong> drop the object <strong>%1</strong> <em>(%2)</em>? This action will drop all the other objects that depends on it. - + Ascending + Ascendente - Do you really want to truncate the table <strong>%1</strong>? - + Descending + Descendente - Do you really want to <strong>cascade</strong> truncate the table <strong>%1</strong>? This action will truncate all the tables that depends on it? - + Nulls first + Nulos primeiro - Src. table: %1 -Src. column(s): %2 - + Element + Elemento - Ref. table: %1 -Ref. column(s): %2 - + Type + Tipo - -- Source code genaration for buil-in and base types currently unavailable -- - + Operator Class + Classe de Operadores - -- Source code unavailable for the object %1 (%2). -- - + Sorting + Ordenação - - - DatabaseImportForm - Database Import - + Nulls First + Nulos Primeiro - Database import - + Collation + Intercalação - Settings - + Operator + Operador - Options - + Expression + Expressão - Connection: - Conexão: + Yes + Sim - Origin point: - + No + Não + + + EventTriggerWidget - Starting point where objects will be put. - + Event: + Evento: - Tables per row: - + Function: + Função: - Tables per row + Filter - Spacing: + Tag: - Schemas per row + Tag command + + + Exception - Spacing between objects - + Assignment of a pseudo-type to the type of the column! + Atribuição de um pseudo-tipo ao tipo da coluna! - Schemas per row: - + Assignment of a precision greater than the length of the type! + Atribuição de precisão maior do que o comprimento do tipo! - Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types, extensions. - + Assignment of an invalid precision to type time, timestamp or interval. The precision in this case must be equal to or less than 6! + Atribuição de precisão inválida a um tipo time, timestamp ou interval. A precisão neste caso deve ser igual ou inferior a 6! - Automatically resolve dependencies - - - - Random colors will be assigned to imported relationships facilitating the identification of links between tables mainly in large models. - - - - Random colors for relationships - - - - Enables the import of system built-in objects. It's recommend to select only those objects that are directly referenced by the ones to be imported. WARNING: Try to import a huge set of system objects can bloat the resultant model or even crash pgModeler due to memory/cpu overuse. - - - - Import system objects - - - - Enables the import of objects created by extensions. Generally there is no need to check this option but if there are objects in the database that directly references this category of objects this mode must be enabled. - - - - Import extension objects - - - - pgModeler ignores import errors and will try to create as many as possible objects. By checking this option the import operation will be not aborted but an incomplete model will be constructed. This option generates a log file on pgModeler's temp directory. - - - - Ignore import errors - - - - All catalog queries as well the created objects' source code are printed to standard output (stdout). - - - - Debug mode - - - - Create all imported objects in the current working model instead of create a new one. - - - - Import objects to the working model - - - - Database - Banco de Dados - - - Filter: - - - - Filter object by it's OID - - - - By OID - - - - Select all objects - - - - ... - - - - Clear object selection - - - - Expands all items - Expandir todos os itens - - - Collapses all items - Recolher todos os itens - - - Output - - - - Progress label... - Rótulo de progresso... - - - Cancel - Cancelar - - - &Import - - - - &Close - &Fechar - - - <strong>ATTENTION:</strong> You are about to import objects to the current working model! This action will cause irreversible changes to it even in case of critical errors during the process. Do you want to proceed? - - - - Importing process aborted! - - - - Importing process canceled by user! - - - - Importing process sucessfuly ended! - - - - No databases found - - - - Found %1 database(s) - - - - Retrieving objects from database... - - - - Retrieving cluster level objects... - - - - Retrieving objects of schema `%1'... - - - - Retrieving objects of table `%1'... - - - - This is a PostgreSQL built-in data type and cannot be imported. - - - - This is a pgModeler's built-in object. It will be ignored if checked by user. - - - - - DatabaseImportHelper - - Retrieving system objects... `%1' - - - - Retrieving objects... `%1' - - - - Creating object `%1' (%2)... - - - - Trying to recreate object `%1' (%2)... - - - - Import failed to recreate some objects in `%1' tries. - - - - Creating permissions for object `%1' (%2)... - - - - Creating columns permissions... - - - - Updating relationships of `%1' (%2)... - - - - Validating relationships... - - - - The database import ended but some errors were generated and saved into the log file `%1'. This file will last until pgModeler quit. - - - - Creating table inheritances... - - - - Destroying unused detached columns... - - - - Assigning sequences to columns... - - - - - DatabaseModel - - Loading object: %1 (%2) - Carregando objeto: %1 (%2) - - - Generating %1 of the object: %2 (%3) - Gerando %1 do objeto: %2 (%3) - - - The demonstration version can create only `%1' instances of each object type! You've reach this limit for the type: `%2' - - - - Loading: `%1' (%2) - - - - Validating relationships... - - - - Generating %1 of the object `%2' (%3) - - - - Saving object `%1' (%2) - - - - Saving metadata of the object `%1' (%2) - - - - Metadata file successfully saved! - - - - Process successfully ended but no metadata was saved! - - - - Creating object `%1' (%2) - - - - Object `%1' (%2) already exists. Ignoring. - - - - Loading metadata for object `%1' (%2) - - - - Object `%1' (%2) not found. Ignoring metadata. - - - - Metadata file successfully loaded! - - - - - DatabaseWidget - - Form - Formulário - - - Template DB: - DB Modelo: - - - Model Author: - Autor do Modelo: - - - Encoding: - Codificação: - - - LC_COLLATE: - - - - Connections: - Conexões: - - - LC_CTYPE: - - - - Default - Padrão - - - Attributes - Atributos - - - Default Objects - - - - Tablespace: - Esp. de Tabela: - - - Schema: - Esquema: - - - Collation: - Intercalação: - - - Owner: - - - - The fields <strong>LC_COLLATE</strong> and <strong>LC_CTYPE</strong> have pre-configured values based upon the running system. You can freely modify those values if you intend to export the model to another host. - - - - Use the above fields to specify the default attributes assigned to new objects created on the database model. Leaving a field empty will cause PostgreSQL to use the default values when exporting the model. - - - - - DomainWidget - - Form - Formulário - - - Default Value: - Valor Padrão: - - - Constraint - Restrição - - - Name: - Nome: - - - Not Null: - Não Nulo: - - - Check Expr.: - Expr.Checagem: - - - - DominioWidget - - Default Value: - Valor Padrão: - - - Constraint Name: - Nome da Restrição: - - - Check Expression: - Expressão de Checagem: - - - Not Null: - Não Nulo: - - - - DonateWidget - - Form - Formulário - - - Donate to pgModeler - - - - Hide this widget - - - - ... - - - - <html><head/><body><p>pgModeler is brought to you thanks to a <span style=" font-style:italic;">great effort to create and distribute a quality product</span>. This project is reaching out levels of maturity never imagined. All this is the result of a joint work between its author and the <span style=" font-weight:600;">Open Source community</span>. <br/><br/>This software has a long way to go yet and with your help we'll keep maintaining the good job and bringing new improvements on each release. If you did like pgModeler and thinks it deserves a contribution please make a donation!</p></body></html> - - - - I want to help! - - - - - ElementsWidget - - Form - Formulário - - - Column: - Coluna: - - - Expression: - Expressão: - - - Collation: - Intercalação: - - - Operator Class: - Classe de Operadores: - - - Operator: - Operador: - - - Sorting: - Ordenação: - - - Ascending - Ascendente - - - Descending - Descendente - - - Nulls first - Nulos primeiro - - - Element - Elemento - - - Type - Tipo - - - Operator Class - Classe de Operadores - - - Sorting - Ordenação - - - Nulls First - Nulos Primeiro - - - Collation - Intercalação - - - Operator - Operador - - - Expression - Expressão - - - Yes - Sim - - - No - Não - - - - EspacoTabelaWidget - - Directory: - Diretório: - - - - EventTriggerWidget - - Event: - Evento: - - - Function: - Função: - - - Filter - - - - Tag: - - - - Tag command - - - - - Excecao - - Insufficient memory space to allocate the object! - Espaço em memória insuficiente para alocar o objeto! - - - Assignment of a pseudo-type to the type of the column! - Atribuição de um pseudo-tipo ao tipo da coluna! - - - Zero length assignment! - Atribuição de comprimento igual a zero! - - - Assignment of a precision greater than the length of the type! - Atribuição de precisão maior do que o comprimento do tipo! - - - Assignment of an invalid precision to type time, timestamp or interval. The precision in this case must be equal to or less than 6! - Atribuição de precisão inválida a um tipo time, timestamp ou interval. A precisão neste caso deve ser igual ou inferior a 6! - - - Assignment of a not allocated column to object '%1' (%2)! - Atribuição de coluna não alocada ao objeto '%1' (%2)! - - - Reference to a column which index is out of the capacity of the column list! - Referência a uma coluna com índice fora da capacidade da lista de colunas! - - - Assignment of not allocated object! - Atribuição de um objeto não alocado! - - - Assignment of a not allocated schema to object '%1' (%2)! - Atribuição de um esquema não alocado ao objeto '%1' (%2)! - - - The object '%1' (%2) has inconsistent configuration (invalid SQL/XML definition)! - O objeto '%1' (%2) possui configuração inconsistente (definição SQL/XML inválida)! - - - The object '%1' (%2) already exists in the list of elements of the same type in the object '%3' (%4)! - O objeto '%1' (%2) já existente na lista de elementos desse mesmo tipo no objeto '%3' (%4)! - - - The object '%1' (%2) can't be assigned because there is already exists in the container object '%3'! - O objeto '%1' (%2) não pode ser atribuído pois já existe no container de objetos '%3'! - - - Assignment of object of an invalid type! - Atribuição de objeto de tipo inválido! - - - Removing an object of an invalid type! - Remoção de objeto de tipo inválido! - - - Obtaining an object of an invalid type! - Obtenção de um objeto com tipo inválido! - - - Assignment of empty name to table return type! - Atribuição de nome vazio ao tipo de retorno de tabela! - - - The insertion of the parameter '%1' will not be possible because there is another parameter with same name in the function '%2'! - A inserção do parâmetro '%1' não será possível pois já existe outro parâmetro com mesmo nome na função '%2'! - - - The insertion of the table return type '%1' will not be possible because there is another return type with the same name in the '%2'! - A inserção do tipo de retorno de tabela '%1' não será possível pois já existe outro tipo de retorno com mesmo nome na função '%2'! - - - Reference to a parameter which index is out of the parameter list capacity! - Referência a um parâmetro com índice fora da capacidade da lista de parâmetros! - - - Reference to an event which does not belongs to trigger! - Referência a um evento não pertecente ao gatilho! - - - The column '%1' can't be assigned to the trigger '%2' because does not belongs to the trigger parent table! - A coluna '%1' não pode ser atribuída ao gatilho '%2' pois a mesma não pertence à tabela pai do gatilho! - - - Assignment of a not allocated function to object '%1' (%2)! - Atribuição de função não alocada ao objeto '%1' (%2)! - - - Assignment of a function which return type is different from 'trigger'! - Atribuição de função com tipo de retorno diferente de 'trigger'! - - - Assignment of a function which parameter count is invalid to the object '%1' (%2)! - Atribuição de função com número de parâmetros inválido ao objeto '%1' (%2)! - - - Assignment of a function which language is invalid! - Atribuição de função com linguagem inválida! - - - Assignment of not allocated table to object '%1' (%2)! - Atribuição de tabela não alocada ao objeto '%1' (%2)! - - - Reference to an argument which index is out of argument list capacity! - Referência a um argumento com índice fora da capacidade da lista de argumentos! - - - Insertion of a column which name is already registered to another column of the object! - Inserção de coluna com nome já registrado em outra coluna do objeto! - - - Assignment of empty name to an object! - Atribuição de nome vazio a um objeto! - - - Assignment of invalid name to an object! - Atribuição de nome inválido a um objeto! - - - Assignment of schema object which type is invalid! - Atribuição de um objeto esquema com tipo inválido! - - - Assignment of tablespace object with invalid type! - Atribuição de objeto espaço de tabela com tipo inválido! - - - Assignment of tablespace to an invalid object! - Atribuição de um espaço de tabela a um objeto de tipo inválido! - - - Assignment of tablespace to a constraint which type is invalid! To belong to a tablespace the constraint must be a primary key or unique! - Atribuição de um objeto espaço de tabela a uma restrição de tipo inválido! A restrição deve ser uma chave-primária ou única para pode pertencer a um espaço de tabela! - - - Assignment of owner object which type is invalid! - Atribuição de um objeto papel com tipo inválido! - - - Assignment of owner to an invalid object! - Atribuição de um dono a um objeto de tipo inválido! - - - Reference to a function with invalid type! - Referência a uma função com tipo inválido! - - - Reference to an argument of the operator with invalid type! - Referência a um argumento do operador com tipo inválido! - - - Reference to an operator with invalid type! - Referência a um operador com tipo inválido! - - - Assigment of value to an invalid option type on role! - Atribuição de valor a uma opção de tipo inválido no papel! - - - Reference to an invalid role type! - Referência a um tipo de papel inválido! - - - The insertion of the role '%1' is not possible because this is already being referenced by role '%2'! - A inserção do papel '%1' não será possível pois este já está sendo referenciado pelo papel '%2'! - - - Reference redundance detected by having the role '%1' referencing the role '%2'! - Referência redundante detectada ao fazer com que o papel '%1' referencie o papel '%2'! - - - The role '%1' can not be listed as a member of itself! - O papel '%1' não pode ser relacionado com um membro dele mesmo! - - - Reference to a paper which index is out of paper list capacity! - Referência a um papel com índice fora da capacidade da lista de papéis! - - - Insertion of null command to the rule! - Inserção de comando nulo à regra! - - - Reference to a command which index is out of the command list capacity! - Referência a um comando com índice fora da capacidade da lista de comandos! - - - Is not possible to create a self generalization/dependecy relationship! The table can not inherit or copy their own attributes! - Não é possível criar um auto-relacionamento de generalização ou dependência! A tabela não pode herdar ou copiar seus próprios atributos! - - - Assignment of an object that already belongs to another table! - Atribuição de um objeto o qual já pertence a outra tabela! - - - Assignment of a schema to the sequence which differs from the schema of the owner table! - Atribuição de esquema à seqüência o qual difere do esquema da tabela possuidora! - - - Assignment of an invalid value to one of the sequence attributes! - Atribuição de valor inválido a um dos atributos da seqüência! - - - Assignment of a minimum value to the sequence which is greater than the maximum value! - Atribuição de valor mínimo da seqüência maior do que o valor máximo! - - - Assignment of a start value to the sequence which is extrapolating the range defined by minimum and maximum values​​! - Atribuição de valor de início da seqüência extrapolando o intervalo definido pelos valores mínimo e máximo! - - - Assignment of a null increment value to the sequence! - Atribuição de incremento de seqüência com valor nulo! - - - Assignment of null cache value to the sequence! - Atribuição de cache de seqüência com valor nulo! - - - Assignment of owner table which is not in the same schema as the sequence '%1'! - Atribuição de tabela possuidora a qual não faz parte do mesmo esquema da seqüência '%1'! - - - Assignment of owner table which does not belong to the same owner of the sequence '%1'! - Atribuição de tabela possuidora a qual não pertence ao mesmo dono da seqüência '%1'! - - - Assignment of a nonexistent owner column to the sequence '%1'! - Atribuição de coluna possuidora inexistente à seqüência '%1'! - - - Assignment of an owner column to the sequence '%1' that is not related to any table! - Atribuição de uma coluna possuidora a sequencia '%1' a qual não está relacionada a nenhuma tabela! - - - Reference to a label which index is out of labels list capacity! - Referência a um rótulo com índice fora da capacidade da lista de rótulos! - - - Allocation of object with invalid type! - Alocação de objeto com tipo inválido! - - - Assignment of a function with invalid return type to object '%1' (%2)! - Atribuição de função com tipo de retorno inválido ao objeto '%1' (%2)! - - - Assignment of a function with invalid parameter(s) type(s) to object '%1' (%2)! - Atribuição de função com tipo de parâmetro(s) inválido(s) ao objeto '%1' (%2)! - - - Assignment of not allocated language! - Atribuição de linguagem não alocada! - - - Assignment of language object which type is invalid! - Atribuição de linguagem com tipo inválido! - - - Reference to data type with an index outside the capacity of data types list! - Referência a tipo de dado com índice fora da capacidade da lista de tipos de dados! - - - Assignment of a null type to to object '%1' (%2)! - Atribuição de tipo nulo ao objeto '%1' (%2)! - - - Assignment of invalid type to the object! - Atribuição de um tipo inválido ao objeto! - - - Assignment of an empty directory to object '%1' (%2)! - Atribuição de um diretório vazio ao objeto: '%1' (%2)! - - - Obtaining types with invalid quantity! - Obtenção de tipos com quantidade inválida! - - - Insertion of item which already exists in the attributes list of the type! - Inserção de item já existente na lista de atibutos do tipo! - - - Insertion of invalid item in the attributes list of the type! - Inserção de item inválido na lista de atibutos do tipo! - - - Insertion of item which already exists in the enumarations list of the type! - Inserção de item já existente na lista de enumerações do tipo! - - - Insertion of invalid item in the enumerations list of the type! - Inserção de item inválido na lista de emumerações do tipo! - - - Reference to an attribute which index is out of the attributes list capacity! - Referência a um atributo com índice fora da capacidade da lista de atributos! - - - Reference to an enumeration which index is out of the enumerations list capacity! - Referência a uma enumeração com índice fora da capacidade da lista de enumerações! - - - Assignment of invalid configuration to the type! - Atribuição de configuração inválida ao tipo! - - - The data type '%1' can not be assigned because it already exists in the types list of the aggregate function '%2'! - O tipo de dado '%1' não pode ser atribuído pois o mesmo já existente na lista de tipos da função de agregação '%2'! - - - Assignment of an operator which input type count is invalid to aggregate function! - Atribuição de operador a uma função de agregação com quantidade de tipos de entrada inválida! - - - Assigment of an operator which types of arguments is invalid! - Atribuição de operador com argumentos de tipos inválidos! - - - Assignment of system reserved name to the object '%1' (%2)! - Atribuição de nome reservado pelo sistema ao objeto '%1' (%2)! - - - One function with invalid configuration is been used by the object '%1' (%2)! - Uma função de configuração inválida está sendo usada pelo objeto '%1' (%2)! - - - Assignment of invalid id to the user! - Atribuição de id de usuário inválido! - - - Assignment of an invalid strategy/support number to an operator class element! - Atribuição de valor inválido ao número de estratégia/suporte do elemento de classe de operadores! - - - Insertion of element which already exists in the element list! - Inserção de elemento já existente na lista de elementos! - - - Reference to an element which index is out of element list capacity! - Referência a um elemento com índice fora da capacidade da lista de elementos! - - - Reference to an object which index is out of object list capacity! - Referência a um objeto com índice fora da capacidade da lista de objetos! - - - Removal of an object not allocated! - Remoção de objeto não alocado! - - - The object '%1' (%2) can not be removed because it is being referenced by object '%3' (%4)! - O objeto '%1' (%2) não pode ser removido pois está sendo referenciado pelo objeto '%3' (%4)! - - - The object '%1' (%2) can not be removed because it is being referenced by object '%3' (%4) that belongs to '%5' (%6)! - O objeto '%1' (%2) não pode ser removido pois está sendo referenciado pelo objeto '%3' (%4) pertecente à '%5' (%6)! - - - Operation with object(s) which type(s) is invalid! - Operação com objeto(s) de tipo(s) inválido(s)! - - - Reference to object with invalid type! - Referência a um objeto com tipo inválido! - - - Operation with object not allocated! - Operação com objeto não alocado! - - - The creation of the relationship '%1' between the table '%2' and '%3' can not be done because one does not have a primary key. If the relationship is of the type n-n both tables must have primary keys! - A criação do relacionamento '%1' entre as tabela '%2' e '%3' não pode ser feito pois uma delas não possui uma chave primária. Caso o relacionamento seja do tipo n-n ambas as tabelas devem possuir chaves primárias! - - - The relationship of the type 1-1 where both tables are mandatory participation is not implemented because it requires fusion between the tables that breaks the modeling done by the user! - O relacionamento do tipo 1-1 onde ambas as tabelas são de participação obrigatória não é implementado por necessitar de fusão entre tabelas o que quebra a modelagem feita pelo usuário! - - - Assignment of an invalid expression to the object! - Atribuição de expressão inválida ao objeto! - - - Assignment of a primary key to a table which already has one! - Atribuição de chave primária à uma tabela a qual já possui uma! - - - Identifier relationship can not be created for a self relationship, relationships of the type n-n, dependency or generalization! - Relacionamento identificador não pode ser criado para um autorelacionamentos, relacionamentos do tipo n-n, dependência ou generalização! - - - Unable to create a dependency relationship because the column '%1' in table '%2' already exists in table '%3'! - Impossível criar o relacionamento de dependência pois a coluna '%1' da tabela '%2' já existe na tabela '%3'! - - - Unable to create the generalization relationship because the column '%1' in table '%2' can not be merged with the column '%3' of table '%4' because they have incompatible types! - Impossível criar o relacionamento de generalização pois a coluna '%1' da tabela '%2' não pode ser fundida com a coluna '%3' da tabela '%4' por serem de tipos incompatíveis! - - - An attribute can not be added to a dependence or generalization relationship! - Um atributo não pode ser adicionado a um relacionamento de generalização ou dependência! - - - A foreign key can not be added to a relationship because is created automatically when this is connected! - Uma chave estrangeira não pode ser adicionado a um relacionamento pois esta é criada automaticamente no momento da ligação do mesmo! - - - The object '%1' (%2) is referencing the object '%3' (%4) which was not found in the list of objects of the same type in the model! - O objeto '%1' (%2) está referenciando o objeto '%3' (%4) o qual não foi encontrado na lista de objetos de mesmo tipo no modelo! - - - Reference to an user-defined data type that not exists in the model! - Referência a tipo de dado definido pelo usuário o qual não existe no modelo! - - - Assignment of invalid maximum size to operation list! - Atribuição de tamanho máximo inválido à lista de operações! - - - Unable to write the file %1! Make sure the directory exists, or if the user has access permissions on it! - Não foi possível salvar o arquivo %1! Certifique-se de que o diretório existe ou se o usuário tem permissão de acesso ao mesmo! - - - Unable to write the model in the file %1 due to one or more errors in the definition generation process! - Não foi possível gravar o modelo no arquivo %1 devido a um ou mais erros no processo de geração da definição do mesmo! - - - There is already a relationship between '%1' (%2) and '%3' (%4) in the model! - Já existe um relacionamento entre '%1' (%2) and '%3' (%4) no modelo! - - - The configuration of the relationship '%1' generates a redundancy between the relationships '%2'. Redundancy on identifier or generalization/dependency relationships are not accepted since they result in incorrect column spreading making the model inconsistent! - A configuração do relacionamento '%1' gera uma redundância entre os relacionamentos '%2'. Redundância de relacionamentos identificadores ou de generalização/dependência não são aceitos pois resultam em propagação incorreta de colunas tornando o modelo inconsiste! - - - One or more objects were invalidated and automatically removed because they were referencing table columns which were included through relationships and which no longer exists due to disconnection of relationships or exclusion of such generated columns! - Um ou mais objetos foram invalidados e automaticamente removidos pois os mesmos referenciavam colunas de tabelas as quais foram incluídas através de relacionamentos e que deixaram de existir devido a desconexão ou exclusão dos relacionamentos geradores de tais colunas! - - - The primary key '%1' can only be allocated if declared within a block of code that defines a table or relationship! - A chave-primária '%1' só pode ser alocada caso a mesma esteja declarada dentro de um bloco de código que define uma tabela ou relacionamento! - - - Reference to an invalid privilege type! - Referência a um tipo de privilégio inválido! - - - Insertion of an role which already exists in the role list of the permission! - Inserção de um papel já existente na lista de papéis da permissão! - - - Assignment of privilege incompatible with the type of object referenced by permission! - Atribuição de privilégio incompatível com o tipo do objeto referenciado pela permissão! - - - There is already a permission on object '%1' (%2) which has one or more equal roles from those present on permission to be assigned to the object! - Já existe uma permissão sobre o objeto '%1' (%2) a qual possui um ou mais papéis iguais aos presentes na permissão a ser atribuída ao objeto! - - - A permission is referencing the object '%1' (%2) which was not found in the model! - Uma permissão está referenciando o objeto '%1' (%2) o qual não foi encontrado no modelo! - - - The object '%1' (%2) can not be created by not being assigned to any schema! - O objeto '%1' (%2) não pode ser criado por não estar atribuído a nenhum esquema! - - - The tablespace '%1' can not be inserted into the model because it points to the same directory as the tablespace '%2'! - O espaço de tabela '%1' não pode ser inserido no modelo pois o mesmo aponta para o mesmo diretório que o espaço de tabela '%2'! - - - It is not possible to create arrays of domains or sequences (dimension >= 1)! PostgreSQL does not yet implement this feature! - Não é possível criar arrays de domínios ou sequências (dimensão >= 1)! O PostgreSQL ainda não implementa esta funcionalidade! - - - The function '%1' can not get a source code as a definition because its language is set to C. Use the attributes symbol and dynamic library instead! - A função '%1' não pode receber um código-fonte como definição pois sua linguagem está definida como C. Os atributos símbolo e biblioteca dinâmica é que devem ser utilizados! - - - The function '%1' can have the attributes symbol and dynamic library configured only if the language is set to C. For all other cases you must specify a source code that defines it in the DBMS! - A função '%1' só pode ter os atributos de símbolo e biblioteca configurados caso sua linguagem esteja definida como C. Para os demais casos é necessário especificar um código-fonte que a define o SGBD! - - - The operator '%1' can not be assigned as a comutator of operator '%2' because it has incompatible settings! - O operador '%1' não pode ser atribuído como comutador do operador '%2' pois possui configuração incompatível! - - - The operator '%1' can not be assigned as negator of operator '%2' because it has incompatible settings! - O operador '%1' não pode ser atribuído como negador do operador '%2' pois possui configuração incompatível! - - - The type '%1' can not self refer in the attributes 'element' or 'copy type' or be used as a data type of an attribute in the configuration of a composite type! - O tipo '%1' não pode se referenciar nos atributos 'elemento' ou 'tipo cópia' ou ser usado como tipo de dado de um atributo na configuração de tipo composto! - - - Assignment of invalid element to type '%1'! - Atribuição de elemento inválido ao tipo '%1'! - - - Assignment of invalid alignment to type '%1'! - Atribuição de alinhamento inválido ao tipo '%1'! - - - Assignment of invalid name to the table generated from N-N relationship! - Atribuição de nome inválido à tabela gerada por relacionamento N-N! - - - The relationship '%1' can not make use of the special primary key. Only generalization/dependency relationships have access to this resource! - O relacionamento '%1' não pode fazer uso da chave-primária especial. Apenas relacionamentos de generalização/dependência têm acesso a este recurso! - - - Assignment of invalid suffix to the relationship '%1'! - Atribuição de sufixo inválido ao relacionamento '%1'! - - - The object '%1' (%2) can not be edited or deleted because it was automatically included through a relationship! To manipulate the object is necessary to make it from the edit form of the relationship that holds it. - O objeto '%1' (%2) não pode ser editado ou excluído por ter sido incluído automaticamente através de relacionamento! Para manipular o objeto é necessário fazê-lo a partir do formulário de edição do relacionamento que o detém. - - - The object '%1' (%2) can not be deleted because it is protected! - O objeto '%1' (%2) não pode ser excluído por estar protegido! - - - The group '%1' has already been declared earlier! - O grupo '%1' já foi declarado anteriormente! - - - The group '%1' can not be built in the groups declaration block ('%2')! - O grupo '%1' não pode ser construído no bloco de declaração de grupos ('%2')! - - - The group '%1' was built but not declared in the groups declaration block ('%2')! - O grupo '%1' foi construído porém não declarado no bloco de declaração de grupos ('%2')! - - - The group '%1' can not be built without possessing child elements! - O grupo '%1' não pode ser construído sem possuir elementos filhos! - - - The group '%1' can not be built once more because this was done in previous blocks! - O grupo '%1' não pode ser construído novamente pois já foi construído em blocos anteriores! - - - The group '%1' has been declared but not built! - O grupo '%1' foi declarado porém não construído! - - - Reference to a column of objects table with invalid index! - Referência a uma coluna da tabela de objetos com índice inválido! - - - Reference to a row of objects table with invalid index! - Referência a uma linha da tabela de objetos com índice inválido! - - - The schema public and the languages plpgsql, c and sql can not be manipulated because they are reserved to PostgreSQL! They are present in the model database only as a reference! - O esquema 'public' e as linguagens 'plpgsql', 'c' e 'sql' não podem ser manipuladas por serem reservados ao PostgreSQL! Os mesmos estão presentes no modelo de banco de dados apenas como referência! - - - The new configuration function invalidates the object '%1' (%2)! In this case it is needed to undo the relationship between the affected object and function so that the new configuration of the latter to take effect! - A nova configuração da função invalida o objeto '%1' (%2) o qual a referencia! Neste caso é necessário desfazer a relação entre o objeto afetado e a função para que a nova configuração desta última seja efetivada! - - - A vision reference must have at least one SQL application : SELECT, FROM, FROM-WHERE or After WHERE! - Uma referência de visão deve possuir pelo menos uma aplicação SQL: SELECT-FROM, FROM-WHERE ou Após WHERE! - - - Constraints like primary key, foreign key or unique must have at least one column related to them! For foreign keys must be selected, in addition, the referenced columns! - Restrições do tipo chave-primária, chave-estrangeira ou única devem possuir pelo menos uma coluna relacionada às mesmas! Para chaves-estrangeira devem ser selecionadas, adicionalmente, as colunas referenciadas! - - - Unable to load one or more configuration files! Please check if files exists in the configuration folder and if they are not corrupted to preventing this error to occur again on the next startup! - Não foi possível carregar um ou mais arquivos de configuração! Por favor, cheque se os arquivos existem na pasta de configurações e se o mesmos não estão corrompidos para que este erro não se repita na próxima inicialização! - - - Could not find the default settings file '%1'! To restore default settings check the existence of the file and try again! - Não foi possível encontrar o arquivo de configurações padrão '%1'! Para restaurar as configurações padrão cheque a existência do referido arquivo e tente novamente! - - - The export process failed due to an error triggered by the PostgreSQL server in an attempt to execute a SQL command. For more details about the error check the exception stack! - -** Executed SQL command: ** - -%1 - O processo de exportação falhou devido a um erro disparado pelo servidor PostgreSQL na tentativa de execução de um comando SQL. Para obter mais detalhes sobre erro cheque a pilha de exceções! - -** Comando SQL executado: ** - -%1 - - - Could not load the plugin '%1' from the library '%2'! Message returned by plugin manager: '%3' - Não foi possível carregar o plugin '%1' a partir da biblioteca '%2'! Mensagem retornada pelo gerenciador de plugins: '%3' - - - One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details. - Um ou mais plugins não foram ativados devido a erros no processo de carregamento! Verifique a pilha de exceções para mais detalhes. - - - Invalid syntax in file %1, line %2, column %3! - Sintaxe inválida no arquivo %1, linha %2, coluna %3! - - - Invalid conditional instruction '%1' on file %2, line %3, column %4! - Instrução condicional '%1' inválida no arquivo %2, linha %3, coluna %4! - - - Unknown attribute '%1' in file %2, line %3, column %4! - Atributo '%1' desconhecido no arquivo %2, linha %3, coluna %4! - - - Invalid metacharacter '%1' in file %2, line %3, column %4! - Metacaractere '%1' inválido no arquivo %2, linha %3, coluna %4! - - - Attribute '%1' with an undefined value in file %2, line %3, column %4! - Atributo '%1' com valor indefinido no arquivo %2, linha %3, coluna %4! - - - Assignment of empty XML buffer to parser! - Atribuição de buffer de código XML vazio ao parser! - - - Could not access the file or directory %1! Make sure that it exists or if the user has access permissions on it! - Não foi possível acessar o arquivo ou diretório %1! Certifique-se de que o mesmo existe e o usuário possui permissões de acesso a ele! - - - Assignment of empty DTD file name! - Atribuição de nome de arquivo DTD vazio! - - - Assignment of empty name to the DTD declaration! - Atribuição de nome vazio à declaração DTD! - - - Error while interpreting XML buffer at line %1 column %2. -Message generated by the parser: '%3'. %4 - Erro ao interpretar buffer XML na linha %1 coluna %2. - Mensagem gerada pelo parser: '%3'. %4 - - - Operation on unallocated element tree! It is necessary to load the XML parser buffer and interpret it so that the tree is generated! - Operação sobre árvore de elementos não alocada! É necessário carregar o buffer XML do parser e interpretá-lo para que a árvore seja gerada! - - - Could not load file %1. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! - Não foi possível carregar o arquivo %1. O mesmo parece estar inconsistente ou uma de suas dependências (arquivos DTD) possui erros ou está ausente! - - - Operation with unallocated tree element! - Operação com elemento de árvore de elementos não alocado! - - - Operation with element which does not exists in the element tree currently loaded! - Operação com elemento o qual não faz parte da árvore de elementos carregada atualmente! - - - Assignment of a value to an invalid connection parameter! - Atribuição de valor a um parâmetro de conexão inválido! - - - Operation on connection not established! - Operação sobre conexão não estabelecida! - - - Attempt to connect without define configuration parameters! - Tentativa de conexão sem parâmetros de configuração definidos! - - - Could not connect to the database. -Message returned: '%1' - Não foi possível estabelecer conexão com o banco de dados. -Mensagem retornada: '%1' - - - Assignment of not allocated SQL command result! - Atribuição de resultado de comando SQL não alocado! - - - Unable to allocate the result of the SQL command because the response from the DBMS was not understood by the client! - Não foi possível alocar o resultado do comando SQL pois a resposta do SGBD não foi compreendida pelo cliente! - - - Unable to allocate command result for the SQL because the server has generated a fatal error! -Message returned by the DBMS: %1 - Não foi possível alocar o resultado do comando SQL pois o servidor gerou um erro fatal! -Mensagem retornada pelo SGBD: %1 - - - Unable to allocate the result of the SQL command because the command passed was an empty SQL! - Não foi possível alocar o resultado do comando SQL pois o comando passado foi uma SQL vazia! - - - Reference to a column of tuple with invalid index! - Referência à uma coluna da tupla com índice inválido! - - - Reference to a column of tuple with invalid name! - Referência à uma coluna da tupla com nome inválido! - - - Reference to a tuple with index invalid or the result is empty (no tuples)! - Referência à uma tupla com índice inválido ou o resultado está vazio (sem tuplas)! - - - Could not execute the SQL command. - Message returned: %1 - Não foi possível executar o comando SQL. - Mensagem retornada: %1 - - - - Exception - - Insufficient memory space to allocate the object! - Espaço em memória insuficiente para alocar o objeto! - - - Assignment of a pseudo-type to the type of the column! - Atribuição de um pseudo-tipo ao tipo da coluna! - - - Zero length assignment! - Atribuição de comprimento igual a zero! - - - Assignment of a precision greater than the length of the type! - Atribuição de precisão maior do que o comprimento do tipo! - - - Assignment of an invalid precision to type time, timestamp or interval. The precision in this case must be equal to or less than 6! - Atribuição de precisão inválida a um tipo time, timestamp ou interval. A precisão neste caso deve ser igual ou inferior a 6! - - - Assignment of a not allocated column to object '%1' (%2)! - Atribuição de coluna não alocada ao objeto '%1' (%2)! - - - Reference to a column which index is out of the capacity of the column list! - Referência a uma coluna com índice fora da capacidade da lista de colunas! - - - Assignment of not allocated object! - Atribuição de um objeto não alocado! - - - Assignment of a not allocated schema to object '%1' (%2)! - Atribuição de um esquema não alocado ao objeto '%1' (%2)! - - - The object '%1' (%2) has inconsistent configuration (invalid SQL/XML definition)! - O objeto '%1' (%2) possui configuração inconsistente (definição SQL/XML inválida)! - - - The object '%1' (%2) already exists in the list of elements of the same type in the object '%3' (%4)! - O objeto '%1' (%2) já existente na lista de elementos desse mesmo tipo no objeto '%3' (%4)! - - - The object '%1' (%2) can't be assigned because there is already exists in the container object '%3'! - O objeto '%1' (%2) não pode ser atribuído pois já existe no container de objetos '%3'! - - - Removing an object of an invalid type! - Remoção de objeto de tipo inválido! - - - Obtaining an object of an invalid type! - Obtenção de um objeto com tipo inválido! - - - Assignment of empty name to table return type! - Atribuição de nome vazio ao tipo de retorno de tabela! - - - The insertion of the parameter '%1' will not be possible because there is another parameter with same name in the function '%2'! - A inserção do parâmetro '%1' não será possível pois já existe outro parâmetro com mesmo nome na função '%2'! - - - The insertion of the table return type '%1' will not be possible because there is another return type with the same name in the '%2'! - A inserção do tipo de retorno de tabela '%1' não será possível pois já existe outro tipo de retorno com mesmo nome na função '%2'! - - - Reference to an event which does not belongs to trigger! - Referência a um evento não pertecente ao gatilho! - - - Assignment of a not allocated function to object '%1' (%2)! - Atribuição de função não alocada ao objeto '%1' (%2)! - - - Assignment of a function which return type is different from 'trigger'! - Atribuição de função com tipo de retorno diferente de 'trigger'! - - - Assignment of a function which parameter count is invalid to the object '%1' (%2)! - Atribuição de função com número de parâmetros inválido ao objeto '%1' (%2)! - - - Assignment of a function which language is invalid! - Atribuição de função com linguagem inválida! - - - Assignment of not allocated table to object '%1' (%2)! - Atribuição de tabela não alocada ao objeto '%1' (%2)! - - - Insertion of a column which name is already registered to another column of the object! - Inserção de coluna com nome já registrado em outra coluna do objeto! - - - Assignment of empty name to an object! - Atribuição de nome vazio a um objeto! - - - Assignment of invalid name to an object! - Atribuição de nome inválido a um objeto! - - - Assignment of schema object which type is invalid! - Atribuição de um objeto esquema com tipo inválido! - - - Assignment of tablespace object with invalid type! - Atribuição de objeto espaço de tabela com tipo inválido! - - - Assignment of tablespace to an invalid object! - Atribuição de um espaço de tabela a um objeto de tipo inválido! - - - Assignment of tablespace to a constraint which type is invalid! To belong to a tablespace the constraint must be a primary key or unique! - Atribuição de um objeto espaço de tabela a uma restrição de tipo inválido! A restrição deve ser uma chave-primária ou única para pode pertencer a um espaço de tabela! - - - Assignment of owner object which type is invalid! - Atribuição de um objeto papel com tipo inválido! - - - Assignment of owner to an invalid object! - Atribuição de um dono a um objeto de tipo inválido! - - - Reference to a function with invalid type! - Referência a uma função com tipo inválido! - - - Reference to an argument of the operator with invalid type! - Referência a um argumento do operador com tipo inválido! - - - Reference to an operator with invalid type! - Referência a um operador com tipo inválido! - - - Reference to an invalid role type! - Referência a um tipo de papel inválido! - - - The insertion of the role '%1' is not possible because this is already being referenced by role '%2'! - A inserção do papel '%1' não será possível pois este já está sendo referenciado pelo papel '%2'! - - - The role '%1' can not be listed as a member of itself! - O papel '%1' não pode ser relacionado com um membro dele mesmo! - - - Assignment of an object that already belongs to another table! - Atribuição de um objeto o qual já pertence a outra tabela! - - - Assignment of a schema to the sequence which differs from the schema of the owner table! - Atribuição de esquema à seqüência o qual difere do esquema da tabela possuidora! - - - Assignment of an invalid value to one of the sequence attributes! - Atribuição de valor inválido a um dos atributos da seqüência! - - - Assignment of a minimum value to the sequence which is greater than the maximum value! - Atribuição de valor mínimo da seqüência maior do que o valor máximo! - - - Assignment of a null increment value to the sequence! - Atribuição de incremento de seqüência com valor nulo! - - - Assignment of null cache value to the sequence! - Atribuição de cache de seqüência com valor nulo! - - - Assignment of owner table which is not in the same schema as the sequence '%1'! - Atribuição de tabela possuidora a qual não faz parte do mesmo esquema da seqüência '%1'! - - - Assignment of owner table which does not belong to the same owner of the sequence '%1'! - Atribuição de tabela possuidora a qual não pertence ao mesmo dono da seqüência '%1'! - - - Assignment of a nonexistent owner column to the sequence '%1'! - Atribuição de coluna possuidora inexistente à seqüência '%1'! - - - Assignment of an owner column to the sequence '%1' that is not related to any table! - Atribuição de uma coluna possuidora a sequencia '%1' a qual não está relacionada a nenhuma tabela! - - - Allocation of object with invalid type! - Alocação de objeto com tipo inválido! - - - Assignment of a function with invalid return type to object '%1' (%2)! - Atribuição de função com tipo de retorno inválido ao objeto '%1' (%2)! - - - Assignment of a function with invalid parameter(s) type(s) to object '%1' (%2)! - Atribuição de função com tipo de parâmetro(s) inválido(s) ao objeto '%1' (%2)! - - - Assignment of not allocated language! - Atribuição de linguagem não alocada! - - - Assignment of language object which type is invalid! - Atribuição de linguagem com tipo inválido! - - - Reference to data type with an index outside the capacity of data types list! - Referência a tipo de dado com índice fora da capacidade da lista de tipos de dados! - - - Assignment of a null type to to object '%1' (%2)! - Atribuição de tipo nulo ao objeto '%1' (%2)! - - - Assignment of invalid type to the object! - Atribuição de um tipo inválido ao objeto! - - - Assignment of an empty directory to object '%1' (%2)! - Atribuição de um diretório vazio ao objeto: '%1' (%2)! - - - Obtaining types with invalid quantity! - Obtenção de tipos com quantidade inválida! - - - Insertion of item which already exists in the attributes list of the type! - Inserção de item já existente na lista de atibutos do tipo! - - - Insertion of invalid item in the attributes list of the type! - Inserção de item inválido na lista de atibutos do tipo! - - - Insertion of item which already exists in the enumarations list of the type! - Inserção de item já existente na lista de enumerações do tipo! - - - Insertion of invalid item in the enumerations list of the type! - Inserção de item inválido na lista de emumerações do tipo! - - - Assignment of invalid configuration to the type! - Atribuição de configuração inválida ao tipo! - - - The data type '%1' can not be assigned because it already exists in the types list of the aggregate function '%2'! - O tipo de dado '%1' não pode ser atribuído pois o mesmo já existente na lista de tipos da função de agregação '%2'! - - - Assignment of system reserved name to the object '%1' (%2)! - Atribuição de nome reservado pelo sistema ao objeto '%1' (%2)! - - - One function with invalid configuration is been used by the object '%1' (%2)! - Uma função de configuração inválida está sendo usada pelo objeto '%1' (%2)! - - - Assignment of invalid id to the user! - Atribuição de id de usuário inválido! - - - Assignment of an invalid strategy/support number to an operator class element! - Atribuição de valor inválido ao número de estratégia/suporte do elemento de classe de operadores! - - - Insertion of element which already exists in the element list! - Inserção de elemento já existente na lista de elementos! - - - Removal of an object not allocated! - Remoção de objeto não alocado! - - - The object '%1' (%2) can not be removed because it is being referenced by object '%3' (%4)! - O objeto '%1' (%2) não pode ser removido pois está sendo referenciado pelo objeto '%3' (%4)! - - - The object '%1' (%2) can not be removed because it is being referenced by object '%3' (%4) that belongs to '%5' (%6)! - O objeto '%1' (%2) não pode ser removido pois está sendo referenciado pelo objeto '%3' (%4) pertecente à '%5' (%6)! - - - Operation with object(s) which type(s) is invalid! - Operação com objeto(s) de tipo(s) inválido(s)! - - - Reference to object with invalid type! - Referência a um objeto com tipo inválido! - - - Operation with object not allocated! - Operação com objeto não alocado! - - - The creation of the relationship '%1' between the table '%2' and '%3' can not be done because one does not have a primary key. If the relationship is of the type n-n both tables must have primary keys! - A criação do relacionamento '%1' entre as tabela '%2' e '%3' não pode ser feito pois uma delas não possui uma chave primária. Caso o relacionamento seja do tipo n-n ambas as tabelas devem possuir chaves primárias! - - - The relationship of the type 1-1 where both tables are mandatory participation is not implemented because it requires fusion between the tables that breaks the modeling done by the user! - O relacionamento do tipo 1-1 onde ambas as tabelas são de participação obrigatória não é implementado por necessitar de fusão entre tabelas o que quebra a modelagem feita pelo usuário! - - - Assignment of an invalid expression to the object! - Atribuição de expressão inválida ao objeto! - - - Assignment of a primary key to a table which already has one! - Atribuição de chave primária à uma tabela a qual já possui uma! - - - Unable to create the generalization relationship because the column '%1' in table '%2' can not be merged with the column '%3' of table '%4' because they have incompatible types! - Impossível criar o relacionamento de generalização pois a coluna '%1' da tabela '%2' não pode ser fundida com a coluna '%3' da tabela '%4' por serem de tipos incompatíveis! - - - A foreign key can not be added to a relationship because is created automatically when this is connected! - Uma chave estrangeira não pode ser adicionado a um relacionamento pois esta é criada automaticamente no momento da ligação do mesmo! - - - The object '%1' (%2) is referencing the object '%3' (%4) which was not found in the list of objects of the same type in the model! - O objeto '%1' (%2) está referenciando o objeto '%3' (%4) o qual não foi encontrado na lista de objetos de mesmo tipo no modelo! - - - Reference to an user-defined data type that not exists in the model! - Referência a tipo de dado definido pelo usuário o qual não existe no modelo! - - - Assignment of invalid maximum size to operation list! - Atribuição de tamanho máximo inválido à lista de operações! - - - Unable to write the file %1! Make sure the directory exists, or if the user has access permissions on it! - Não foi possível salvar o arquivo %1! Certifique-se de que o diretório existe ou se o usuário tem permissão de acesso ao mesmo! - - - Unable to write the model in the file %1 due to one or more errors in the definition generation process! - Não foi possível gravar o modelo no arquivo %1 devido a um ou mais erros no processo de geração da definição do mesmo! - - - There is already a relationship between '%1' (%2) and '%3' (%4) in the model! - Já existe um relacionamento entre '%1' (%2) and '%3' (%4) no modelo! - - - One or more objects were invalidated and automatically removed because they were referencing table columns which were included through relationships and which no longer exists due to disconnection of relationships or exclusion of such generated columns! - Um ou mais objetos foram invalidados e automaticamente removidos pois os mesmos referenciavam colunas de tabelas as quais foram incluídas através de relacionamentos e que deixaram de existir devido a desconexão ou exclusão dos relacionamentos geradores de tais colunas! - - - The primary key '%1' can only be allocated if declared within a block of code that defines a table or relationship! - A chave-primária '%1' só pode ser alocada caso a mesma esteja declarada dentro de um bloco de código que define uma tabela ou relacionamento! - - - Reference to an invalid privilege type! - Referência a um tipo de privilégio inválido! - - - Assignment of privilege incompatible with the type of object referenced by permission! - Atribuição de privilégio incompatível com o tipo do objeto referenciado pela permissão! - - - There is already a permission on object '%1' (%2) which has one or more equal roles from those present on permission to be assigned to the object! - Já existe uma permissão sobre o objeto '%1' (%2) a qual possui um ou mais papéis iguais aos presentes na permissão a ser atribuída ao objeto! - - - A permission is referencing the object '%1' (%2) which was not found in the model! - Uma permissão está referenciando o objeto '%1' (%2) o qual não foi encontrado no modelo! - - - The tablespace '%1' can not be inserted into the model because it points to the same directory as the tablespace '%2'! - O espaço de tabela '%1' não pode ser inserido no modelo pois o mesmo aponta para o mesmo diretório que o espaço de tabela '%2'! - - - It is not possible to create arrays of domains or sequences (dimension >= 1)! PostgreSQL does not yet implement this feature! - Não é possível criar arrays de domínios ou sequências (dimensão >= 1)! O PostgreSQL ainda não implementa esta funcionalidade! - - - The function '%1' can not get a source code as a definition because its language is set to C. Use the attributes symbol and dynamic library instead! - A função '%1' não pode receber um código-fonte como definição pois sua linguagem está definida como C. Os atributos símbolo e biblioteca dinâmica é que devem ser utilizados! - - - The function '%1' can have the attributes symbol and dynamic library configured only if the language is set to C. For all other cases you must specify a source code that defines it in the DBMS! - A função '%1' só pode ter os atributos de símbolo e biblioteca configurados caso sua linguagem esteja definida como C. Para os demais casos é necessário especificar um código-fonte que a define o SGBD! - - - The operator '%1' can not be assigned as a comutator of operator '%2' because it has incompatible settings! - O operador '%1' não pode ser atribuído como comutador do operador '%2' pois possui configuração incompatível! - - - The operator '%1' can not be assigned as negator of operator '%2' because it has incompatible settings! - O operador '%1' não pode ser atribuído como negador do operador '%2' pois possui configuração incompatível! - - - The type '%1' can not self refer in the attributes 'element' or 'copy type' or be used as a data type of an attribute in the configuration of a composite type! - O tipo '%1' não pode se referenciar nos atributos 'elemento' ou 'tipo cópia' ou ser usado como tipo de dado de um atributo na configuração de tipo composto! - - - Assignment of invalid element to type '%1'! - Atribuição de elemento inválido ao tipo '%1'! - - - Assignment of invalid alignment to type '%1'! - Atribuição de alinhamento inválido ao tipo '%1'! - - - Assignment of invalid name to the table generated from N-N relationship! - Atribuição de nome inválido à tabela gerada por relacionamento N-N! - - - Assignment of invalid suffix to the relationship '%1'! - Atribuição de sufixo inválido ao relacionamento '%1'! - - - The object '%1' (%2) can not be edited or deleted because it was automatically included through a relationship! To manipulate the object is necessary to make it from the edit form of the relationship that holds it. - O objeto '%1' (%2) não pode ser editado ou excluído por ter sido incluído automaticamente através de relacionamento! Para manipular o objeto é necessário fazê-lo a partir do formulário de edição do relacionamento que o detém. - - - The object '%1' (%2) can not be deleted because it is protected! - O objeto '%1' (%2) não pode ser excluído por estar protegido! - - - The group '%1' has already been declared earlier! - O grupo '%1' já foi declarado anteriormente! - - - The group '%1' can not be built in the groups declaration block ('%2')! - O grupo '%1' não pode ser construído no bloco de declaração de grupos ('%2')! - - - The group '%1' was built but not declared in the groups declaration block ('%2')! - O grupo '%1' foi construído porém não declarado no bloco de declaração de grupos ('%2')! - - - The group '%1' can not be built without possessing child elements! - O grupo '%1' não pode ser construído sem possuir elementos filhos! - - - The group '%1' can not be built once more because this was done in previous blocks! - O grupo '%1' não pode ser construído novamente pois já foi construído em blocos anteriores! - - - The group '%1' has been declared but not built! - O grupo '%1' foi declarado porém não construído! - - - The schema public and the languages plpgsql, c and sql can not be manipulated because they are reserved to PostgreSQL! They are present in the model database only as a reference! - O esquema 'public' e as linguagens 'plpgsql', 'c' e 'sql' não podem ser manipuladas por serem reservados ao PostgreSQL! Os mesmos estão presentes no modelo de banco de dados apenas como referência! - - - The new configuration function invalidates the object '%1' (%2)! In this case it is needed to undo the relationship between the affected object and function so that the new configuration of the latter to take effect! - A nova configuração da função invalida o objeto '%1' (%2) o qual a referencia! Neste caso é necessário desfazer a relação entre o objeto afetado e a função para que a nova configuração desta última seja efetivada! - - - Constraints like primary key, foreign key or unique must have at least one column related to them! For foreign keys must be selected, in addition, the referenced columns! - Restrições do tipo chave-primária, chave-estrangeira ou única devem possuir pelo menos uma coluna relacionada às mesmas! Para chaves-estrangeira devem ser selecionadas, adicionalmente, as colunas referenciadas! - - - Unable to load one or more configuration files! Please check if files exists in the configuration folder and if they are not corrupted to preventing this error to occur again on the next startup! - Não foi possível carregar um ou mais arquivos de configuração! Por favor, cheque se os arquivos existem na pasta de configurações e se o mesmos não estão corrompidos para que este erro não se repita na próxima inicialização! - - - Could not find the default settings file '%1'! To restore default settings check the existence of the file and try again! - Não foi possível encontrar o arquivo de configurações padrão '%1'! Para restaurar as configurações padrão cheque a existência do referido arquivo e tente novamente! - - - The export process failed due to an error triggered by the PostgreSQL server in an attempt to execute a SQL command. For more details about the error check the exception stack! - -** Executed SQL command: ** - -%1 - O processo de exportação falhou devido a um erro disparado pelo servidor PostgreSQL na tentativa de execução de um comando SQL. Para obter mais detalhes sobre erro cheque a pilha de exceções! - -** Comando SQL executado: ** - -%1 - - - Could not load the plugin '%1' from the library '%2'! Message returned by plugin manager: '%3' - Não foi possível carregar o plugin '%1' a partir da biblioteca '%2'! Mensagem retornada pelo gerenciador de plugins: '%3' - - - One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details. - Um ou mais plugins não foram ativados devido a erros no processo de carregamento! Verifique a pilha de exceções para mais detalhes. - - - Invalid syntax in file %1, line %2, column %3! - Sintaxe inválida no arquivo %1, linha %2, coluna %3! - - - Invalid conditional instruction '%1' on file %2, line %3, column %4! - Instrução condicional '%1' inválida no arquivo %2, linha %3, coluna %4! - - - Unknown attribute '%1' in file %2, line %3, column %4! - Atributo '%1' desconhecido no arquivo %2, linha %3, coluna %4! - - - Invalid metacharacter '%1' in file %2, line %3, column %4! - Metacaractere '%1' inválido no arquivo %2, linha %3, coluna %4! - - - Attribute '%1' with an undefined value in file %2, line %3, column %4! - Atributo '%1' com valor indefinido no arquivo %2, linha %3, coluna %4! - - - Assignment of empty XML buffer to parser! - Atribuição de buffer de código XML vazio ao parser! - - - Could not access the file or directory %1! Make sure that it exists or if the user has access permissions on it! - Não foi possível acessar o arquivo ou diretório %1! Certifique-se de que o mesmo existe e o usuário possui permissões de acesso a ele! - - - Assignment of empty DTD file name! - Atribuição de nome de arquivo DTD vazio! - - - Assignment of empty name to the DTD declaration! - Atribuição de nome vazio à declaração DTD! - - - Error while interpreting XML buffer at line %1 column %2. -Message generated by the parser: '%3'. %4 - Erro ao interpretar buffer XML na linha %1 coluna %2. - Mensagem gerada pelo parser: '%3'. %4 - - - Operation on unallocated element tree! It is necessary to load the XML parser buffer and interpret it so that the tree is generated! - Operação sobre árvore de elementos não alocada! É necessário carregar o buffer XML do parser e interpretá-lo para que a árvore seja gerada! - - - Could not load file %1. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! - Não foi possível carregar o arquivo %1. O mesmo parece estar inconsistente ou uma de suas dependências (arquivos DTD) possui erros ou está ausente! - - - Operation with unallocated tree element! - Operação com elemento de árvore de elementos não alocado! - - - Operation with element which does not exists in the element tree currently loaded! - Operação com elemento o qual não faz parte da árvore de elementos carregada atualmente! - - - Assignment of a value to an invalid connection parameter! - Atribuição de valor a um parâmetro de conexão inválido! - - - Operation on connection not established! - Operação sobre conexão não estabelecida! - - - Attempt to connect without define configuration parameters! - Tentativa de conexão sem parâmetros de configuração definidos! - - - Could not connect to the database. -Message returned: '%1' - Não foi possível estabelecer conexão com o banco de dados. -Mensagem retornada: '%1' - - - Assignment of not allocated SQL command result! - Atribuição de resultado de comando SQL não alocado! - - - Unable to allocate the result of the SQL command because the response from the DBMS was not understood by the client! - Não foi possível alocar o resultado do comando SQL pois a resposta do SGBD não foi compreendida pelo cliente! - - - Unable to allocate command result for the SQL because the server has generated a fatal error! -Message returned by the DBMS: %1 - Não foi possível alocar o resultado do comando SQL pois o servidor gerou um erro fatal! -Mensagem retornada pelo SGBD: %1 - - - Unable to allocate the result of the SQL command because the command passed was an empty SQL! - Não foi possível alocar o resultado do comando SQL pois o comando passado foi uma SQL vazia! - - - Reference to a column of tuple with invalid index! - Referência à uma coluna da tupla com índice inválido! - - - Reference to a column of tuple with invalid name! - Referência à uma coluna da tupla com nome inválido! - - - Reference to a tuple with index invalid or the result is empty (no tuples)! - Referência à uma tupla com índice inválido ou o resultado está vazio (sem tuplas)! - - - Could not execute the SQL command. - Message returned: %1 - Não foi possível executar o comando SQL. - Mensagem retornada: %1 - - - Assignment of a not allocated column to object `%1' (%2)! - - - - Assignment of a not allocated schema to object `%1' (%2)! - - - - The object `%1' (%2) has inconsistent SQL or XML definition! - - - - The object `%1' (%2) already exists on `%3' (%4)! - - - - The object `%1' (%2) cannot be assigned because there is already exists in the container object `%3'! - - - - Assigning object of an invalid type! - - - - The insertion of the parameter `%1' will not be possible because there is another parameter with same name in the function `%2'! - - - - The insertion of the table return type `%1' will not be possible because there is another return type with the same name in the `%2'! - - - - Reference to a parameter which index is out of the parameter list bounds! - - - - The column `%1' cannot be assigned to the trigger `%2' because they belongs to different parent tables! - - - - Assignment of a not allocated function to object `%1' (%2)! - - - - Assignment of a function which return type is different from `%1'! - - - - Assignment of a function which parameter count is invalid to the object `%1' (%2)! - - - - Event trigger function must be coded in any language other than SQL! - - - - Assignment of not allocated table to object `%1' (%2)! - - - - Reference to an argument which index is out of argument list bounds! - - - - Assignment of a name which contains invalid characters! - - - - Assignment of a name which length exceeds the maximum of 63 characters! - - - - Assignment of appended or prepended SQL to an invalid object! - - - - Assignment of value to an invalid option type on role! - - - - The insertion of the role `%1' is not possible because this is already being referenced by role `%2'! - - - - Reference redundancy detected by having the role `%1' referencing the role `%2'! - - - - The role `%1' can not be listed as a member of itself! - - - - Reference to a role which index is out of role list bounds! - - - - Insertion of empty command to the rule! - - - - Reference to a command which index is out of the command list bounds! - - - - Is not possible to create a self generalization/copy relationship! The table can not inherit or copy their own attributes! - - - - Assignment of a start value to the sequence which is extrapolating the range defined by minimum and maximum values! - - - - Assignment of owner table which is not in the same schema as the sequence `%1'! - - - - Assignment of owner table which does not belong to the same owner of the sequence `%1'! - - - - Assignment of a nonexistent owner column to the sequence `%1'! - - - - Assignment of an owner column to the sequence `%1' that is not related to any table! - - - - Reference to a label which index is out of labels list bounds! - - - - Assignment of a function with invalid return type to object `%1' (%2)! - - - - Assignment of a function with invalid parameter(s) type(s) to object `%1' (%2)! - - - - Assignment of a null type to object `%1' (%2)! - - - - Assignment of an empty directory to object `%1' (%2)! - - - - Reference to an attribute which index is out of the attributes list bounds! - - - - Reference to an enumeration which index is out of the enumerations list bounds! - - - - Assignment of an operator which input type count is invalid to aggregate function! - - - - Assignment of an operator which types of arguments is invalid! - - - - Assignment of system reserved name to the object `%1' (%2)! - - - - One function with invalid configuration is been used by the object `%1' (%2)! - - - - Reference to an element which index is out of element list bounds! - - - - Reference to an object which index is out of object list bounds! - - - - The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4)! - - - - The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4) that belongs to `%5' (%6)! - - - - The creation of the relationship `%1' between the table `%2' and `%3' can not be done because one does not have a primary key. If the relationship is of the type n-n both tables must have primary keys! - - - - Identifier relationship can not be created for a self relationship, relationships of the type n-n, copy or generalization! - - - - Unable to create a copy relationship because the column `%1' in table `%2' already exists in table `%3'! - - - - Unable to create the generalization relationship because the column `%1' in table `%2' can not be merged with the column `%3' of table `%4' because they have incompatible types! - - - - Unable to create the generalization relationship because the constraint `%1' in table `%2' can not be merged with the constraint `%3' of table `%4' due to their incompatible composition! - - - - An attribute can not be added to a copy or generalization relationship! - - - - The object `%1' (%2) is referencing the object `%3' (%4) which was not found in the model! - - - - Unable to write the file or directory `%1'! Make sure the output directory exists, or if the user has write permissions over it! - - - - Unable to write the file `%1' due to one or more errors in the definition generation process! - - - - There is already a relationship between `%1' (%2) and `%3' (%4) in the model! - - - - The configuration of the relationship `%1' generates a redundancy between the relationships `%2'. Redundancy on identifier or generalization/copy relationships are not accepted since they result in incorrect column spreading making the model inconsistent! - - - - The primary key `%1' can only be allocated if declared within a block of code that defines a table or relationship! - - - - Insertion of a role which already exists in the role list of the permission! - - - - There is already a permission on object `%1' (%2) which has one or more equal roles from those present on permission to be assigned to the object! - - - - A permission is referencing the object `%1' (%2) which was not found in the model! - - - - The object `%1' (%2) can not be created because its not being assigned to any schema! - + Reference to a column which index is out of the capacity of the column list! + Referência a uma coluna com índice fora da capacidade da lista de colunas! - The tablespace `%1' can not be inserted into the model because it points to the same directory as the tablespace `%2'! - + Assignment of not allocated object! + Atribuição de um objeto não alocado! - The function `%1' can not get a source code as a definition because its language is set to C. Use the attributes symbol and dynamic library instead! - + Removing an object of an invalid type! + Remoção de objeto de tipo inválido! - The function `%1' can have the attributes symbol and dynamic library configured only if the language is set to C. For all other cases you must specify a source code that defines it in the DBMS! - + Obtaining an object of an invalid type! + Obtenção de um objeto com tipo inválido! - The operator `%1' can not be assigned as a comutator of operator `%2' because it has incompatible settings! - + Assignment of empty name to table return type! + Atribuição de nome vazio ao tipo de retorno de tabela! - The operator `%1' can not be assigned as negator of operator `%2' because it has incompatible settings! - + Reference to an event which does not belongs to trigger! + Referência a um evento não pertecente ao gatilho! - The type `%1' can not self refer in the attributes `element' or `copy type' or be used as a data type of an attribute in the configuration of a composite type! - + Assignment of a function which language is invalid! + Atribuição de função com linguagem inválida! - Assignment of invalid element to type `%1'! - + Assignment of empty name to an object! + Atribuição de nome vazio a um objeto! - Assignment of invalid alignment to type `%1'! - + Assignment of schema object which type is invalid! + Atribuição de um objeto esquema com tipo inválido! - The relationship `%1' can not make use of the special primary key because it is marked as identifier or it is a self relationship! - + Assignment of tablespace object with invalid type! + Atribuição de objeto espaço de tabela com tipo inválido! - The object `%1' (%2) can not be edited or deleted because it was automatically included through a relationship! If the object is an attribute or constraint the modifications must be done on the relationship editing form. - + Assignment of tablespace to an invalid object! + Atribuição de um espaço de tabela a um objeto de tipo inválido! - The object `%1' (%2) can not be deleted because it is protected! - + Assignment of tablespace to a constraint which type is invalid! To belong to a tablespace the constraint must be a primary key or unique! + Atribuição de um objeto espaço de tabela a uma restrição de tipo inválido! A restrição deve ser uma chave-primária ou única para pode pertencer a um espaço de tabela! - The group `%1' has already been declared earlier! - + Assignment of owner object which type is invalid! + Atribuição de um objeto papel com tipo inválido! - The group `%1' can not be built in the groups declaration block (%2)! - + Assignment of owner to an invalid object! + Atribuição de um dono a um objeto de tipo inválido! - The group `%1' was built but not declared in the groups declaration block (%2)! - + Reference to a function with invalid type! + Referência a uma função com tipo inválido! - The group `%1' can not be built without possessing child elements! - + Reference to an argument of the operator with invalid type! + Referência a um argumento do operador com tipo inválido! - The group `%1' can not be built once more because this was done in previous blocks! - + Reference to an operator with invalid type! + Referência a um operador com tipo inválido! - The group `%1' has been declared but not built! - + Reference to an invalid role type! + Referência a um tipo de papel inválido! - Reference to a column of the objects table with invalid index! - + Assignment of an object that already belongs to another table! + Atribuição de um objeto o qual já pertence a outra tabela! - Reference to a row of the objects table with invalid index! - + Assignment of a schema to the sequence which differs from the schema of the owner table! + Atribuição de esquema à seqüência o qual difere do esquema da tabela possuidora! - The object `%1' (%2) can not be manipulated because it is reserved to PostgreSQL! This object is present in the database model only as a reference! - + Assignment of an invalid value to one of the sequence attributes! + Atribuição de valor inválido a um dos atributos da seqüência! - The new configuration of the function invalidates the object `%1' (%2)! In this case it is needed to undo the relationship between the affected object and function in order to the new configuration to take effect! - + Assignment of a minimum value to the sequence which is greater than the maximum value! + Atribuição de valor mínimo da seqüência maior do que o valor máximo! - A view reference must be used in at least one these SQL scopes: View Definition, SELECT-FROM, FROM-WHERE or After WHERE! - + Assignment of a null increment value to the sequence! + Atribuição de incremento de seqüência com valor nulo! - Could not find the default settings file `%1'! To restore default settings check the existence of the file and try again! - + Assignment of null cache value to the sequence! + Atribuição de cache de seqüência com valor nulo! - Could not load the plugin `%1' from the library `%2'! Message returned by plugin manager: `%3' - + Allocation of object with invalid type! + Alocação de objeto com tipo inválido! - Invalid instruction `%1' on file %2, line %3, column %4! - + Assignment of not allocated language! + Atribuição de linguagem não alocada! - Unknown attribute `%1' in file %2, line %3, column %4! - + Assignment of language object which type is invalid! + Atribuição de linguagem com tipo inválido! - Invalid metacharacter `%1' in file %2, line %3, column %4! - + Reference to data type with an index outside the capacity of data types list! + Referência a tipo de dado com índice fora da capacidade da lista de tipos de dados! - Invalid operator `%1' in comparison expression, file %2, line %3, column %4! - + Assignment of invalid type to the object! + Atribuição de um tipo inválido ao objeto! - Attribute `%1' with an undefined value in file %2, line %3, column %4! - + Obtaining types with invalid quantity! + Obtenção de tipos com quantidade inválida! - Attribute `%1' with an invalid name in file %2, line %3, column %4! - + Insertion of item which already exists in the attributes list of the type! + Inserção de item já existente na lista de atibutos do tipo! - Error while interpreting XML buffer at line %1 column %2. -Message generated by the parser: %3. %4 - + Insertion of invalid item in the attributes list of the type! + Inserção de item inválido na lista de atibutos do tipo! - Attempt to start a connection already stablished! - + Insertion of item which already exists in the enumarations list of the type! + Inserção de item já existente na lista de enumerações do tipo! - Could not connect to the database. -Message returned: `%1' - + Insertion of invalid item in the enumerations list of the type! + Inserção de item inválido na lista de emumerações do tipo! - Unable to allocate command result for the SQL because the server has generated a fatal error! -Message returned by the DBMS: `%1' - + Assignment of invalid configuration to the type! + Atribuição de configuração inválida ao tipo! - Reference to a tuple with an invalid index or the result is empty (no tuples)! - + Assignment of an invalid strategy/support number to an operator class element! + Atribuição de valor inválido ao número de estratégia/suporte do elemento de classe de operadores! - Reference to a column of a tuple which was not yet initialized (tuple navigation not started)! - + Insertion of element which already exists in the element list! + Inserção de elemento já existente na lista de elementos! - Could not execute the SQL command. - Message returned: `%1' - + Removal of an object not allocated! + Remoção de objeto não alocado! - Invalid use of a view reference as whole SQL definition! The assigned reference must be an expression! - + Operation with object(s) which type(s) is invalid! + Operação com objeto(s) de tipo(s) inválido(s)! - Assignment of a second definition expression to the view! - + Reference to object with invalid type! + Referência a um objeto com tipo inválido! - It is not possible mix ordinary references (SELECT-FROM, FROM-WHERE, After WHERE) with references used as view SQL definition! - + Operation with object not allocated! + Operação com objeto não alocado! - Assignment of collation object which type is invalid! - + The relationship of the type 1-1 where both tables are mandatory participation is not implemented because it requires fusion between the tables that breaks the modeling done by the user! + O relacionamento do tipo 1-1 onde ambas as tabelas são de participação obrigatória não é implementado por necessitar de fusão entre tabelas o que quebra a modelagem feita pelo usuário! - At the moment pgModeler does not support the creation of primary keys which some columns were generated by relationship connection. To create primary keys with this feature you can use the field `Identifier' or the tab `Primary key' on relationship editing form! - + Assignment of an invalid expression to the object! + Atribuição de expressão inválida ao objeto! - Collations must be created at least with attributes LC_COLLATE and LC_CTYPE defined! - + Assignment of a primary key to a table which already has one! + Atribuição de chave primária à uma tabela a qual já possui uma! - The object `%1' (%2) cannot reference itself! This operation is not permitted for this kind of object! - + A foreign key can not be added to a relationship because is created automatically when this is connected! + Uma chave estrangeira não pode ser adicionado a um relacionamento pois esta é criada automaticamente no momento da ligação do mesmo! - Only operator families which uses `btree' as indexing method are accepted by operator class elements! - + Reference to an user-defined data type that not exists in the model! + Referência a tipo de dado definido pelo usuário o qual não existe no modelo! - Reference to an invalid copy table option! - + Assignment of invalid maximum size to operation list! + Atribuição de tamanho máximo inválido à lista de operações! - Copy relationship between tables `%1' and `%2' cannot be done because the first one already copies attributes from `%3'! Tables can have only one copy table! - + One or more objects were invalidated and automatically removed because they were referencing table columns which were included through relationships and which no longer exists due to disconnection of relationships or exclusion of such generated columns! + Um ou mais objetos foram invalidados e automaticamente removidos pois os mesmos referenciavam colunas de tabelas as quais foram incluídas através de relacionamentos e que deixaram de existir devido a desconexão ou exclusão dos relacionamentos geradores de tais colunas! - The INSTEAD OF mode cannot be used on triggers that belongs to tables! This is available only for view triggers! - + Reference to an invalid privilege type! + Referência a um tipo de privilégio inválido! - The TRUNCATE event can only be used when the trigger executes for each statement and belongs to a table! - + Assignment of privilege incompatible with the type of object referenced by permission! + Atribuição de privilégio incompatível com o tipo do objeto referenciado pela permissão! - The INSTEAD OF mode cannot be used on view triggers that executes for each statement! - + It is not possible to create arrays of domains or sequences (dimension >= 1)! PostgreSQL does not yet implement this feature! + Não é possível criar arrays de domínios ou sequências (dimensão >= 1)! O PostgreSQL ainda não implementa esta funcionalidade! - Constraint triggers can only be executed on AFTER events and for each row! - + Assignment of invalid name to the table generated from N-N relationship! + Atribuição de nome inválido à tabela gerada por relacionamento N-N! - A view trigger cannot be AFTER/BEFORE when it executes for each row! - + Constraints like primary key, foreign key or unique must have at least one column related to them! For foreign keys must be selected, in addition, the referenced columns! + Restrições do tipo chave-primária, chave-estrangeira ou única devem possuir pelo menos uma coluna relacionada às mesmas! Para chaves-estrangeira devem ser selecionadas, adicionalmente, as colunas referenciadas! - A trigger cannot make reference to columns when using INSTEAD OF mode and UPDATE event! - + The export process failed due to an error triggered by the PostgreSQL server in an attempt to execute a SQL command. For more details about the error check the exception stack! + +** Executed SQL command: ** + +%1 + O processo de exportação falhou devido a um erro disparado pelo servidor PostgreSQL na tentativa de execução de um comando SQL. Para obter mais detalhes sobre erro cheque a pilha de exceções! + +** Comando SQL executado: ** + +%1 - Assignment of a column which has no parent table to the object `%1' (%2)! - + One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details. + Um ou mais plugins não foram ativados devido a erros no processo de carregamento! Verifique a pilha de exceções para mais detalhes. - Only constraint triggers can be deferrable or reference another table! - + Assignment of empty XML buffer to parser! + Atribuição de buffer de código XML vazio ao parser! - Reference to a function id which is incompatible with the user define type configuration! - + Assignment of empty DTD file name! + Atribuição de nome de arquivo DTD vazio! - The operator class assigned to the object `%1' (%2) must use `btree' as indexing method! - + Assignment of empty name to the DTD declaration! + Atribuição de nome vazio à declaração DTD! - Unsupported PostgreSQL version (%1) detected! Valid versions are: %2 - + Operation on unallocated element tree! It is necessary to load the XML parser buffer and interpret it so that the tree is generated! + Operação sobre árvore de elementos não alocada! É necessário carregar o buffer XML do parser e interpretá-lo para que a árvore seja gerada! - The validation process failed due to an error triggered by the validation helper. For more details about the error check the exception stack! - + Operation with unallocated tree element! + Operação com elemento de árvore de elementos não alocado! - The extension `%1' is registered as a data type and cannot have the attribute `handles datatype' modified! - + Operation with element which does not exists in the element tree currently loaded! + Operação com elemento o qual não faz parte da árvore de elementos carregada atualmente! - The fk relationship `%1' cannot be created because the foreign-key that represents it was not created on table `%2'! - + Assignment of a value to an invalid connection parameter! + Atribuição de valor a um parâmetro de conexão inválido! - Assignement of an invalid object name pattern to the relationship `%1'! - + Operation on connection not established! + Operação sobre conexão não estabelecida! - Reference to an invalid object name pattern id on the relationship `%1'! - + Attempt to connect without define configuration parameters! + Tentativa de conexão sem parâmetros de configuração definidos! - Invalid use of variadic parameter mode! This mode can be used only with an array or "any" data type! - + Assignment of not allocated SQL command result! + Atribuição de resultado de comando SQL não alocado! - Mixing incompatibles DBMS export modes: `ignore object duplications', `drop database' or `drop objects' cannot be used with `simulate export'! - + Unable to allocate the result of the SQL command because the response from the DBMS was not understood by the client! + Não foi possível alocar o resultado do comando SQL pois a resposta do SGBD não foi compreendida pelo cliente! - Mixing incompatibles DROP options: `drop database' and `drop objects' cannot be used at the same time! - + Reference to a column of tuple with invalid index! + Referência à uma coluna da tupla com índice inválido! - Invalid object id swapping operation! The objects involved are the same! - + Reference to a column of tuple with invalid name! + Referência à uma coluna da tupla com nome inválido! - Invalid object id swapping operation! The database itself, tablespaces or roles cannot have the ids swapped! + Assignment of a not allocated column to object `%1' (%2)! - The widget already has a parent and cannot be assigned to a different object! + Assignment of a not allocated schema to object `%1' (%2)! - The object `%1' (%2) could not be imported due to one or more errors! Check the exception stack for more details. + The object `%1' (%2) has inconsistent SQL or XML definition! - Could not load the database model file `%1'. Check the error stack to see details. Try to run `pgmodeler-cli --fix-model' in order to correct the structure of the file if that is the case. + The object `%1' (%2) already exists on `%3' (%4)! - The column `%1' cannot reference it's parent table `%2' as data type! + The object `%1' (%2) cannot be assigned because there is already exists in the container object `%3'! - Operation with an invalid element id `%1'! + Assigning object of an invalid type! - Reference to an invalid color id `%1' for element `%2'! + The insertion of the parameter `%1' will not be possible because there is another parameter with same name in the function `%2'! - Assignment of an invalid object to `%1' (%2)! The assigned object must be of type `%3'. + The insertion of the table return type `%1' will not be possible because there is another return type with the same name in the `%2'! - The sequence `%1' can't be assigned to the column `%2' because the data type of the latter is incompatible. The type used must be an integer one! + Reference to a parameter which index is out of the parameter list bounds! - The option to generate temporary object names can only be used in simulation mode! + The column `%1' cannot be assigned to the trigger `%2' because they belongs to different parent tables! - It's not possible convert the type of the column `%1' to serial! It must have an `integer' based type and its default value must be a call to `nextval(seq_name::regclass)' function or a sequence object must be directly assigned to the column! + Assignment of a not allocated function to object `%1' (%2)! - Could not assign the variable `%1' to event trigger's filter. Currently, PostgreSQL supports only the `TAG' variable! + Assignment of a function which return type is different from `%1'! - Could not perform the `%1' operation on `%2' using the data on row `%3'! All changes were rolled back. - - ** Returned error ** - -%4 + Assignment of a function which parameter count is invalid to the object `%1' (%2)! - Malformed unescaped value on row `%1' column `%2'! + Event trigger function must be coded in any language other than SQL! - Trying to undo/redo an invalid operation over an object that does not exists anymore or can't be handled! The operation history will be cleaned up. + Assignment of not allocated table to object `%1' (%2)! - The object `%1' (%2) can't be handled because some needed fields are not set! Please, make sure to fill at least the requires fields in order to properly create or update the object. + Reference to an argument which index is out of argument list bounds! - A relationship can only be swapped by other object of the same kind! + Assignment of a name which contains invalid characters! - A parent table of `%1' which OID is `%2' was not found in the set of imported objects! + Assignment of a name which length exceeds the maximum of 63 characters! - The enumeration `%1' can't be assigned to the type `%2' because contains invalid characters! + Assignment of appended or prepended SQL to an invalid object! - The enumeration `%1' can't be assigned to the type `%2' because is too long! + Assignment of value to an invalid option type on role! - The connection was idle for too long and was automatically closed! + The insertion of the role `%1' is not possible because this is already being referenced by role `%2'! - The connection was unexpectedly closed by the database server `%1' at port `%2'! + Reference redundancy detected by having the role `%1' referencing the role `%2'! - - - ExportHelper - - PostgreSQL %1 version code generation... - Geração de código do PostgreSQL versão %1... - - PostgreSQL version detection overrided. Using version %1... - Detecção de versão do PostgreSQL sobreposta. Usando versão %1... + The role `%1' can not be listed as a member of itself! + - PostgreSQL %1 server detected... - Servidor PostgreSQL %1 detectado... + Reference to a role which index is out of role list bounds! + - Ignoring object duplication error... - Ignorando erro de duplicação de objeto... + Insertion of empty command to the rule! + - Creating object '%1' (%2)... - Criando objeto '%1' (%2)... + Reference to a command which index is out of the command list bounds! + - Creating database '%1'... - Criando banco de dados '%1'... + Is not possible to create a self generalization/copy relationship! The table can not inherit or copy their own attributes! + - Connecting to database '%1'... - Conectando ao banco de dados '%1'... + Assignment of a start value to the sequence which is extrapolating the range defined by minimum and maximum values! + - Creating objects on database '%1'... - Criando objetos no banco de dados '%1'... + Assignment of owner table which is not in the same schema as the sequence `%1'! + - - - ExtensionWidget - Version: - Versão: + Assignment of owner table which does not belong to the same owner of the sequence `%1'! + - Old Version: + Assignment of a nonexistent owner column to the sequence `%1'! - This attribute cannot be changed once the object is created. + Assignment of an owner column to the sequence `%1' that is not related to any table! - Handles data type + Reference to a label which index is out of labels list bounds! - - - FamiliaOperadoresWidget - Indexing: - Indexação: + Assignment of a function with invalid return type to object `%1' (%2)! + - - - FindReplaceWidget - Form - Formulário + Assignment of a function with invalid parameter(s) type(s) to object `%1' (%2)! + - Replace one occurrence + Assignment of a null type to object `%1' (%2)! - Replace + Assignment of an empty directory to object `%1' (%2)! - Replace all occurrences + Reference to an attribute which index is out of the attributes list bounds! - Replace All + Reference to an enumeration which index is out of the enumerations list bounds! - Replace the selection and find the next one + Assignment of an operator which input type count is invalid to aggregate function! - Replace && Find + Assignment of an operator which types of arguments is invalid! - Replace: + Assignment of system reserved name to the object `%1' (%2)! - Find: + One function with invalid configuration is been used by the object `%1' (%2)! - Find previous + Reference to an element which index is out of element list bounds! - Shift+F3 + Reference to an object which index is out of object list bounds! - Find next + The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4)! - F3 + The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4) that belongs to `%5' (%6)! - Case sensitive + The creation of the relationship `%1' between the table `%2' and `%3' can not be done because one does not have a primary key. If the relationship is of the type n-n both tables must have primary keys! - Regular expression + Identifier relationship can not be created for a self relationship, relationships of the type n-n, copy or generalization! - Whole words + Unable to create a copy relationship because the column `%1' in table `%2' already exists in table `%3'! - - - FormBasico - &Apply - &Aplicar + Unable to create the generalization relationship because the column `%1' in table `%2' can not be merged with the column `%3' of table `%4' because they have incompatible types! + - &Cancel - &Cancelar + Unable to create the generalization relationship because the constraint `%1' in table `%2' can not be merged with the constraint `%3' of table `%4' due to their incompatible composition! + - - - FormConfiguracao - pgModeler Configuration - Configurações do pgModeler + An attribute can not be added to a copy or generalization relationship! + - &Apply - &Aplicar + The object `%1' (%2) is referencing the object `%3' (%4) which was not found in the model! + - &Cancel - &Cancelar + Unable to write the file or directory `%1'! Make sure the output directory exists, or if the user has write permissions over it! + - Defaults - Padrões + Unable to write the file `%1' due to one or more errors in the definition generation process! + - General - Geral + The configuration of the relationship `%1' generates a redundancy between the relationships `%2'. Redundancy on identifier or generalization/copy relationships are not accepted since they result in incorrect column spreading making the model inconsistent! + - Style - Aparência + The primary key `%1' can only be allocated if declared within a block of code that defines a table or relationship! + - Connetions - Conexões + Insertion of a role which already exists in the role list of the permission! + - Confirmation - Confirmação + There is already a permission on object `%1' (%2) which has one or more equal roles from those present on permission to be assigned to the object! + - Any modification made until now in the current section will be lost! Do you really want to restore default settings? - Qualquer modificação feita até agora na seção atual será perdida! Deseja realmente restaurar as configurações padrão? + A permission is referencing the object `%1' (%2) which was not found in the model! + - - - FormExportacao - Model Export - Exportação do Modelo + The object `%1' (%2) can not be created because its not being assigned to any schema! + - Select the export type: - Selecione o tipo de exportação do modelo: + The tablespace `%1' can not be inserted into the model because it points to the same directory as the tablespace `%2'! + - File: - Arquivo: + The function `%1' can not get a source code as a definition because its language is set to C. Use the attributes symbol and dynamic library instead! + - Select target file - Selecionar arquivo de destino + The function `%1' can have the attributes symbol and dynamic library configured only if the language is set to C. For all other cases you must specify a source code that defines it in the DBMS! + - PostgreSQL version in which the SQL code should be generated - Versão do PostgreSQL no qual do código SQL deve ser gerado + The operator `%1' can not be assigned as a comutator of operator `%2' because it has incompatible settings! + - Check if the system user has write permission on target folder. - Certifique-se que o usuário do sistema possui permissão de gravação sobre a pasta de destino do arquivo SQL. + The operator `%1' can not be assigned as negator of operator `%2' because it has incompatible settings! + - Options: - Opções: + The type `%1' can not self refer in the attributes `element' or `copy type' or be used as a data type of an attribute in the configuration of a composite type! + - Show grid - Exibir grade + Assignment of invalid element to type `%1'! + - Ignore object duplicity - Ignorar duplicidade de objetos + Assignment of invalid alignment to type `%1'! + - The pgModeler ignores errors generated by duplicate objects and creates only model objects that do not exist in the database. This option may be used when an object was created after a later model export. - O pgModeler ignora os erros gerados por duplicidade de objetos e cria apenas objetos do modelo não existentes no banco de dados serão. Esta opção pode ser usada quando um objeto foi criado no modelo posteriormente a uma exportação. + The relationship `%1' can not make use of the special primary key because it is marked as identifier or it is a self relationship! + - Export to DBMS: - Exportação para o SGBD: + The object `%1' (%2) can not be edited or deleted because it was automatically included through a relationship! If the object is an attribute or constraint the modifications must be done on the relationship editing form. + - Connection: - Conexão: + The object `%1' (%2) can not be deleted because it is protected! + - It is recommended to select this option only when the version of the DBMS, somehow, is not identifiable or if you need to generate a specific version of SQL code for testing. - Recomenda-se marcar esta opção somente quando a versão do SGBD, de alguma forma, não seja identificável ou se é necessário gerar uma versão específica de código SQL para testes. + The group `%1' has already been declared earlier! + - &Export - &Exportar + The group `%1' can not be built in the groups declaration block (%2)! + - &Close - &Fechar + The group `%1' was built but not declared in the groups declaration block (%2)! + - Generating source code... - Gerando código-fonte... + The group `%1' can not be built without possessing child elements! + - Initializing model export... - Iniciando exportação do modelo... + The group `%1' can not be built once more because this was done in previous blocks! + - Saving file '%1' - Salvando arquivo '%1' + The group `%1' has been declared but not built! + - Creating object '%1' (%2)... - Criando objeto '%1' (%2)... + Reference to a column of the objects table with invalid index! + - Creating database '%1'... - Criando banco de dados '%1'... + Reference to a row of the objects table with invalid index! + - Connecting to database '%1'... - Conectando ao banco de dados '%1'... + The object `%1' (%2) can not be manipulated because it is reserved to PostgreSQL! This object is present in the database model only as a reference! + - Creating objects on database '%1'... - Criando objetos No banco de dados '%1'... + The new configuration of the function invalidates the object `%1' (%2)! In this case it is needed to undo the relationship between the affected object and function in order to the new configuration to take effect! + - Exporting process sucessfuly ended! - Exportação finalizada com sucesso! + A view reference must be used in at least one these SQL scopes: View Definition, SELECT-FROM, FROM-WHERE or After WHERE! + - Error on export! - Falha na exportação! + Could not find the default settings file `%1'! To restore default settings check the existence of the file and try again! + - Export model as... - Exportar modelo como... + Could not load the plugin `%1' from the library `%2'! Message returned by plugin manager: `%3' + - SQL code (*.sql);;All files (*.*) - Código SQL (*.sql);;Todos os Arquivos (*.*) + Error while interpreting XML buffer at line %1 column %2. +Message generated by the parser: %3. %4 + - PNG image (*.png);;All files (*.*) - Imagem PNG (*.png);;Todos os Arquivos (*.*) + Attempt to start a connection already stablished! + - Export to SQL file: - Exportação para arquivo SQL: + Could not connect to the database. +Message returned: `%1' + - Export to PNG image: - Exportação para imagem PNG: + Unable to allocate command result for the SQL because the server has generated a fatal error! +Message returned by the DBMS: `%1' + - Image: - Imagem: + Reference to a tuple with an invalid index or the result is empty (no tuples)! + - Show the page delimiters - Exibir limites de páginas + Reference to a column of a tuple which was not yet initialized (tuple navigation not started)! + - Check if the system user has write permission on image target folder. - Certifique-se que o usuário do sistema possui permissão de gravação sobre a pasta de destino da imagem. + Could not execute the SQL command. + Message returned: `%1' + - - - FormPrincipal - File - Arquivo + Invalid use of a view reference as whole SQL definition! The assigned reference must be an expression! + - Edit - Editar + Assignment of a second definition expression to the view! + - Help - Ajuda + It is not possible mix ordinary references (SELECT-FROM, FROM-WHERE, After WHERE) with references used as view SQL definition! + - Show - Exibir + Assignment of collation object which type is invalid! + - New - Novo + At the moment pgModeler does not support the creation of primary keys which some columns were generated by relationship connection. To create primary keys with this feature you can use the field `Identifier' or the tab `Primary key' on relationship editing form! + - Save - Salvar + Collations must be created at least with attributes LC_COLLATE and LC_CTYPE defined! + - Zoom - - Diminuir zoom + The object `%1' (%2) cannot reference itself! This operation is not permitted for this kind of object! + - Load - Carregar + Only operator families which uses `btree' as indexing method are accepted by operator class elements! + - Next - Próximo + Reference to an invalid copy table option! + - Previous - Anterior + Copy relationship between tables `%1' and `%2' cannot be done because the first one already copies attributes from `%3'! Tables can have only one copy table! + - Exit - Sair + The INSTEAD OF mode cannot be used on triggers that belongs to tables! This is available only for view triggers! + - About pgModeler - Sobre o pgModeler + The TRUNCATE event can only be used when the trigger executes for each statement and belongs to a table! + - Print - Imprimir + The INSTEAD OF mode cannot be used on view triggers that executes for each statement! + - Undo - Desfazer + Constraint triggers can only be executed on AFTER events and for each row! + - Redo - Refazer + A view trigger cannot be AFTER/BEFORE when it executes for each row! + - Export - Exportar + A trigger cannot make reference to columns when using INSTEAD OF mode and UPDATE event! + - Show grid - Exibir grade + Assignment of a column which has no parent table to the object `%1' (%2)! + - Align to grid - Alinhar à grade + Only constraint triggers can be deferrable or reference another table! + - Fullscreen - Tela cheia + Reference to a function id which is incompatible with the user define type configuration! + - Show the model on fullscreen mode - Exibe o modelo em tela cheia + The operator class assigned to the object `%1' (%2) must use `btree' as indexing method! + - Show the page delimiters - Exibe os limitadores de página + The validation process failed due to an error triggered by the validation helper. For more details about the error check the exception stack! + - Configurations - Configurações + The extension `%1' is registered as a data type and cannot have the attribute `handles datatype' modified! + - Save all models - Salvar modelos + The fk relationship `%1' cannot be created because the foreign-key that represents it was not created on table `%2'! + - Some models were modified! Do you want to save them before finish the pgModeler? - Alguns modelos foram modificados! Deseja salvar todos antes de encerrar o pgModeler? + Assignement of an invalid object name pattern to the relationship `%1'! + - Save '%1' as... - Salvar '%1' como... + Reference to an invalid object name pattern id on the relationship `%1'! + - Print grid - Imprimir grade + Invalid use of variadic parameter mode! This mode can be used only with an array or "any" data type! + - Print page numbers - Imprimir número de páginas + Mixing incompatibles DBMS export modes: `ignore object duplications', `drop database' or `drop objects' cannot be used with `simulate export'! + - Model Options - Opções do modelo + Mixing incompatibles DROP options: `drop database' and `drop objects' cannot be used at the same time! + - Confirmation - Confirmação + Invalid object id swapping operation! The objects involved are the same! + - Load model - Carregar modelo + Invalid object id swapping operation! The database itself, tablespaces or roles cannot have the ids swapped! + - Overview - Visão Geral + The widget already has a parent and cannot be assigned to a different object! + - Show the model overview - Exibe a visão geral do modelo + Could not load the database model file `%1'. Check the error stack to see details. Try to run `pgmodeler-cli --fix-model' in order to correct the structure of the file if that is the case. + - Zoom in - Zoom + + The column `%1' cannot reference it's parent table `%2' as data type! + - Zoom out - Zoom - + Operation with an invalid element id `%1'! + - Save as - Salvar como + Reference to an invalid color id `%1' for element `%2'! + - Close model - Fechar modelo + Assignment of an invalid object to `%1' (%2)! The assigned object must be of type `%3'. + - Normal zoom - Zoom normal + The sequence `%1' can't be assigned to the column `%2' because the data type of the latter is incompatible. The type used must be an integer one! + - Align objects position to grid - Alinhar objetos à grade + The option to generate temporary object names can only be used in simulation mode! + - Show delimiters - Exibir limites + It's not possible convert the type of the column `%1' to serial! It must have an `integer' based type and its default value must be a call to `nextval(seq_name::regclass)' function or a sequence object must be directly assigned to the column! + - Save all - Salvar todos + Could not assign the variable `%1' to event trigger's filter. Currently, PostgreSQL supports only the `TAG' variable! + - Database model printing - Impressão do modelo de banco de dados + Could not perform the `%1' operation on `%2' using the data on row `%3'! All changes were rolled back. + + ** Returned error ** + +%4 + - Changes were detected in the definitions of paper/margin of the model which may cause the incorrect print of the objects. Do you want to continue printing using the new settings? To use the default settings click 'No' or 'Cancel' to abort printing. - Foram detectadas modificações nas definições de papel/margem do modelo o que pode provocar a impressão incorreta dos objetos. Deseja prosseguir com a impressão usando as novas configurações? Para usar as configurações padrão clique 'Não' ou em 'Cancelar' para abortar a impressão. + Malformed unescaped value on row `%1' column `%2'! + - Tools - Ferramentas + Trying to undo/redo an invalid operation over an object that does not exists anymore or can't be handled! The operation history will be cleaned up. + - View - Exibição + The object `%1' (%2) can't be handled because some needed fields are not set! Please, make sure to fill at least the requires fields in order to properly create or update the object. + - Model - Modelo + A relationship can only be swapped by other object of the same kind! + - Database model (*.dbm);;All files (*.*) - Modelo de banco de dados (*.dbm);; Todos os arquivos (*.*) + A parent table of `%1' which OID is `%2' was not found in the set of imported objects! + - Save model - Salvar modelo + The enumeration `%1' can't be assigned to the type `%2' because contains invalid characters! + - The model were modified! Do you want to save it before close? - O modelo foi modificado! Deseja salvá-lo antes de fechar? + The enumeration `%1' can't be assigned to the type `%2' because is too long! + - - - FormRestauracaoModelo - Modified: %1 - Modificado: %1 + The connection was idle for too long and was automatically closed! + - yyyy-MM-dd hh:mm:ss - dd/MM/yyyy hh:mm:ss + The connection was unexpectedly closed by the database server `%1' at port `%2'! + - - - FormRestauracaoModelos - Model restoration - Restauração de modelos + There is already a relationship between `%1' (%2) and `%3' (%4) in the model! When using relationships of the type generalization, copy and one-to-one there can't be other relationships linked to the pair of tables. + - &Restore - &Restaurar + Unable to load the configuration file `%1'! Please check if file exists in its folder and/or if it is not corrupted! + - &Cancel - &Cancelar + Invalid syntax in file `%1', line %2, column %3! + - pgModeler was not closed properly in a previous execution and some models were still being edited. Click 'Restore' to reopen the models or 'Cancel' to abort the restoration. - pgModeler não foi encerrado corretamente em uma execução anterior e alguns modelos ainda estavam em edição. Clique 'Restaurar' para reabrir os modelos ou 'Cancelar' para abortar a restauração. + Invalid instruction `%1' on file `%2', line %3, column %4! + - - - FormSobre - Version %1 - Versão %1 + Unknown attribute `%1' in file `%2', line %3, column %4! + - Close - Fechar + Invalid metacharacter `%1' in file `%2', line %3, column %4! + - Copyright 2006-2012 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -The pgModeler project is a CASE tool for modeling relational databases for PostgreSQL DBMS through the use of modeling techniques from entity-relationship diagrams as well merging concepts that PostgreSQL implements. - -Special thanks to friends of the software development team of the Legislative Assembly, Tocantins, Brazil: Michel de Almeida, Felipe Santana, Jonas Nepomuceno, Ricardo Ishibashi and Álvaro Nunes. - Copyright 2006-2012 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -O projeto pgModeler trata de uma ferramenta CASE para a criação de modelos de bancos de dados relacionais para o SGDB PostgreSQL através do uso de técnicas de modelagem de diagramas entidade-relacionamento, como também mesclando conceitos implementados pelo próprio PostgreSQL. - -Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Assembleia Legislativa, Tocantins, Brasil: Michel de Almeida, Felipe Santana, Jonas Nepomuceno, Ricardo Ishibashi and Álvaro Nunes. + Invalid operator `%1' in comparison expression, file `%2', line %3, column %4! + - About pgModeler - Sobre o pgModeler + Attribute `%1' with an undefined value in file `%2', line %3, column %4! + - Design, configure, deploy - Desenhe, configure, implante + Attribute `%1' with an invalid name in file `%2', line %3, column %4! + - - - FuncaoAgregacaoWidget - Final Function: - Função Final: + Could not access the file or directory `%1'! Make sure that it exists or if the user has access permissions on it! + - Transition Function: - Função de Transição: + Could not load file `%1'. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! + - Sort Operator: - Operador de Ordenação: + Unsupported PostgreSQL version (%1) detected! Valid versions are between %2 and %3. + - Final Condition: - Condição Inicial: + The object `%1' (%2), oid `%3', could not be imported due to one or more errors! Check the exception stack for more details. `HINT:' if the object somehow references objects in `pg_catalog' or `information_schema' consider enable the importing of system objects. + - Funtion Inputs - Entradas da Função + Failed to drop the database `%1' because it is defined as the default database for the connection `%2'! + - Function State - Estado da Função + The column `%1' must be `NOT NULL' because it composes the primary key of the table `%2'. You need to remove the column from the mentioned contraint in order to disable the `NOT NULL' on it! + - Input Data Type - Tipo de Dados de Entrada + The identity column `%1' has an invalid data type! The data type must be `smallint', `integer' or `bigint'. + - State Data Type - Tipo de Dado de Estado + Reference to an invalid affected command in policy `%1'! + - An aggregate function that accepts the types <em><strong>typeA</strong></em> and <em><strong>typeB</strong></em> as input types and which type of state is <em><strong>state_type</strong></em>, must obey the following rules: <br/><br/> <strong> &nbsp;&nbsp;&nbsp;• Final Function:</strong> <em>void final_function(<strong>state_type</strong>)</em><br/> <strong> &nbsp;&nbsp;&nbsp;• Transition Function:</strong> <em><strong>state_type</strong> transition_function(<strong>state_type</strong>, <strong>typeA</strong>, <strong>typeB</strong>)</em> - Uma função de agregação que aceita os tipos <em><strong>tipoA</strong></em> e <em><strong>tipoB</strong></em> como entrada e cujo tipo de estado seja <em><strong>tipo_estado</strong></em>, deve obedecer às seguintes regras:<br/><br/> <strong> &nbsp;&nbsp;&nbsp;• Função Final:</strong> <em>void funcao_final(<strong>tipo_estado</strong>)</em><br/> <strong> &nbsp;&nbsp;&nbsp;• Função Transição:</strong> <em><strong>tipo_estado</strong> funcao_transicao(<strong>tipo_estado</strong>, <strong>tipoA</strong>, <strong>tipoB</strong>)</em> + Reference to an invalid special role in policy `%1'! + - FuncaoWidget - - Attributes - Atributos - + ExtensionWidget - Langague: - Linguagem: + Version: + Versão: - Function Type: - Tipo de Função: + Old Version: + - Window Function: - Função Janela: + This attribute cannot be changed once the object is created. + - Execution Cost: - Custo de Execução: + Handles data type + + + + FindReplaceWidget - Rows Returned: - Linhas Retornadas: + Form + Formulário - Behavior: - Comportamento: + Replace one occurrence + - Security: - Segurança: + Replace + - Return Method: - Método de Retorno: + Replace all occurrences + - Simple - Simples + Replace All + - Set - Conjunto + Replace the selection and find the next one + - Table - Tabela + Replace && Find + - Parameters - Parâmetros + Replace: + - Definition - Definição + Find: + - Dynamic Library: - Biblioteca Dinâmica: + Find previous + - Symbol: - Símbolo: + Shift+F3 + - Library: - Biblioteca: + Find next + - Source code: - Código-Fonte: + F3 + - Column - Coluna + Case sensitive + - Type - Tipo + Regular expression + - Name - Nome + Whole words + - Default Value - Valor Padrão + Hide this widget + - Return Table - Tabela de retorno + ... + FunctionWidget - - Form - Formulário - Attributes Atributos @@ -6698,26 +4271,10 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Function Type: Tipo de Função: - - Langague: - Linguagem: - - - Simple - Simples - Set Conjunto - - Table - Tabela - - - Window Function: - Função Janela: - Return Table Tabela de Retorno @@ -6786,68 +4343,9 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Mode - - - GatilhoWidget - - Triggering Mode: - Modo Disparo: - - - Execute per row - Executar por linha - - - Event: - Evento: - - - Deferrable: - Postergável: - - - Deferral: - Postergação: - - - Referenced Table: - Tab. Referenciada: - - - Conditional Expr.: - Expr. Condicional: - - - Columns - Colunas - - - Column: - Coluna: - - - Arguments - Argumentos - - - Argument: - Argumento: - - Function: - Função: - - - Column - Coluna - - - Type - Tipo - - - Constraint Trigger: - Gatilho Restrição: + Language: + @@ -6856,14 +4354,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Form Formulário - - Printing Options: - Opções de Impressão: - - - Save widgets position - Salvar posição dos widgets - Milimeters Milímetros @@ -6880,10 +4370,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Centimeter Centímetro - - Save current session - Salvar sessão atual - A0 (841 x 1189 mm) @@ -7004,10 +4490,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Tabloid (279 x 432 mm) Tablóide (279 x 432 mm) - - Custom (Based on margins) - Personalizado (Baseado nas margens) - Paper: Papel: @@ -7016,18 +4498,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Orientation: Orientação: - - Margins: - Margens: - - - Autosave interval: - Intervalo de Auto salvamento: - - - Grid size: - Tamanho da grade: - Operation history: Histórico de operações: @@ -7077,20 +4547,8 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Retrato - Print page numbers - Imprimir número de páginas - - - minute(s) - minuto(s) - - - items - itens - - - pixels - pixeis + Print page numbers + Imprimir número de páginas General && Design @@ -7100,18 +4558,10 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da General Geral - - The opened models will be saved periodically - - Check if there is a new version on server - - Check for updates at startup - - Design @@ -7140,14 +4590,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Move canvas by keep mouse on corners - - By default panning mode is triggered with left click and range selection with Shift + left click. - - - - Swap panning and range selection triggers - - Graphical objects (table, views and textboxes) will be created in a single step without the need to click on canvas @@ -7288,396 +4730,189 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da The little brown fox jumps over the lazy dog - - - GraphicalView - Connected rels: %1 + Minimum object opacity (%): - - - HintTextWidget - - Form - Formulário - - - - IndexWidget - Form - Formulário + Defines the minimum opacity percentage applied to the objects when using the fade out feature. A zero opacity causes the object to be completely hidden not being possible to interact with it in the canvas area. + - Fill Factor: - Fator Preenc.: + Canvas grid size: + - Indexing: - Indexação: + Defines the vertical and horizontal grid size. This value affects the spacing of objects when using object grid alignment feature. + - Options: - Opções: + By default the range selection is triggered with Shift + left click. By checking this option range selection will be activated only with a single click and move. + - Concurrent - Concorrente + Trigger range selection with a single click + - Unique - Único + Defines the maximum amount of elements held in the operation history. Once reached the maximum number the history is automatically cleaned. + - Fast update - Atual. Rápida + Defines the period when the opened models will be saved automatically. + - Conditional Expr.: - Expr. Condicional: + Autosave interval (minutes): + - Elements - Elementos + Replaces any straight line in relationship by curved ones in order to improve the model's visualization. + - Column: - Coluna: + Use curved lines for relationships + - Expression: - Expressão: + Souce code editor args: + - Operator Class: - Classe Operadores: + lines + - Ascending - Ascendente + Clear the entire SQL comand history. + - Descending - Descendente + Clear history + - Nulls first - Nulos primeiro + Open in file manager + Abrir gerenciador de arquivos - Sorting: - Ordenação: + Overrides the default user interface language defined by the system. Requires restarting the program. <strong>NOTE:</strong> UI translations are third party collaborations thus any typo or mistake should be reported directly to their respective maintainers. + - Element - Elemento + SQL history max. length: + - Type - Tipo + Check updates at startup + - Sorting - Ordenação + User interface language: + - Nulls First - Nulos Primeiro + Browse the source code editor application + - Expression - Expressão + Souce code editor: + - Yes - Sim + Configurations directory: + - No - Não + System default + - Attributes - Atributos + All files (*.*) + - Buffering + Load file + + + GenericSQLWidget - Predicate: + SQL code - IndiceWidget + HintTextWidget - Indexing Type: - Tipo Indexação: + Form + Formulário + + + IndexWidget Fill Factor: - Fator Preenc.: + Fator Preenc.: + + + Indexing: + Indexação: Options: - Opções: + Opções: Concurrent - Concorrente + Concorrente - Check duplicates - Checar duplicados + Unique + Único Fast update - Atual. Rápida - - - Conditional Expr.: - Expr. Condicional: + Atual. Rápida Elements - Elementos - - - Column: - Coluna: - - - Expression: - Expressão: - - - Operator Class: - Classe Operadores: - - - Sorting: - Ordenação: - - - Ascending - Ascendente - - - Descending - Descendente - - - Nulls first - Nulos primeiro - - - Type - Tipo - - - Operator Class - Classe Operadores - - - Sorting - Ordenação - - - Element - Elemento - - - Nulls First - Nulos Primeiro + Elementos - Expressão - Expressão + Attributes + Atributos - Sim - Sim + Buffering + - Não - Não + Predicate: + LanguageWidget - - Form - Formulário - Trusted: Confiável: - - Handler Function: - Função Manipuladora: - - - Validator Function: - Função Validadora: - - - Inline Function: - Função em Linha: - The functions to be assigned to the language should have, respectively, the following signatures:<br/><br/> <strong>Handler Function:</strong> <em>language_handler function()</em><br/> <strong>Validator Function:</strong> <em>void function(oid)</em><br/> <strong>Inline Function:</strong> <em>void function(internal)</em> As funções a serem atribuídas à linguagem devem possuir, respectivamente, as seguintes assinaturas:<br/><br/> <strong>Função Manipuladora:</strong> <em>language_handler funcao()</em><br/> <strong>Função Validadora:</strong> <em>void funcao(oid)</em><br/> <strong>Função em Linha:</strong> <em>void funcao(internal)</em> Validator Func.: - - - - Handler Func.: - - - - Inline Func.: - - - - - LinguagemWidget - - Trusted: - Confiável: - - - Handler Function: - Função Handler: - - - Validator Function: - Função Validator: - - - Inline Function: - Função Inline: - - - The functions to be assigned to the language should have, respectively, the following signatures:<br/><br/> <strong>Handler Function:</strong> <em>language_handler function()</em><br/> <strong>Validator Function:</strong> <em>void function(oid)</em><br/> <strong>Inline Function:</strong> <em>void function(internal)</em> - As funções a serem atribuídas à linguagem devem possuir, respectivamente, as seguintes assinaturas:<br/><br/> <strong>Função Handler:</strong> <em>language_handler funcao()</em><br/> <strong>Função Validator:</strong> <em>void funcao(oid)</em><br/> <strong>Função Inline:</strong> <em>void funcao(internal)</em> - - - - ListaObjetosWidget - - Dependencies - Dependências - - - Object - Objeto - - - Type - Tipo - - - Parent Object - Objeto Pai - - - Parent Type - Tipo Pai - - - References - Referências - - - Dependeces / References of Object - Dependências / Referências do Objeto - - - - ListaOperacoes - - Undoing operation on object: %1 (%2) - Desfazendo operação no objeto: %1 (%2) - - - Redoing operation on object:: %1 (%2) - Refazendo operação no objeto: %1 (%2) - - - - ListaOperacoesWidget - - Executed Operations - Operações Executadas - - - Operations: - Operações: - - - Position: - Posição: - - - Delete operation history - Excluir histórico de operações - - - Undo - Desfazer - - - Redo - Refazer - - - Object: %1 - Objeto: %1 - - - Name: %1 - Nome: %1 - - - removed - removido - - - modified - modificado - - - moved - movimentado - - - Operation: %1 - Operação: %1 - - - Undoing operations... - Desfazendo operações... - - - Redoing operations... - Refazendo operações... - - - Operation history exclusion - Exclusão de histórico de operações + - Delete the executed operations history is an irreversible action, do you want to continue? - Excluir o histórico de operações executadas é uma ação irreversível, deseja realmente prosseguir? + Handler Func.: + - created - criado + Inline Func.: + @@ -7694,34 +4929,10 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da &Edit &Editar - - &Help - A&juda - &Show &Mostrar - - &Tools - &Ferramentas - - - File - Arquivo - - - View - Ver - - - Edit - Editar - - - Model - Modelo - Plugins @@ -7734,10 +4945,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Ctrl+N - - Save - Salvar - Ctrl+S @@ -7762,66 +4969,26 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Ctrl+- - - Load - Carregar - Ctrl+O - - Next - Próximo - - - Previous - Anterior - - - Save as - Salvar como - - - Exit - Sair - Ctrl+Q - - About pgModeler - Sobre o pgModeler - - - Print - Imprimir - Ctrl+P - - Undo - Desfazer - Ctrl+Z - - Redo - Refazer - Ctrl+Y - - Export - Exportar - Ctrl+Shift+S @@ -7834,42 +5001,18 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Ctrl+G - - Close model - Fechar modelo - Ctrl+W - - Normal zoom - Zoom normal - Ctrl+0 - - Align to grid - Alinhar à grade - Align objects position to grid Alinhar objetos à grade - - Fullscreen - Tela inteira - - - Show the model on fullscreen mode - Mostra o modelo em tela inteira - - - Show delimiters - Mostrar delimitadores - Show the page delimiters Mostrar os delimitadores da página @@ -7878,46 +5021,22 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Ctrl+L - - Configurations - Configurações - Save all Salvar todos - - Overview - Visão Geral - Show the model overview Mostra a visão geral do modelo - - pgModeler Wiki - Wiki pgModeler - F1 - - Save all models - Salvar todos os modelos - - - Some models were modified! Do you want to save them before finish the pgModeler? - Alguns modelos foram modificados! Deseja salvá-los antes de encerrar o pgModeler? - Save model Salvar modelo - - The model were modified! Do you want to save it before close? - O modelo foi modificado! Deseja salvá-lo antes de fechar? - Save '%1' as... Salvar '%1' como... @@ -7942,22 +5061,10 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Load model Carregar modelo - - Open Wiki pages - Abrir Páginas Wiki - This action will open a web browser window! Want to proceed? Esta ação abrirá uma janela do navegador de internet! Deseja prosseguir? - - Ctrl+Right - Ctrl+Direita - - - Ctrl+Left - Ctrl+Esquerda - Ctrl+H @@ -8242,10 +5349,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da &Diff - - Determine the changes between model and database - - Ctrl+Shift+D @@ -8410,52 +5513,33 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Executing pending <strong>%1</strong> operation... - - - MessageBox - - Dialog - Diálogo - - - Show excpetion stack in text format (useful to report errors). - Mostra a pilha de exceções em formato texto (útil para reportar erros). - - - Show/hide exceptions stack. - Mostrar/Esconder pilha de exceções. - - - Exceptions - Exceções - - &Yes - &Sim + Determine the changes between model/database and another database + - &No - &Não + Arrange objects + - Cancel - Cancelar + Rearrange objects over the canvas + - Error - Erro + Grid + - Alert - Alerta + Hierarchical + - Information - Informação + Scattered + - &Cancel - &Cancelar + Rearrange objects over the canvas is an irreversible operation! Would like to proceed? + @@ -8603,18 +5687,10 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Custom SQL commands - - Save textboxes to the output file when extracting metadata. When loading the file textboxes are recreated and duplicated ones are ignored. - - Textbox objects - - Save tags to the output file when extracting metadata. When loading the file tags are recreated and duplicated ones are ignored. - - Tag objects @@ -8640,102 +5716,122 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da - Extracts the objects metadata from one of the loaded models and apply to the current model. + Output + + + + Progress label... + Rótulo de progresso... + + + model not saved yet + + + + The backup file cannot be the same as the input model! - Extract from a &model + Extracting metadata to file `%1' - Reads the objects metadata from a previously saved backup file and apply to the current model. + Saving backup metadata to file `%1' - Restore a bac&kup file + Applying metadata from file `%1' - Output + Metadata processing aborted! - Progress label... - Rótulo de progresso... + Objects metadata file (*.omf);;All files (*.*) + - model not saved yet + Handles the objects' fade out status in the metadata file. - The backup file cannot be the same as the input model! + Objects' fade out status - Extracting metadata to file `%1' + Save tags to the output file when extracting metadata. When loading the file, the tags are recreated and duplicated ones are ignored. - Saving backup metadata to file `%1' + Save textboxes to the output file when extracting metadata. When loading the file, the textboxes are recreated and duplicated ones are ignored. - Applying metadata from file `%1' + Handles the tables' and views' extended attributes display status in the metadata file. - Metadata processing aborted! + Tables' extended attributes display - Objects metadata file (*.omf);;All files (*.*) + Save generic SQL objects to the output file when extracting metadata. When loading the file, the objects are recreated and duplicated ones are ignored. - - - ModelDatabaseDiffForm - Database model diff + Generic SQL objects - Generate diff from model + Extracts the objects' metadata from the loaded models and apply to the current focused model. A backup file can be specified to where the focused model's current metadata will be saved. - Settings + &Extract and restore - Input database + Extracts the objects metadata from one of the loaded models saving the info to a backup file. - Connection: - Conexão: + Extract &only + - Database: + Reads the objects' metadata from a previously saved backup file and apply to the current model. + + + + &Restore a backup file + + + ModelDatabaseDiffForm - Options + Settings - Ignores as many as possible errors on import step. This option generates an incomplete diff. + Connection: + Conexão: + + + Database: - Ignore import errors + Ignores as many as possible errors on import step. This option generates an incomplete diff. - Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production servers and always make a backup before use it. + Ignore import errors - Trucate tables before alter columns + Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production servers and always make a backup before use it. @@ -8926,14 +6022,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Waiting process to start... - - Importing database <strong>%1</strong>... - - - - Comparing the model <strong>%1</strong> and database <strong>%2</strong>... - - Confirmation Confirmação @@ -8950,10 +6038,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Preview diff - - Exporting diff to database <strong>%1</strong>... - - Diff process paused. Waiting user action... @@ -8975,46 +6059,114 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da - Process aborted due to errors! + Process aborted due to errors! + + + + + +-- SQL code purposely truncated at this point in demo version! + + + + -- No differences were detected between model and database. -- + + + + Error code <strong>%1</strong> found and ignored. Proceeding with export. + + + + Save diff as... + + + + SQL code (*.sql);;All files (*.*) + Código SQL (*.sql);;Todos os Arquivos (*.*) + + + Diff tool + + + + Generate diff code + + + + Source database + + + + Current model: + + + + (model) + + + + Compare to + + + + Diff + + + + Froce the generation of DROP commands for columns and constraints that exist in database but not in the model. This is useful when diff a partial model against the complete database and the user needs to drop columns and constraint but preserve the rest of the objects. + + + + Drop missing columns and constraints + + + + Truncate tables before alter columns + + + + Import && Export + + + + Import + + + + Export + Exportar + + + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + + + + Ignore error codes - - --- SQL code purposely truncated at this point in demo version! + model not saved yet - -- No differences were detected between model and database. -- + (none) - Error code <strong>%1</strong> found and ignored. Proceeding with export. + Step %1/%2: Importing database <strong>%3</strong>... - Save diff as... + Step %1/%2: Comparing <strong>%3</strong> and <strong>%4</strong>... - SQL code (*.sql);;All files (*.*) - Código SQL (*.sql);;Todos os Arquivos (*.*) + Step %1/%2: Exporting diff to database <strong>%3</strong>... + ModelExportForm - - Model Export - Exportação do Modelo - - - Select the export type: - Selecione o tipo de exportação: - - - Export to SQL file: - Exportação para arquivo SQL: - File: Arquivo: @@ -9035,54 +6187,18 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da PostgreSQL version in which the SQL code should be generated Versão do PostgreSQL no qual o código SQL deve ser gerado - - Check if the system user has write permission on target folder. - Verifique se o usuário do sistema possui permissão de gravação sobre a pasta de destino. - - - Export to PNG image: - Exportação para imagem PNG: - - - Image: - Imagem: - - - Options: - Opções: - Show grid Mostrar grade - - Show the page delimiters - Mostrar delimitadores de página - - - Check if the system user has write permission on image target folder. - Verifique se o usuário do sistema possui permissão de gravação sobre a pasta de destino da imagem. - Connection: Conexão: - - It is recommended to select this option only when the version of the DBMS, somehow, is not identifiable or if you need to generate a specific version of SQL code for testing. - É recomendado selecionar esta opção somente quando a versão do SGBD, de alguma forma, não seja identificável ou se é necessário gerar uma versão específica de código SQL para testes. - Ignore object duplicity Ignorar duplicidade de objetos - - The pgModeler ignores errors generated by duplicate objects and creates only model objects that do not exist in the database. This option may be used when an object was created after a later model export. - O pgModeler ignora os erros gerados por duplicidade de objetos e cria apenas objetos do modelo não existentes no banco de dados. Esta opção pode ser usada quando um objeto foi criado depois de uma posterior exportação do modelo. - - - Export to DBMS: - Exportação para o SGBD: - Progress label... Rótulo de progresso... @@ -9095,10 +6211,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da &Close &Fechar - - Generating source code... - Gerando código-fonte... - Initializing model export... Iniciando exportação do modelo... @@ -9107,42 +6219,14 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Saving file '%1' Salvando arquivo '%1' - - Creating object '%1' (%2)... - Criando objeto '%1' (%2)... - - - Creating database '%1'... - Criando banco de dados '%1'... - - - Connecting to database '%1'... - Conectando ao banco de dados '%1'... - - - Creating objects on database '%1'... - Criando objetos No banco de dados '%1'... - Exporting process sucessfuly ended! Processo de exportação finalizado com sucesso! - - Error on export! - Erro na exportação! - Export model as... Exportar modelo como... - - SQL code (*.sql);;All files (*.*) - Código SQL (*.sql);;Todos os Arquivos (*.*) - - - PNG image (*.png);;All files (*.*) - Imagem PNG (*.png);;Todos os Arquivos (*.*) - Export model @@ -9187,10 +6271,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Graphics file - - Image (PNG) - - Type: Tipo: @@ -9199,10 +6279,6 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Zoom: - - Vectorial (SVG) - - Show delimiters @@ -9251,6 +6327,22 @@ Agradecimentos especiais aos amigos da equipe de desenvolvimento de software da Exporting process canceled by user! + + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + + + + Ignore error codes + + + + I&mage (PNG) + + + + &Vectorial (SVG) + + ModelExportHelper @@ -9515,10 +6607,6 @@ p, li { white-space: pre-wrap; } Parent Type Tipo Pai - - Visible Object Types - Tipos de Objeto Visíveis - Select All Selecionar Todos @@ -9587,6 +6675,14 @@ p, li { white-space: pre-wrap; } By ID + + Visible object types + + + + Model objects + + ModelOverviewWidget @@ -9594,6 +6690,11 @@ p, li { white-space: pre-wrap; } Model overview Visão geral do modelo + + Failed to generate the overview image. +The requested size %1 x %2 was too big and there was not enough memory to allocate! + + ModelRestorationForm @@ -9609,18 +6710,6 @@ p, li { white-space: pre-wrap; } &Cancel &Cancelar - - pgModeler was not closed properly in a previous execution and some models were still being edited. Click 'Restore' to reopen the models or 'Cancel' to abort the restoration. - pgModeler não foi encerrado corretamente em uma execução anterior e alguns modelos ainda estavam em edição. Clique 'Restaurar' para reabrir os modelos ou 'Cancelar' para abortar a restauração. - - - Modified: %1 - Modificado: %1 - - - yyyy-MM-dd hh:mm:ss - dd/MM/yyyy hh:mm:ss - pgModeler was not closed properly in a previous execution and some models were still being edited. Click <strong>Restore</strong> to reopen the models or <strong>Cancel</strong> to abort the restoration. @@ -9711,10 +6800,6 @@ p, li { white-space: pre-wrap; } Try to resolve the reported issues. - - Apply Fix - - Ctrl+S @@ -9723,10 +6808,6 @@ p, li { white-space: pre-wrap; } Change the creation order for two objects by swapping their ids - - Swap Ids - - Va&lidate @@ -9823,6 +6904,22 @@ p, li { white-space: pre-wrap; } Processing object: %1 + + Apply fixes + + + + Swap ids + + + + The column <strong>%1</strong> on <strong>%2</strong> <em>(%3)</em> is referencing the geospatial data type <strong>%4</strong> but the <strong>postgis</strong> extension is not present in the model! + + + + <strong>HINT:</strong> Create the extension in the model or let it be created by applying the needed fixes. + + ModelWidget @@ -9830,14 +6927,6 @@ p, li { white-space: pre-wrap; } Copy Copiar - - Generalization - Generalização - - - <strong>CAUTION:</strong> The object model is protected! New objects will be inserted only when the protection is removed! - <strong>ATENÇÃO:</strong> O modelo de objetos está protegido! Novos objetos só poderão ser inseridos quando a proteção for removida! - Source code Código fonte @@ -9866,18 +6955,10 @@ p, li { white-space: pre-wrap; } Protects object(s) from modifications Protege objeto(s) contra modificações - - Unprotect objetc(s) from modifications - Desprotege objeto(s) contra modificações - Delete Apagar - - Delete the selected object(s) - Apaga o(s) objeto(s) selecionado(s) - Select all Selecionar todos @@ -9886,50 +6967,18 @@ p, li { white-space: pre-wrap; } Selects all the graphical objects in the model Seleciona todos os objetos gráficos no modelo - - Convert rel. n-n - Converter rel. n-n - - - Converts the n-n relationship into table - Converte o relacionamento n-n em tabela - - - Copy the selected objects(s) - Copia o(s) objeto(s) selecionado(s) - Paste Colar - - Paste the previous copied object(s) - Cola o(s) objeto(s) copiados previamente - Cut Recortar - - Cut the selected object(s) - Recorta o(s) objeto(s) selecionado(s) - - - Displays objects that reference and that are dependent of the selected object - Exibe os objetos que referenciam e os que são dependentes do objeto selecionado - - - New object - Novo objeto - Add a new object in the model Adiciona um novo objeto no modelo - - Quick actions - Ações rápidas - Rename Renomear @@ -9942,50 +6991,18 @@ p, li { white-space: pre-wrap; } Move to schema Mover para o esquema - - Move the object to another schema - Mover o objeto para outro esquema - Edit permissions Editar permissões - - Edit object's permissions - Editar permissões do objeto - Change owner Mudar proprietário - - Change object's owner - Mudar proprietário do objeto - Select children Selecionar filhos - - Selects all the children graphical objects on the selected schema - Seleciona todos os objetos gráficos filhos no esquema selecionado - - - Highlight - Destacar - - - Clears the current selection and centers the model view on the selected object. - Limpa a seleção atual e centraliza a visualização do modelo no objeto selecionado. - - - Confirmation - Confirmação - - - Do you really want to convert the relationship? - Deseja realmente converter o relacionamento? - Loading database model Carregando modelo de banco de dados @@ -10002,26 +7019,10 @@ p, li { white-space: pre-wrap; } Pasting objects... Colando objetos... - - Validating object: %1 (%2) - Validando o objeto: %1 (%2) - - - Generating XML code of object: %1 (%2) - Gerando código XML do objeto: %1 (%2) - - - Pasting object: %1 (%2) - Colando o objeto: %1 (%2) - Not all objects were pasted to the model due to errors returned during the process! Refer to error stack for more details! Nem todos objetos foram colados ao modelo devido a erros retornados durante o processo! Consulte a pilha de erros para mais detalhes! - - CAUTION: Remove multiple objects at once can cause irreversible invalidations to other objects in the model. Do you really want to delete ALL selected objects? - ATENÇÃO: Remover vários objetos de uma só vez pode provocar invalidações irreversíveis de outros objetos no modelo. Tem certeza de que deseja excluir TODOS os objetos selecionados? - Do you really want to delete the selected object? Deseja realmente apagar o objeto selecionado? @@ -10034,18 +7035,6 @@ p, li { white-space: pre-wrap; } Constraints Restrições - - Dependencies - Dependências - - - CAUTION: Remove multiple objects at once can cause irreversible invalidations to other objects in the model. Such invalid objects will be deleted too. Do you really want to delete ALL selected objects? - ATENÇÃO: Remover múltiplos objetos de uma vez pode causar invalidações irreversíveis a outros objetos no modelo. Tais objetos inválidos serão apagados também. Deseja realmente apagar TODOS os objetos selecionados? - - - CAUTION: Remove a relationship can cause irreversible invalidations to other objects in the model. Such invalid objects will be deleted too. Do you really want to delete the relationship? - ATENÇÃO: Remover um relacionamento pode causar invalidações irreversíveis a outros objetos no modelo. Tais objetos inválidos serão apagados também. Deseja realmente apagar o relacionamento? - One to One (1-1) @@ -10238,179 +7227,93 @@ p, li { white-space: pre-wrap; } The cascade deletion found some problems when running! Some objects could not be deleted or registered in the operation's history! Please, refer to error stack for more details. - - - ModeloBD - - Loading object: %1 (%2) - Carregando objeto: %1 (%2) - - - Generating %1 of the object: %2 (%3) - Gerando %1 do objeto: %2 (%3) - - - - ModeloWidget - - Generalization - Generalização - - - <strong>CAUTION:</strong> The object model is protected! New objects will be inserted only when the protection is removed! - <strong>ATENÇÃO:</strong> O modelo de objetos encontra-se protegido! Novos objetos só poderão ser inseridos quando esta situação for revertida! - - - Source code - Código-fonte - - - Show object source code - Exibe o código-fonte do objeto - - - Properties - Propriedades - - - Edit the object properties - Edita as propriedades do objeto - - Protect - Proteger - - - Unprotect - Desproteger - - - Pretects the object(s) against modifications - Protege o(s) objeto(s) contra modificações - - - Removes from the objetc(s) the protection against modifications - Remove a proteção contra modificação do(s) objeto(s) - - - Delete - Excluir - - - Delete the selected object(s) - Exclui o(s) objeto(s) selecionado(s) - - - Select all - Selecionar todos - - - Selects all the graphical objects in the model - Seleciona todos os objetos gráficos no modelo - - - Converts the n-n relationship into table - Converte o relacionamento n-n para tabela própria - - - Copy - Copiar - - - Copy the selected objects(s) - Copia o(s) objeto(s) selecionado(s) - - - Paste - Colar - - - Paste the previos copied object(s) - Cola o(s) objeto(s) anteriormente copiado(s) + Edit data + - Cut - Recortar + Select tagged + - Displays objects that reference and that are dependent of the selected object - Exibe os objetos que referenciam e os que são dependência do objeto selecionado + Select + Selecionar - New object - Novo objeto + Duplicate + - Add a new object in the model - Adiciona um novo objeto no modelo + Ctrl+D + - Loading database model - Carregando modelo de banco de dados + Extended attributes + - Saving database model - Salvando modelo de banco de dados + Show + Exibir - Confirmation - Confirmação + Hide + - Also copy all dependencies of selected objects? This minimizes the breakdown of references when copied objects are pasted into another model. - Deseja copiar também todas dependências dos objetos selecionados? Isso minimiza a quebra de referências quando os objetos copiados forem colados em outro modelo. + Jump to table + - Pasting objects... - Colando objetos... + Schemas rectangles + - Not all objects were pasted to the model due to errors returned during the process! Refer to error stack for more details! - Nem todos objetos foram colados ao modelo devido a erros retornados durante o processo! Consulte a pilha de erros para mais detalhes! + Fade in/out + - Do you really want to delete the selected object? - Tem certeza de que deseja excluir o objeto selecionado? + Fade in + - Constraints - Restrições + Fade out + - Convert a relationship is an irreversible operation and causes the deletion of all operation history! Do you want to continue? - Converter um relacionamento é uma operação irreversível e provoca a exclusão de todo histórico de operações! Deseja continuar? + Relationships + - Dependence - Dependência + Swap ids + - Convert rel. n-n - Converter rel n-n + Edit the objects creation order by swapping their ids + - Cut the selected object(s) - Recortar o(s) objeto(s) selecionado(s) + All objects + - Relationship - Relacionamento + Schemas + - CAUTION: Remove multiple objects at once can cause irreversible invalidations to other objects in the model. Do you really want to delete ALL selected objects? - ATENÇÃO: Remover vários objetos de uma só vez pode provocar invalidações irreversíveis de outros objetos no modelo. Tem certeza de que deseja excluir TODOS os objetos selecionados? + Tables + Tabelas - Validating object: %1 (%2) - Validando o objeto: %1 (%2) + Views + - Pasting object: %1 (%2) - Colando o objeto: %1 (%2) + Textboxes + - Generating XML code of object: %1 (%2) - Gerando código XML do objeto: %1 (%2) + None + @@ -10702,6 +7605,18 @@ p, li { white-space: pre-wrap; } 0 + + Generic SQL + + + + Policy + + + + 8 + + NumberedTextEditor @@ -10721,13 +7636,45 @@ p, li { white-space: pre-wrap; } Ident left + + Load + Carregar + + + Load the object's source code from an external file + + + + Edit + Editar + + + Edit the source code in the preferred external editor + + + + Clear + + + + SQL file (*.sql);;All files (*.*) + + + + Load file + + + + The source editor `%1' is running on `pid: %2'. + + + + Could not start the source code editor application `%1'! Make to sure that the source editor path defined in the general settings points to a valid executable and the current user has permission to run the application. Error message returned: `%2' + + ObjectDepsRefsWidget - - Form - Formulário - Dependencies Dependências @@ -10752,10 +7699,6 @@ p, li { white-space: pre-wrap; } References Referências - - Dependences / References of Object - Dependências / Referências de Objeto - Object's dependencies & references @@ -10803,14 +7746,6 @@ p, li { white-space: pre-wrap; } Clear - - Highlight graphical objects when selecting them or their children on the result list - - - - Highlight - Destacar - ... @@ -10871,6 +7806,30 @@ p, li { white-space: pre-wrap; } No objects found. + + (Un)selects the graphical objects in the results grid + + + + Select + Selecionar + + + Fades outs all the graphical objects in the results grid (or those not listed). The current fade in/out state of all objects is modified. + + + + Fade out + + + + Listed + + + + Not listed + + ObjectRenameWidget @@ -10915,343 +7874,106 @@ p, li { white-space: pre-wrap; } - ObjectTableWidget + ObjectsTableWidget Form - Formulário + Formulário Add Item - Adicionar Item + Adicionar Item Ins - + Remove Item - Remover Item + Remover Item Del - + Update Item - Atualizar Item + Atualizar Item Alt+R - + Remove All - Remover Todos + Shift+Del - - - - Edit Item - Editar Item - - - Space - - - - Move Up - Mover para cima - - - Ctrl+Up - - - - Move Down - Mover para baixo - - - Ctrl+Down - - - - Move to start - Mover para o início - - - Ctrl+Home - - - - Move to end - Mover para o final - - - Ctrl+End, Ctrl+S - - - - Confirmação - Confirmação - - - Do you really want to remove the selected item? - Deseja realmente remover o item selecionado? - - - Do you really want to remove the all items? - Deseja realmente remover todos os itens? - - - Confirmation - Confirmação - - - - ObjetoBase - - Column - Coluna - - - Constraint - Restrição - - - Function - Função - - - Trigger - Gatilho - - - Index - Índice - - - Rule - Regra - - - Table - Tabela - - - View - Visão - - - Domain - Domínio - - - Schema - Esquema - - - Aggregate - Função de Agregação - - - Operator - Operador - - - Sequence - Seqüência - - - Role - Papel - - - Conversion - Conversão de Codificação - - - Cast - Conversão de Tipo - - - Language - Linguagem - - - Type - Tipo - - - Tablespace - Espaço de Tabela - - - Operator Family - Família de Operadores - - - Operator Class - Classe de Operadores - - - Database - Banco de Dados - - - Table-Table Relationship - Relacionamento Tabela-Tabela - - - Textbox - Caixa de Texto - - - Permission - Permissão - - - Parameter - Parâmetro - - - Table-View Relationship - Relacionamento Tabela-Visão - - - - ObjetoBaseWidget - - Name: - Nome: - - - Comment: - Comentário: - - - Tablespace: - Esp. de Tabela: - - - Owner: - Dono: - - - Schema: - Esquema: - - - Permissions: - Permissões: - - - This object is protected thus no change in form will be applied to it. - Este o objeto encontra-se protegido, assim nenhuma alteração no formulário será aplicada ao mesmo. - - - Parent Object: - Objeto Pai: - - - Value(s) - Valor(es) - - - Version - Versão - - - The field(s) or value(s) highlighted on the form is(are) for the exclusive use and/or mandatory in specific versions of PostgreSQL. Failure to complete that may cause errors in the generation of SQL code for each version shown in tool tips of the highlighted fields. - O(s) campo(s) ou valor(es) destacado(s) no formulário é(são) de uso exclusivo e/ou obrigatório em versões específicas do PostgreSQL. O não preenchimento do(s) mesmo(s) pode ocasionar erros na geração de código SQL de cada versão indicada nas dicas de ferramenta dos campos destacados. - - - Criate / Edit: - Criação / Edição: - - - Edit Permissions - Editar Permissões - - - - OperadorWidget - - Options: - Opções: + - Arguments - Argumentos + Duplicate item + - Functions - Funções + Ctrl+D + - Constraints: - Restrição: + Edit Item + Editar Item - Operator: - Operador: + Space + - Operators - Operadores + Move Up + Mover para cima - Commutation: - Comutação: + Ctrl+Up + - Negation: - Negação: + Move Down + Mover para baixo - Sort (1): - Ordenação (1): + Ctrl+Down + - Sort (2): - Ordenação (2): + Move to start + Mover para o início - Less than: - Menor que: + Ctrl+Home + - Greater then: - Maior que: + Move to end + - Right Argument Type - Tipo Argumento Direita + Ctrl+End, Ctrl+S + - Left Argument Type - Tipo Argumento Esquerda + Confirmation + Confirmação - To create a unary operator it is necessary to specify as <strong><em>'any'</em></strong> one of its arguments. Additionally, the function that defines the operator must have only one parameter and this, in turn, must have the same data type of the the argument of unary operator. - Para a criação de um operador unário é necessário especificar como <strong><em>'any'</em></strong> um de seus argumentos. Adicionalmente, a função que define o operador deve possuir apenas uma parâmetro e este, por sua vez, deve ter o tipo de dado igual ao tipo de dado do argumento do operador unário. + Do you really want to remove the selected item? + - Join: - Junção: + Do you really want to remove all the items? + OperationList - - Undoing operation on object: %1 (%2) - Desfazendo operação no objeto: %1 (%2) - - - Redoing operation on object:: %1 (%2) - Refazendo operação no objeto: %1 (%2) - (invalid object) @@ -11319,14 +8041,6 @@ p, li { white-space: pre-wrap; } Operation: %1 Operação: %1 - - Undoing operations... - Desfazendo operações... - - - Redoing operations... - Refazendo operações... - Operation history exclusion Exclusão de histórico de operações @@ -11346,10 +8060,6 @@ p, li { white-space: pre-wrap; } OperatorClassWidget - - Form - Formulário - Default Class: Classe Padrão: @@ -11362,10 +8072,6 @@ p, li { white-space: pre-wrap; } Elements Elementos - - Elemente Type: - Tipo de Elemento: - Operator Operador @@ -11390,14 +8096,6 @@ p, li { white-space: pre-wrap; } Support/Strategy: Suporte/Estratégia: - - Recheck - Rechecar - - - Family: - Família: - Storage Type Tipo de Armazenamento @@ -11414,14 +8112,6 @@ p, li { white-space: pre-wrap; } Support/Strategy Suporte/Estratégia - - Yes - Sim - - - No - Não - Element Type: Tipo de Elemento: @@ -11437,10 +8127,6 @@ p, li { white-space: pre-wrap; } OperatorFamilyWidget - - Form - Formulário - Indexing: Indexação: @@ -11448,10 +8134,6 @@ p, li { white-space: pre-wrap; } OperatorWidget - - Form - Formulário - HASHES @@ -11468,46 +8150,10 @@ p, li { white-space: pre-wrap; } Arguments Argumentos - - Functions - Funções - Join: Junção: - - Operator: - Operador: - - - Operators - Operadores - - - Commutation: - Comutação: - - - Negation: - Negação: - - - Sort (1): - Ordenação (1): - - - Sort (2): - Ordenação (2): - - - Less than: - Menor que: - - - Greater then: - Maior que: - Right Argument Type Tipo Argumento Direita @@ -11528,10 +8174,6 @@ p, li { white-space: pre-wrap; } Restrict: Restrito: - - Commutator - Comutador - Negator: Negador: @@ -11546,579 +8188,645 @@ p, li { white-space: pre-wrap; } - PapelWidget + ParameterWidget - Password: - Senha: + Default Value: + Valor Padrão: - Validity: - Validade: + Mode: + Modo: - Connections: - Conexões: + IN + - Attributes - Atributos + OUT + - Superuser - Superusuário + VARIADIC + + + + PermissionWidget - Inherit Permissions - Herdar Permissões + Roles + Papéis - Create Database - Criar Banco de Dados + ID: + - Can Login - Permitir Login + Permissions + Permissões - Create Users/Groups - Criar Usuários/Grupos + Add Permission + Adicionar Permissão - Encrypted Password - Senha Criptografada + Update Permission + Atualizar Permissão - Members - Membros + Cancel Operation + Cancelar Operação - Role - Papel + Privileges + Privilégios - Validity - Validade + Privilege + Privilégio - Members (Admin.) - Membros (Admin.) + GRANT OPTION + - Member of - Membro de + Id + - - - ParameterWidget - Form - Formulário + Disable SQL code + Desabilitar código SQL - Default Value: - Valor Padrão: + Cascade + Cascata - Mode: - Modo: + Edit permissions + Editar permissões - IN - + &Grant + - OUT - + Re&voke + - VARIADIC + Code Preview + Previsão de Código + + + -- No permissions defined for the specified object! - - - ParametroWidget - Default Value: - Valor Padrão: + /* Could not generate the SQL code preview for permissions! + - Mode: - Modo: + Name + Nome + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + - PermissaoWidget + PgModelerCLI - Roles - Papéis + Unrecognized option '%1'. + Opção '%1' não reconehcida. - Privileges - Privilégios + Value not specified for option '%1'. + Valor não specificado para a opção '%1'. - Cancel Operation - Cancelar Operação + Option '%1' does not accept values. + Opção '%1' não aceita valores. - Update Permission - Atualizar Permissão + Usage: pgmodeler-cli [OPTIONS] + Uso: pgmodeler-cli [OPÇÕES] - Add Permission - Adicionar Permissão + command line interface. + interface da linha de comando. - Type: - Tipo: + DBMS export options: + Opções da exportação SGBD: - Role - Papel + Input file must be different from output! + Arquivo de entrada deve ser diferente do de saída! - Permissions - Permissões + Incomplete connection information! + Informação de conexão incompleta! + + + Starting model export... + Iniciando exportação de modelo... + + + General options: + + + + PNG and SVG export options: + + + + Miscellaneous options: + + + + There are no connections configured. + + + + Invalid zoom specified! + + + + Invalid action specified to update mime option! + + + + Starting model fixing... + + + + Starting mime update... + + + + Model successfully fixed! + + + + Extracting objects' XML... + + + + Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! + + + + Recreating objects... + + + + +** Object(s) that couldn't fixed: + + + + WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) + + + + Database model files (.dbm) are already associated to pgModeler! + + + + There is no file association related to pgModeler and .dbm files! + - Privilege - Privilégio + Mime database operation: %1 + - - - PermissionWidget - Form - Formulário + Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. + - Roles - Papéis + Running update-mime-database command... + - ID: - + Connection aliased as '%1' was not found in the configuration file. + - Permissions - Permissões + PostgreSQL Database Modeler Project - pgmodeler.io + - Add Permission - Adicionar Permissão + Copyright 2006-2018 Raphael A. Silva <raphael@pgmodeler.io> + - Update Permission - Atualizar Permissão + This CLI tool provides several operations over models and databases without the need to perform them +in pgModeler's graphical interface. All available options are described below. + - Cancel Operation - Cancelar Operação + %1, %2 [FILE] Input model file (.dbm). This is mandatory for fix, export operations. + - Privileges - Privilégios + %1, %2 [DBNAME] Input database name. This is mandatory for import operation. + - Privilege - Privilégio + %1, %2 [FILE] Output file. This is mandatory for fixing model or exporting to file, png or svg. + - GRANT OPTION - + %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + - Type: - Tipo: + %1, %2 [NUMBER] Model fix tries. When reaching the maximum count the invalid objects will be discarded. + - Role - Papel + %1, %2 Export the input model to a sql script file. + - Id - + %1, %2 Export the input model to a png image. + - Disable SQL code - Desabilitar código SQL + %1, %2 Export the input model to a svg file. + - Grant - Conceder + %1, %2 Export the input model directly to a PostgreSQL server. + - Revoke - Revogar + %1, %2 Import a database to an output file. + - Cascade - Cascata + %1, %2 Compares a model and a database or two databases generating the SQL script to synch the latter in relation to the first. + - Leave the <em><strong>Roles</strong></em> empty to create a permission applicable to <strong><em>PUBLIC</em></strong>. - Deixe os <em><strong>Papéis</strong></em> em branco para criar uma permissão aplicável a <strong><em>PUBLIC</em></strong>. + %1, %2 Force the PostgreSQL version of generated SQL code. + - Edit permissions - Editar permissões + %1, %2 Silent execution. Only critical messages and errors are shown during process. + - &Grant + %1, %2 Show this help menu. - Re&voke + Connection options: - Code Preview - Previsão de Código + %1, %2 List available connections in file %3. + - -- No permissions defined for the specified object! + %1, %2 [ALIAS] Connection configuration alias to be used. - /* Could not generate the SQL code preview for permissions! + %1, %2 [HOST] PostgreSQL host in which a task will operate. - - - PgModelerCLI - Unrecognized option '%1'. - Opção '%1' não reconehcida. + %1, %2 [PORT] PostgreSQL host listening port. + - Value not specified for option '%1'. - Valor não specificado para a opção '%1'. + %1, %2 [USER] PostgreSQL username. + - Option '%1' does not accept values. - Opção '%1' não aceita valores. + %1, %2 [PASSWORD] PostgreSQL user password. + - Connection aliased as '%1' was not found on configuration file. - Conexão apelidada de '%1' não foi encontrada no arquivo de configuração. + %1, %2 [DBNAME] Connection's initial database. + - Usage: pgmodeler-cli [OPTIONS] - Uso: pgmodeler-cli [OPÇÕES] + %1, %2 Draws the grid in the exported image. + - command line interface. - interface da linha de comando. + %1, %2 Draws the page delimiters in the exported image. + - PostgreSQL Database Modeler Project - pgmodeler.com.br - Projeto Modelador de Banco de Dados PostgreSQL - pgmodeler.com.br + %1, %2 Each page will be exported in a separated png image. (Only for PNG images) + - This tool provides a way to export pgModeler's database models without -the need to load them on graphical interface. All available exporting -modes are described below. - Esta ferramenta provê um modo de exportar modelos de banco de dados do pgModeler sem -a necessidade de carregá-los na interface gráfica. Todos os modos de exportações -disponíveis estão descritos abaixo. + %1, %2 [FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG images) + - Options: - Opções: + %1, %2 Ignores errors related to duplicated objects that eventually exist in the server. + - %1, %2=[FILE] Input model file (.dbm). - %1, %2=[ARQUIVO] Arquivo de entrada do modelo (.dbm). + %1, %2 [CODES] Ignores additional errors by their codes. A comma-separated list of alphanumeric codes should be provided. + - %1, %2=[FILE] Output file. Available only on export to file or png. - %1, %2=[ARQUIVO] Arquivo de saída. Disponível apenas ao exportar para arquivo ou png. + %1, %2 Drop the database before execute a export process. + - %1, %2 Export to a sql script file. - %1, %2 Exportar para um arquivo de script sql. + %1, %2 Runs the DROP commands attached to SQL-enabled objects. + - %1, %2 Export to a png image. - %1, %2 Exportar para uma imagem png. + %1, %2 Simulates an export process by executing all steps but undoing any modification in the end. + - %1, %2 Export directly to a PostgreSQL server. - %1, %2 Exportar diretamente para um servidor PostgreSQL. + %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + - %1, %2 Version of generated SQL code. Only for file or dbms export. - %1, %2 Versão de código SQL gerado. Exportação apenas para arquivo ou SGDB. + Database import options: + - %1, %2 Silent execution. Only critical errors are shown during process. - %1, %2 Execução silenciosa. Apenas erros críticos são mostrados durante o processo. + %1, %2 Ignore all errors and try to create as many as possible objects. + - %1, %2 Show this help menu. - %1, %2 Mostrar este menu de ajuda. + %1, %2 Import system built-in objects. This option causes the model bloating due to the importing of unneeded objects. + - PNG export options: - Opções de exportação PNG: + %1, %2 Import extension objects. This option causes the model bloating due to the importing of unneeded objects. + - %1, %2 Draws the grid on the exported png image. - %1, %2 Desenha a grade na imagem png exportada. + %1, %2 Run import in debug mode printing all queries executed in the server. + - %1, %2 Draws the page delimiters on the exported png image. - %1, %2 Desenha os delimitadores de página na imagem png exportada. + Diff options: + - DBMS export options: - Opções da exportação SGBD: + %1, %2 [DBNAME] The database used in the comparison. All the SQL code generated is applied to it. + - %1, %2 Ignores errors related to duplicated objects that eventually exists on server side. - %1, %2 Ignora erros relacionados a objetos duplicados que eventualmente existam no lado servidor. + %1, %2 Save the generated diff code to output file. + - %1, %2=[ALIAS] Connection configuration alias to be used. - %1, %2=[APELIDO] Apelido da configuração da conexão a ser usada. + %1, %2 Apply the generated diff code on the database server. + - %1, %2=[HOST] PostgreSQL host which export will operate. - %1, %2=[SERVIDOR] Servidor PostgreSQL no qual a exportação irá operar. + %1, %2 Don't preview the generated diff code when applying it to the server. + - %1, %2=[PORT] PostgreSQL host listening port. - %1, %2=[PORTA] Porta de escuta do servidor PostgreSQL. + %1, %2 Drop cluster level objects like roles and tablespaces. + - %1, %2=[USER] PosrgreSQL username. - %1, %2=[USUARIO] Nome de usuário PostgreSQL. + %1, %2 Revoke permissions already set on the database. New permissions configured in the input model are still applied. + - %1, %2=[PASSWORD] PosrgreSQL user password. - %1, %2=[SENHA] Senha de usuário PosrgreSQL. + %1, %2 Drop missing objects. Generates DROP commands for objects that are present in the input model but not in the compared database. + - %1, %2=[DBNAME] Connection's initial database. - %1, %2=[NOMEBD] Banco de dados inicial da conexão. + %1, %2 Force the drop of missing columns and constraints. Causes only columns and constraints to be dropped, other missing objects aren't removed. + - No export mode specified! - Modo de exportação não especificado! + %1, %2 Rename the destination database when the names of the involved databases are different. + - Multiple export mode especified! - Modo de exportação múltiplo especificado! + %1, %2 Don't drop or truncate objects in cascade mode. + - No input file specified! - Arquivo de entrada não especificado! + %1, %2 Truncate tables prior to alter columns. Avoids errors related to type casting when the new type of a column isn't compatible to the old one. + - No output file specified! - Arquivo de saída não especificado! + %1, %2 Don't reuse sequences on serial columns. Drop the old sequence assigned to a serial column and creates a new one. + - Input file must be different from output! - Arquivo de entrada deve ser diferente do de saída! + %1, %2 Don't force the recreation of objects. Avoids the usage of a DROP and CREATE commands to create a new version of the objects. + - Incomplete connection information! - Informação de conexão incompleta! + %1, %2 Don't recreate the unmodifiable objects. These objects are the ones which can't be changed via ALTER command. + - Starting model export... - Iniciando exportação de modelo... + %1, %2 [ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + - Loading input file: - Carregando arquivo de entrada: + ** The diff process allows the usage of the following options related to import and export operations: + - Export to PNG image: - Exportar para imagem PNG: + * Export: + - Export to SQL script file: - Exportar para arquivo de script SQL: + * Import: + - Export to DBMS: - Exportar para SGBD: + ** When running the diff using two databases (%1 and %2) there's the need to specify two connections/aliases. + - Export successfully ended! - Exportação finalizada com sucesso! + If only one connection is set it will be used to import the input database as well to retrieve database used in the comparison. + - Copyright 2006-2015 Raphael A. Silva <raphael@pgmodeler.com.br> + A second connection can be specified by appending a 1 on any connection configuration parameter listed above. - This CLI tool provides the operations to export pgModeler's database models without - the need to load them on graphical interface as well to fix model files to the most recent - accepted structure. All available options are described below. + Available connections (alias : connection string) - General options: + No operation mode was specified! - %1, %2=[FILE] Input model file (.dbm). Mandatory use when fixing a model or exporting it. + Export, fix model, import database, diff and update mime operations can't be used at the same time! - %1, %2=[FILE] Output file. Mandatory use when fixing model or export to file or png. + Multiple export mode was specified! - %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + No input file was specified! - %1, %2 Model fix tries. When reaching the maximum count the invalid objects will be discard. + No input database was specified! - %1, %2 Export to a svg file. + No output file was specified! - %1, %2 List available connections on %3 file. + No input file or database was specified! - PNG and SVG export options: + The input file and database can't be used at the same time! - %1, %2 Each page will be exported on a separated png image. (Only for PNG) + No database to be compared was specified! - %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG) + No diff action (save or apply) was specified! - %1, %2 Drop the database before execute a export process. + No output file for the diff code was specified! - %1, %2 Runs the DROP commands attached to SQL-enabled objects. + ** Error code `%1' found and ignored. Proceeding with export. - %1, %2 Simulates a export process. Actually executes all steps but undoing any modification. + ** Command: %1 - %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + Loading input file: %1 - %1, %2=[USER] PostgreSQL username. + Fixed model file: %1 - %1, %2=[PASSWORD] PostgreSQL user password. + Export to PNG image: %1 - Miscellaneous options: + Export to SVG file: %1 - %1, %2=[ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + Export to SQL script file: %1 - There are no connections configured. + Export to DBMS: %1 - Available connections (alias : conn. string) + Export successfully ended! + - Export, fix model and update mime operations can't be used at the same time! + Starting database import... - Multiple export mode specified! + Input database: %1 - Invalid zoom specified! + Saving the imported database to file... - Invalid action specified to update mime option! + Import successfully ended! + - Starting model fixing... + Starting diff process... - Starting mime update... + Input model: %1 - Fixed model file: + Compare to: %1 - Model successfully fixed! + Loading input model... - Mime database successfully updated. + Importing the database `%1'... - Export to SVG file: + Comparing the generated models... - Extracting objects' XML... + No differences were detected. - Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! + Saving diff to file `%1' - Recreating objects... + ** WARNING: You are about to apply the generated diff code to the server. Data can be lost in the process! - -** Object(s) that couldn't fixed: + ** Proceed with the diff applying? (yes/no) > - WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) + yes - Database model files (.dbm) are already associated to pgModeler! + no - There is no file association related to pgModeler and .dbm files! + Diff code not applied to the server. - Mime database operation: %1 + Applying diff to the database `%1'... - Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. + Diff successfully ended! + - Running update-mime-database command... + Mime database successfully updated! + @@ -12245,10 +8953,6 @@ disponíveis estão descritos abaixo. Loaded plug-ins Plugins carregados - - <html><head/><body><p>Details about plugins development and installation can be found at <a href="http://www.pgmodeler.com.br/wiki/doku.php?id=plugins"><span style=" text-decoration: underline; color:#0057ae;">pgModeler Wiki</span></a>. <span style=" font-weight:600;">Note:</span> plugin installation requires pgModeler to be restarted.</p></body></html> - <html><head/><body><p>Detalhes sobre o desenvolvimento e instalação de plugins podem ser encontrados em <a href="http://www.pgmodeler.com.br/wiki/doku.php?id=plugins"><span style=" text-decoration: underline; color:#0057ae;">Wiki pgModeler</span></a>. <span style=" font-weight:600;">Nota:</span> a instalação de plugins requer que o pgModeler seja reiniciado.</p></body></html> - Plugin @@ -12263,190 +8967,53 @@ disponíveis estão descritos abaixo. - ProgressoTarefa - - Executing tasks - Executando tarefas - - - - QObject - - new_database - novo_banco_de_dados - - - %1 (line: %2) - %1 (linha: %2) - - - - QuickRenameWidget - - Form - Formulário - - - to: - para: - - - Rename - Renomear - - - Cancel - Cancelar - - - - RegraWidget - - Event: - Evento: - - - Execution Type: - Tipo Execução: - - - Conditional Expr.: - Expr. Condicional: - - - Executed Commands - Comandos Executados - - - SQL Command: - Comando SQL: - - - To create a rule that does not perform any action (<strong>DO NOTHING</strong>) simply do not specify commands in the SQL commands table. - Para se criar uma regra que não execute ação alguma (<strong>DO NOTHING</strong>) basta não especificar comandos na tabela de comandos SQL. - - - SQL command - Comando SQL - - - - RelacionamentoWidget - - General - Geral - - - Relationship: - Relacionamento: - - - One to one relationship - Relacionamento de um para um - - - One to many relationship - Relacionamento de um para muitos - - - Many to many relationship - Relacionamento de muitos para muitos - - - Generalization relationship (inheritance) - Relacionamento de generalização (herança) - - - Dependency relationship - Relacionamento de dependência entre tabelas ou entre uma tabela e visão - - - Identifier - Identificador - - - Source Table: - Tabela Origem: - - - Target Table: - Tabela Destino: - - - Cardinality: - Cardinalidade: - - - Source Required - Origem Obrigatória - - - Target Required - Destino Obrigatória - - - Name of the table generated from many to many relationship - Nome da tabela gerada pelo relacionamento muitos para muitos - + PolicyWidget - Table Name: - Nome Tab. N-N: - - - Foreign key - Chave-estrangeira - - - Deferrable: - Postergável: - - - Deferral: - Postergação: - - - Attributes - Atributos + Basics + - Constraints - Restrições + Command: + - Primary key - Chave-primária + Permissive + - Attribute - Atributo + Roles + Papéis - Type - Tipo + Expressions + - Constraint - Restrição + USING: + - Editing attributes of an existing relationship is allowed, but must be done carefully because it may break references to columns and cause invalidation of objects such as triggers, indexes, constraints and sequences. - A edição de atributos de um relacionamento já existente é permitida, porém, deve ser feita com atenção pois pode quebrar referências à colunas e causar a invalidez de objetos como gatilhos, índices, restrições e sequências. + CHECK: + - Use the special primary key if you want to include a primary key containing inherited / copied columns to the receiving table. This is a feature available only for generalization / dependency relationships. - Utilize o recurso de chave-primária especial caso queira incluir uma chave-primária contendo as colunas heradas/copiadas na tabela receptora. Este é um recurso disponível apenas para relacionamentos de generalização/dependência. + Name + Nome - Automatic Suffix - Sufixo Automático + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + + + + QObject - Source Suffix: - Sufixo Origem: + new_database + novo_banco_de_dados - Target Suffix: - Sufixo Destino: + %1 (line: %2) + %1 (linha: %2) @@ -12482,18 +9049,10 @@ disponíveis estão descritos abaixo. Connection Mode - - This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. - - Connect FK to PK columns - - This mode is the classical one. It connects the relationship to tables through their central points. - - Connect tables' center points @@ -12606,21 +9165,37 @@ disponíveis estão descritos abaixo. Default Padrão + + This mode renders the relationships in crow's foot notation which has a better semantics and readability. It also determines the optimal point where the relationship is connected on the tables' edges taking their position into account. + + + + Crow's foot notation + + + + This mode determines the optimal point where the relationship is connected on the tables' edges taking their position into account. It implies the usage of the classical ER notation. + + + + Connect tables' edges + + + + This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. It implies the usage of the classical ER notation. + + + + This mode is the classical one. It connects the relationship to tables through their central points. It implies the usage of the classical ER notation. + + RelationshipWidget - - Form - Formulário - General Geral - - Relationship: - Relacionamento: - One to one relationship Relacionamento de um para um @@ -12689,22 +9264,6 @@ disponíveis estão descritos abaixo. Name of the table generated from many to many relationship Nome da tabela gerada pelo relacionamento muitos para muitos - - Table Name: - Nome Tab.: - - - Source Suffix: - Sufixo Origem: - - - Target Suffix: - Sufixo Destino: - - - Foreign key - Chave estrangeira - Deferrable: Postergável: @@ -12713,10 +9272,6 @@ disponíveis estão descritos abaixo. Deferral: Postergação: - - Automatic Suffix - Sufixo Automático - Attributes Atributos @@ -12749,14 +9304,6 @@ disponíveis estão descritos abaixo. Name Nome - - Editing attributes of an existing relationship is allowed, but must be done carefully because it may break references to columns and cause invalidation of objects such as triggers, indexes, constraints and sequences. - A edição de atributos de um relacionamento já existente é permitida, porém deve ser feita cuidadosamente, pois pode quebrar referências à colunas e causar a invalidação de objetos como gatilhos, índices, restrições e sequências. - - - Use the special primary key if you want to include a primary key containing inherited / copied columns to the receiving table. This is a feature available only for generalization / copy relationships. - Use a chave primária especial se você quer incluir uma chave primária contendo colunas herdadas / copiadas para a tabela receptora. Esta é uma característica disponível apenas para relacionamentos de generalização / cópia. - This advanced tab shows the objects (columns or table) auto created by the relationship's connection as well the foreign keys that represents the link between the participant tables. Esta aba avançada mostra os objetos (colunas ou tabela) auto criados pela conexão do relacionamento, bem como as chaves estrangeiras que representam a ligação entre as tabelas participantes. @@ -12809,22 +9356,6 @@ disponíveis estão descritos abaixo. STORAGE - - Reference Suffix: - Sufixo de Referência: - - - Table 1 - Tabela 1 - - - Suffix: - Sufixo: - - - Table 2 - Tabela 2 - Name Patterns @@ -12991,74 +9522,18 @@ disponíveis estão descritos abaixo. - RestricaoWidget - - Constraint Type: - Tipo de Restrição: - - - Check Expr.: - Expr.Checagem: - - - Fill Factor: - Fator Preenc.: - - - Comparison: - Comparação: - - - Deferrable: - Postergável: - - - Deferral: - Postergação: - - - Columns - Colunas - - - Column: - Coluna: - - - Referenced Columns - Colunas Referenciadas - - - Table: - Tabela: - - - Column - Coluna - + ResultSetModel - Type - Tipo - - - Columns which were included by relationship can not be added / removed manually from the primary key. If done such changes they will be ignored. To create primary key using columns included by relationship use the feature attributes, constraints and primary key on the relationship form. - Colunas as quais foram incluídas por relacionamento não podem ser adicionadas/removidas manualmente das chaves-primárias. Caso isso ocorra tais alterações serão ignoradas. Para criar chaves-primárias usando colunas incluídas por relacionamentos utilize o recurso de atributos, restrições e chave-primária no formulário de edição relacionamentos. + [binary data] + RoleWidget - - Form - Formulário - Password: Senha: - - Validity: - Validade: - Connections: Conexões: @@ -13071,26 +9546,6 @@ disponíveis estão descritos abaixo. Superuser Superusuário - - Inherit Permissions - Herdar Permissões - - - Create Database - Criar Banco de Dados - - - Can Login - Pode Logar - - - Create Users/Groups - Criar Usuários/Grupos - - - Encrypted Password - Senha Criptografada - Members Membros @@ -13112,40 +9567,44 @@ disponíveis estão descritos abaixo. Validade - Can create Database - Pode criar Banco de Dados + Encrypted + Encriptado - Can create Role - Pode criar Papel + yyyy-MMM-dd hh:mm:ss + - Can use Replication - Pode usar Replicação + Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. + - Encrypted - Encriptado + Inherit permissions + - Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. - Atribuindo <strong><em>-1</em></strong> à <strong><em>Conexões</em></strong> cria um papel sem limite de conexão.<br/> Desmarcando <strong><em>Validade</em></strong> cria um papel que nunca expira. + Can create database + - yyyy-MMM-dd hh:mm:ss + Bypass RLS - Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. + Can use replication + + + + Can login + + + + Can create role RuleWidget - - Form - Formulário - Event: Evento: @@ -13158,10 +9617,6 @@ disponíveis estão descritos abaixo. Conditional Expr.: Expr. Condicional: - - Executed Commands - Comandos Executados - SQL Command: Comando SQL: @@ -13185,30 +9640,14 @@ disponíveis estão descritos abaixo. Form Formulário - - Load SQL script - - - - &Load - - Save SQL commands - - &Save - - Search in SQL code - - &Find - - Alt+F @@ -13293,10 +9732,6 @@ disponíveis estão descritos abaixo. Results (%1) - - [%1]: SQL command successfully executed. <em>%2 <strong>%3</strong></em> - - Rows affected @@ -13329,6 +9764,90 @@ disponíveis estão descritos abaixo. Clear history + + Close the current SQL script + + + + SQL script currently handled + + + + (not saved) + + + + Handle external SQL script + + + + &Script + + + + Fi&nd + + + + Alt+T + + + + Alt+X + + + + Current working database + + + + Load + Carregar + + + Save + Salvar + + + Save as + Salvar como + + + [%1]: SQL command successfully executed in <em><strong>%2</strong></em>. <em>%3 <strong>%4</strong></em> + + + + Plain format + + + + CVS format + + + + This action will wipe out all the SQL commands history for all connections! Do you really want to proceed? + + + + Save history + + + + Reload history + + + + Find in history + + + + Hide find tool + + + + This action will wipe out all the SQL commands history for the current connection! Do you really want to proceed? + + SQLToolWidget @@ -13384,51 +9903,59 @@ disponíveis estão descritos abaixo. <strong>ATTENTION:</strong> Disconnect from all databases will close any opened tab in this view! Do you really want to proceed? + + + SceneInfoWidget - <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? + Form + Formulário + + + Current position of the mouse in the canvas - You're running a demonstration version! The data manipulation feature is available only in the full version! + - - - - SchemaWidget - Form - Formulário + Current zoom factor + - Show rectangle - Mostrar retângulo + Currently selected object(s) + - Fill color: - Cor de preenchimento: + Dimensions of the selected object(s) + + + + No selection + + + + N/A + - Select fill color - Seleciona cor de preenchimento + Sel. objects: %1 + - SeletorObjetoWidget + SchemaWidget - Clear field - Limpar campo + Show rectangle + Mostrar retângulo - Select Object - Selecionar Objeto + Fill color: + Cor de preenchimento: SequenceWidget - - Form - Formulário - Cyclic: Cíclica: @@ -13453,44 +9980,17 @@ disponíveis estão descritos abaixo. Cache: Cache: - - Owner: - Proprietário: - Owner Col.: - - - SequenciaWidget - - Cyclic: - Cíclica: - - - Start: - Início: - - Maximum: - Máximo: - - - Minimum: - Mínimo: - - - Increment: - Incremento: - - - Cache: - Cache: + Defualt values: + - Owner: - Possuidora: + User defined + @@ -13624,10 +10124,6 @@ disponíveis estão descritos abaixo. SourceCodeWidget - - Form - Formulário - Version: Versão: @@ -13648,10 +10144,6 @@ disponíveis estão descritos abaixo. XML - - Type: - Tipo: - Source code visualization Visualização de código fonte @@ -13743,10 +10235,6 @@ disponíveis estão descritos abaixo. Before: - - It's recommended to use this feature only when the SQL validation fails in cases when a object is being referenced in portions where the ordinary validation couldn't reach, e.g., inside of a rule command or check constraint expression. - - Swap the values of the fields @@ -13755,135 +10243,41 @@ disponíveis estão descritos abaixo. Swap values - - - TabelaObjetosWidget - - Add Item - Adicionar Item - - - Remove Item - Remover Item - - - Update Item - Atualizar Item - - - Remove All - Excluir Todos - - - Edit Item - Editar Item - - - Move Up - Mover para cima - - - Move Down - Mover para baixo - - - Move to start - Mover para o início - - - Move to end - Mover para o fim - - - Do you really want to remove the selected item? - Tem certeza de que deseja remover o item selecionado? - - - Do you really want to remove the all items? - Tem certeza de que deseja remover todos os itens? - - - Confirmação - Confirmation - - - - TabelaWidget - - Columns - Colunas - - Constraints - Restrições - - - Triggers - Gatilhos - - - Rules - Rules + Change the objects creation order is an irreversible operation and cause the operations history to be automatically erased. Note that the creation order configured in this form is not definitive and may change after a model validation. + - Indexes - Índices + Swap the object ids changing their creation order + - Tables - Tabelas + Swap ids + - Ancestor Tables: - Tabelas Ancestrais: + Filter: + - Copied Tables: - Tabelas Copiadas: + ID + - Name - Nome + Object + Objeto Type - Tipo - - - Default Value - Valor Padrão - - - Refer. Table - Tab. Refer. - - - Events - Eventos - - - Execution - Execução - - - Event - Evento - - - Indexing - Indexação - - - With OIDs: - Com OIDs: + Tipo - Attribute - Atributo + Parent Object + Objeto Pai - Firing - Disparo + Parent Type + Tipo Pai @@ -13907,18 +10301,10 @@ disponíveis estão descritos abaixo. Add empty rows - - Add - Adicionar - Ins - - Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely igored when generating the <strong>INSERT</strong> commands. - - Add an empty column @@ -13927,10 +10313,6 @@ disponíveis estão descritos abaixo. Remove all rows from the grid preserving columns - - Clear - - Shift+Del @@ -13939,26 +10321,14 @@ disponíveis estão descritos abaixo. Delete the selected rows - - Delete - - Del - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> - - Duplicate the selected rows - - Duplicate - - Ctrl+D @@ -13996,67 +10366,88 @@ disponíveis estão descritos abaixo. - (no columns) + Copy items on the grid - - - TableObjectView - -Relationship: %1 + Copy + Copiar + + + Add row - - - TableView - Connected rels: %1 + Delete column - - - TableWidget - Form - Formulário + Paste items on the grid + - With OIDs: - Com OIDs: + Paste + Colar - Columns - Colunas + Ctrl+V + - Constraints - Restrições + Fills the grid using a CSV file + - Triggers - Gatilhos + <html><head/><body><p>Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely ignored when generating the <span style=" font-weight:600;">INSERT</span> commands.</p></body></html> + - Rules - Regras + Add column + - Indexes - Índices + Duplicate rows + - Tables - Tabelas + Change the values of all selected cells at once + + + + Bulk data edit + + + + Ctrl+E + + + + Delete all columns + + + + Delete rows + - Ancestor Tables: - Tabelas Ancestrais: + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + + + + Delete all rows + + + + TableObjectView - Copied Tables: - Tabelas Copiadas: + +Relationship: %1 + + + + TableWidget Name Nome @@ -14069,10 +10460,6 @@ Relationship: %1 Default Value Valor Padrão - - Attribute - Atributo - ON DELETE @@ -14110,64 +10497,120 @@ Relationship: %1 Esquema - Parent - Pai + Parent + Pai + + + Copy + Copiar + + + Options + + + + Tag: + + + + With OID + + + + Generate ALTER for columns/constraints + + + + Unlogged + + + + &Columns + + + + Co&nstraints + + + + Tri&ggers + + + + &Rules + + + + &Indexes + + + + &Tables + - Copy - Copiar + Edit data + - Options + Define initial data for the table - Tag: + Enable row level security - With OID + Force RLS for owner - Generate ALTER for columns/constraints + &Policies - Unlogged + PK - &Columns + Attribute(s) - Co&nstraints + It is not possible to mark a column as primary key when the table already has a primary key which was created by a relationship! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. - Tri&ggers + It is not possible to mark a column created by a relationship as primary key! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. - &Rules + Command - &Indexes + Permissive - &Tables + USING expression - Edit data + CHECK expression - Define initial data for the table - + Roles + Papéis + + + Yes + Sim + + + No + Não @@ -14221,10 +10664,6 @@ Relationship: %1 TextboxWidget - - Form - Formulário - Bold Negrito @@ -14258,142 +10697,8 @@ Relationship: %1 - - TipoPgSQLWidget - - Data Type - Tipo de Dado - - - Type: - Tipo: - - - Length - Comprimento - - - Precision - Precisão - - - Dimension - Dimensão - - - Interval: - Intervalo: - - - Format: - Formato: - - - Spatial: - Espacial: - - - Variation: - Variação: - - - - TipoWidget - - Configuration: - Configuração: - - - Base Type - Tipo Base - - - Enumeration - Enumeração - - - Composite - Composto - - - Enumerations - Enumerações - - - Enumeration: - Enumeração: - - - Attributes - Atributos - - - Internal Length: - Comp. Interno: - - - Storage: - Armazenamento: - - - By Value: - Por Valor: - - - Category: - Categoria: - - - Preferred: - Preferido: - - - Delimiter: - Delimitador: - - - Alignment: - Alinhamento: - - - Default Value: - Valor Padrão: - - - Functions - Funções - - - Copy Type - Tipo Cópia - - - Element Type - Tipo Elemento - - - Name - Nome - - - Type - Tipo - - - The functions to be assigned to a type should be written in C language and possess, respectively, the following signatures:<br/> <table> <tr> <td><strong>INPUT:</strong> <em>any function(cstring, oid, integer)</em></td> <td><strong>OUTPUT:</strong> <em>cstring function(any)</em></td> </tr> <tr> <td><strong>SEND:</strong> <em>byta function(any)</em></td> <td><strong>RECV:</strong> <em>any function(internal, oid, integer)</em></td> </tr> <tr> <td><strong>TPMOD_IN:</strong> <em>integer function(cstring[])</em></td> <td><strong>TPMOD_OUT:</strong> <em>cstring function(integer)</em></td> </tr> <tr> <td><strong>ANALYZE:</strong> <em>boolean function(internal)</em></td> <tr> </table> - As funções a serem atribuídas ao tipo devem ser todas escritas em linguagem C e possuirem, respectivamente, as seguintes assinaturas:<br/> <table> <tr> <td><strong>INPUT:</strong> <em>any funcao(cstring, oid, integer)</em></td> <td><strong>OUTPUT:</strong> <em>cstring funcao(any)</em></td> </tr> <tr> <td><strong>SEND:</strong> <em>byta funcao(any)</em></td> <td><strong>RECV:</strong> <em>any funcao(internal, oid, integer)</em></td> </tr> <tr> <td><strong>TPMOD_IN:</strong> <em>integer funcao(cstring[])</em></td> <td><strong>TPMOD_OUT:</strong> <em>cstring funcao(integer)</em></td> </tr> <tr> <td><strong>ANALYZE:</strong> <em>boolean funcao(internal)</em></td> <tr> </table> - - TriggerWidget - - Form - Formulário - - - Execute per row - Executar por linha - Event: Evento: @@ -14418,18 +10723,6 @@ Relationship: %1 Deferrable: Postergável: - - Deferral: - Postergação: - - - Referenced Table: - Tab. Referenciada: - - - Conditional Expr.: - Expr. Condicional: - Columns Colunas @@ -14450,10 +10743,6 @@ Relationship: %1 Function: Função: - - Constraint Trigger: - Gatilho Restrição: - Column Coluna @@ -14489,10 +10778,6 @@ Relationship: %1 TypeWidget - - Form - Formulário - Configuration: Configuração: @@ -14505,10 +10790,6 @@ Relationship: %1 Enumeration Enumeração - - Composite - Composto - Enumerations Enumerações @@ -14529,18 +10810,10 @@ Relationship: %1 Storage: Armazenamento: - - By Value: - Por Valor: - Category: Categoria: - - Preferred: - Preferido: - Delimiter: Delimitador: @@ -14732,22 +11005,10 @@ Relationship: %1 Get source code - - Recover a package - - - - Purchase a new package - - Failed to check updates - - The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <strong>%1</strong>. - - No updates found @@ -14760,21 +11021,17 @@ Relationship: %1 The update notifier failed to check for new versions! A HTTP status code was returned: <strong>%1</strong> + + The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <em>%1</em> - <strong>%2</strong>. + + ViewWidget - - Form - Formulário - References Referências - - Type: - Tipo: - Column Coluna @@ -14787,18 +11044,6 @@ Relationship: %1 Used in: Usado em: - - SELECT-FROM - - - - FROM-WHERE - - - - After WHERE - Após WHERE - Table: Tabela: @@ -14839,15 +11084,6 @@ Relationship: %1 Alias Col. Apelido Col. - - To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[tablel].*</strong></em> - Versão em inglês com erro! (tablel) - Para referenciar todas as colunas de uma tabela (*) basta não preencher o campo <strong>Coluna</strong>, isso é equivalente a escrever <em><strong>[esquema].[tabela].*</strong></em> - - - -- Could not generate the code. Make sure all attributes are correctly filled! -- - -- Impossível gerar código. Verifique se todos os atributos foram preenchidos corretamente! -- - Reference Type: Tipo Referência: @@ -14868,10 +11104,6 @@ Relationship: %1 Table Expression Expressão de Tabela - - Flags: SF FW AW VD - Sinalizadores: SF FW AW VD - Name Nome @@ -14928,130 +11160,57 @@ Relationship: %1 With no data - - - VisaoGeralWidget - - Model overview - Visão geral do modelo - - - - VisaoObjetosWidget - - Objects of Model - Objetos do Modelo - - - Visible Objects Type - Tipos de Objetos Visíveis - - Select All - Marcar Todos - - - Clear All - Desmarcar Todos - - - Select - Selecionar - - - Cancel - Cancelar - - - Objects view configuration - Configuração da visão de objetos - - - Tree view - Visão em árvore - - - List view - Visão em lista - - - Object - Objeto - - - Type - Tipo - - - Parent Object - Objeto Pai - - - Parent Type - Tipo Pai - - - - VisaoWidget - - References - Referências - - - Type: - Tipo: - - - Column - Coluna + The element will be used as part of the SELECT statement to retrieve columns or expressions that will compose the view's columns + - Expression - Expressão + SELECT ... + - Used in: - Usado em: + The element will be used as part of the WHERE clause in form of conditional expression + - After WHERE - Após WHERE + WHERE ... + - Table: - Tabela: + The element is used in the FROM portion of the command in order to reference tables or construct JOIN statements + - Table Alias: - Alias Tabela: + FROM ... + - Column: - Coluna: + The element's expression is used exclusively as the view's definition + - Column Alias: - Alias Coluna: + The element will be appended to the very end of the view's definition. This is useful when using GROUP BY/HAVING statements + - Expression: - Expressão: + End expression + - Expression Alias: - Alias Expressão: + Indexes + Índices - Code Preview - Previsão de Código + Flags: SF FW AW EX VD + - To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[tablel].*</strong></em> - Para se referenciar todas as colunas de uma tabela (*) basta não preencher o campo <strong>Coluna</strong>, isso é equivalente a se escrever <em><strong>[esquema].[tabela].*</strong></em> + To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[table].*</strong></em> + - -- Could not generate the code. Make sure all attributes are correctly filled! -- - -- Impossível gerar código. Verifique se todos os atributos foram preenchidos corretamente! -- + Indexing + Indexação diff --git a/lang/zh_CN.qm b/lang/zh_CN.qm index 45596b5ae3..aad7da52c4 100644 Binary files a/lang/zh_CN.qm and b/lang/zh_CN.qm differ diff --git a/lang/zh_CN.ts b/lang/zh_CN.ts index deba0c9869..c5c9a72669 100644 --- a/lang/zh_CN.ts +++ b/lang/zh_CN.ts @@ -1,61 +1,6 @@ - - AboutForm - - Version %1 - 版本 %1 - - - Close - 关闭 - - - PostgreSQL Database Modeler - PostgreSQL 数据库建模工具 - - - 0.0.0.0 - 0.0.0.0 - - - <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" font-size:11pt; font-style:italic; text-decoration: underline; color:#0057ae;">http://pgmodeler.com.br</span></a></p></body></html> - <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" font-size:11pt; font-style:italic; text-decoration: underline; color:#0057ae;">http://pgmodeler.com.br</span></a></p></body></html> - - - Copyright 2006-2012 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -The pgModeler project is a CASE tool for modeling relational databases for PostgreSQL DBMS through the use of modeling techniques from entity-relationship diagrams as well merging concepts that PostgreSQL implements. - -Special thanks to friends of the software development team of the Legislative Assembly, Tocantins, Brazil: Michel de Almeida, Felipe Santana, Jonas Nepomuceno, Ricardo Ishibashi and Álvaro Nunes. - 版权所有 2006-2012 - Raphael Araújo e Silva <rkhaotix@gmail.com> - -pgModeler 项目是通过使用实体-关系图并结合 PostgreSQL 实现的相关理论概念,对 PostgreSQL DBMS 关系型数据库进行建模的 CASE 工具。 - -特别感谢巴西托坎廷斯立法大会软件开发团队的朋友们:Michel de Almeida,Felipe Santana,Jonas Nepomuceno,Ricardo Ishibashi 和 Álvaro Nunes。 - - - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 3. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -The complete text of GPLv3 is at LICENSE file on source code root directory. Also, you can get the complete GNU General Public License at <http://www.gnu.org/licenses/> - 本软件是自由软件。你可以遵照自由软件基金会发布的 GNU 通用公共授权协议第三版本 (GPLv3) 所有条文来修改和重新发布这一程序。 - -发布这一程序的目的是希望它有用,但没有任何担保;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权。 - -GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 GNU 通用公共授权协议请见<http://www.gnu.org/licenses/> - - - About pgModeler - 关于 pgModeler - - - Design, configure, deploy - 设计, 配置, 部署 - - AboutWidget @@ -70,22 +15,10 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. - - Design, configure, deploy - 设计, 配置, 部署 - - - <a href="http://pgmodeler.com.br">http://pgmodeler.com.br</a> - - pgModeler is proudly a brazilian software! - - <html><head/><body><p>Copyright 2006-2016 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>&gt;</p></body></html> - - Hide this widget @@ -94,18 +27,6 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G ... - - 0.0.0.0 - 0.0.0.0 - - - (CODE_NAME) - - - - Build: - - (BUILD_NUM) @@ -115,139 +36,19 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G - Contributors - - - - <html><head/><body><p>This page is dedicated to all contributors who gave a bit of their time in make pgModeler a better software somehow. The complete list of people that helped pgModeler can be found at <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>If you have a great idea to improve pgModeler please submit it <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">here</span></a>. No ideas for now but want to help? Why not donate a few bucks <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">here</span></a>!?</p></body></html> - - - - 1 - 1 - - - 2 - 2 - - - 3 - 3 - - - 4 - 4 - - - 5 - 5 - - - 6 - 6 - - - 7 - 7 - - - 8 - 8 - - - Name - 名称 - - - Country - - - - Contribution - - - - Damien Degois - - - - France - - - - French UI translation and several improvements in auxiliary scripts. - - - - Ji Bin - - - - China - - - - Chinese UI translation and small fixes. - - - - Pierre-Samuel LE STANG - - - - French UI translation. - - - - Lisandro Damián Nicanor - - - - Argentina - - - - Improvements on build scripts enabling the custom packaging in Linux distros; Per-user settings; pgModeler's package maintainer in Debian Linux. - - - - Pavel Alexeev - - - - Russia - - - - Additional work for packaging in Linux distros; pgModeler's package maintainer in Fedora Linux. - - - - Mariusz Fik - - - - Poland - - - - Custom packaging first ideas. Tester of first version of custom packaging patch. - - - - Jonathan DUPRE - + 0.0.0 + 0.0.0 - Gilberto Castillo + build: - Cuba + <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" text-decoration: underline; color:#2980b9;">https://pgmodeler.io</span></a></p></body></html> - Spanish UI translation. + <html><head/><body><p>Copyright 2006-2018 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.io</span></a>&gt;</p></body></html> @@ -257,18 +58,10 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Final Function: 最终处理函数: - - Transition Function: - 状态转换函数: - Sort Operator: 排序操作符: - - Final Condition: - 最终条件: - Funtion Inputs 函数输入 @@ -289,10 +82,6 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G An aggregate function that accepts the types <em><strong>typeA</strong></em> and <em><strong>typeB</strong></em> as input types and which type of state is <em><strong>state_type</strong></em>, must obey the following rules: <br/><br/> <strong> &nbsp;&nbsp;&nbsp;• Final Function:</strong> <em>void final_function(<strong>state_type</strong>)</em><br/> <strong> &nbsp;&nbsp;&nbsp;• Transition Function:</strong> <em><strong>state_type</strong> transition_function(<strong>state_type</strong>, <strong>typeA</strong>, <strong>typeB</strong>)</em> 聚合函数接受类型 <em><strong>typeA</strong></em> 和 <em><strong>typeB</strong></em> 作为输入类型,并且类型状态为 <em><strong>state_type</strong></em>, 函数必须遵循如下规则:<br/><br/> <strong> &nbsp;&nbsp;&nbsp;•最终处理函数:</strong> <em>void final_function(<strong>state_type</strong>)</em><br/> <strong> &nbsp;&nbsp;&nbsp;• 过渡处理函数:</strong> <em><strong>state_type</strong> transition_function(<strong>state_type</strong>, <strong>typeA</strong>, <strong>typeB</strong>)</em> - - Form - Form - Initial Condition: @@ -484,18 +273,6 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Colors: 颜色: - - Font color / Fill color 1 - 字体颜色/填充颜色1 - - - Fill color 2 - 填充颜色2 - - - Border color - 边框颜色 - Underline 下划线 @@ -544,13 +321,17 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Placeholder: Body + + Constraint: Name + + + + Constraint: Descriptor + + Application - - Error - 错误 - Unknown exception caught! 捕捉到未知异常! @@ -560,6 +341,13 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G + + BaseConfigWidget + + A backup of the previous settings was saved into <strong>%1</strong>! + + + BaseForm @@ -673,10 +461,6 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Database 数据库 - - Table-Table Relationship - 表-表关系 - Textbox 文本框 @@ -689,10 +473,6 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Parameter 参数 - - Table-View Relationship - 表-视图关系 - Collation @@ -727,6 +507,14 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Basic Relationship + + Policy + + + + Generic SQL + + BaseObjectView @@ -757,18 +545,10 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Schema: 模式: - - Permissions: - 权限: - This object is protected thus no change in form will be applied to it. 此对象处于受保护状态,无法对它应用任何修改。 - - Parent Object: - 父对象: - Value(s) @@ -777,26 +557,10 @@ GPLv3 的完整内容放在源代码根目录的 LICENSE 文件中。完整的 G Version 版本 - - The field(s) or value(s) highlighted on the form is(are) for the exclusive use and/or mandatory in specific versions of PostgreSQL. Failure to complete that may cause errors in the generation of SQL code for each version shown in tool tips of the highlighted fields. - 窗口中高亮显示的字段或值只能用于特定版本的 PostgreSQL。在生成高亮字段工具提示中显示的各版本 SQL 代码时可能会发生错误,导致无法完成操作。 - - - Form - Form - icone icone - - Criate / Edit: - 创建/修改: - - - Edit Permissions - 修改权限 - Edit permissions 编辑权限 @@ -846,6 +610,17 @@ This will disable the code of all child and referrer objects. + + BaseTableView + + Toggles the extended attributes display + + + + Connected rels: %1 + + + BugReportForm @@ -922,15 +697,14 @@ This will disable the code of all child and referrer objects. - CastWidget + BulkDataEditWidget - Conversion Type: - 转换类型: - - - Implicit - 隐式转换 + Bulk data edit + + + + CastWidget Assignment 强制转换 @@ -939,18 +713,10 @@ This will disable the code of all child and referrer objects. Input / Output 输入 / 输出 - - Conversion Function: - 转换函数: - The function to be assigned to a cast from <em><strong>typeA</strong></em> to <em><strong>typeB</strong></em> must have the following signature: <em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>. 将<em><strong>类型 A</strong></em>转换成 <em><strong>类型 B</strong></em>的函数签名:<em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>. - - Form - Form - Source data type 原始数据类型 @@ -978,10 +744,6 @@ This will disable the code of all child and referrer objects. CodeCompletionWidget - - Make persistent - - Makes the widget closable only by ESC key or mouse click on other controls. @@ -994,13 +756,13 @@ This will disable the code of all child and referrer objects. (no items found.) + + Make &persistent + + CollationWidget - - Form - Form - Locale: @@ -1052,23 +814,27 @@ This will disable the code of all child and referrer objects. 默认值: - Form - Form + E&xpression: + - Not Null: - 非空: + &NOT NULL + - E&xpression: + Se&quence: - &NOT NULL + Edit the underlying sequence's attributes - Se&quence: + Edit sequence + + + + Identity: @@ -1094,22 +860,10 @@ This will disable the code of all child and referrer objects. General 常规 - - Style - 样式 - - - Connetions - 连接 - Plug-ins 插件 - - Confirmation - 确认 - Any modification made until now in the current section will be lost! Do you really want to restore default settings? 当前部分所做的修改将会丢失!要恢复到默认设置吗? @@ -1130,6 +884,14 @@ This will disable the code of all child and referrer objects. Snippets + + In some cases restore the default settings related to it may solve the problem. Would like to do that? + + + + Restore + + ConnectionsConfigWidget @@ -1209,18 +971,10 @@ This will disable the code of all child and referrer objects. Revoked Certs.: 已吊销证书: - - Kerberus Server: - Kerberus 服务器: - Force GSSAPI 强制 GSSAPI - - Options: - 选项: - Add 新建 @@ -1233,10 +987,6 @@ This will disable the code of all child and referrer objects. Test 测试 - - Form - Form - Delete selected connection 删除选中的连接 @@ -1269,10 +1019,6 @@ This will disable the code of all child and referrer objects. Success 成功 - - Connection successfuly stablished! - 成功建立连接! - Edit database connections @@ -1333,16 +1079,6 @@ This will disable the code of all child and referrer objects. Indicates in which operations (diff, export, import or validation) the connection is used if none is explicitly specified by the user. - - Connection successfuly stablished! - -Server details: - -PID: `%1' -Protocol: `%2' -Version: `%3' - - There is a connection being created or edited! Do you want to save it? @@ -1359,6 +1095,16 @@ Version: `%3' Edit connections + + Connection successfully established! + +Server details: + +PID: `%1' +Protocol: `%2' +Version: `%3' + + ConstraintWidget @@ -1366,18 +1112,10 @@ Version: `%3' Constraint Type: 约束类型: - - Check Expr.: - 检查表达式: - Fill Factor: 填充因子: - - Comparison: - 比较: - Deferrable: 可延迟: @@ -1410,10 +1148,6 @@ Version: `%3' Type 类型 - - Form - Form - ON DELETE: ON DELETE: @@ -1422,10 +1156,6 @@ Version: `%3' ON UPDATE: ON UPDATE: - - Columns which were included by relationship can not be added / removed manually from the primary key. If done such changes they will be ignored. To create primary key using columns included by relationship use the feature attributes, constraints and primary key on the relationship form. - 包含在关系中的列不能被手动添加/删除主键。这样的操作会被忽略。要将关系中的列创建为主键,请使用“创建/编辑:关系”窗口中的特征属性和主键约束。 - Match: @@ -1465,10 +1195,6 @@ Version: `%3' Target Encoding: 目标编码: - - Conversion Function: - 转换函数: - Default Conversion: 默认转换: @@ -1477,136 +1203,142 @@ Version: `%3' The function to be assigned to an encoding conversion must have the following signature: <em>void function(integer, integer, cstring, internal, integer)</em>. 编码转换的函数签名:<em>void function(integer, integer, cstring, internal, integer)</em>。 - - Form - Form - Conversion Func.: - CrashHandler + CrashHandlerForm - pgModeler Crash Handler - pgModeler 故障处理程序 + Crash Handler + - Oops! pgModeler just crashed! - 糟糕!pgModeler 崩溃了! + Stack trace + 堆栈跟踪信息 - Create - 创建 + Input: + - &Cancel - 取消(&C) + Load report file for analysis + - We apologize for what happened! It is clear that a nasty bug caused it. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. - 我们为此深表歉意!显然,这是由讨厌的 bug 引起的。请描述一下在 pgModule 意外退出前你所做过的操作,并填写在下面的输入框内。这些将有助于我们错误的消除和软件的改进。 + Save the attached model file on the filesystem + - Report - 报告 + pgModeler bug report (*.bug);;All files (*.*) + - Actions made before the crash: - 崩溃前的操作: + Load report + - Loaded Model - 已打开的模型 + Save model + 保存模型 - Attach the below database model file that possibly generates the crash. - 附上可能导致软件崩溃的数据库模型文件。 + Database model (*.dbm);;All files (*.*) + 数据库模型 (*.dbm);; 所有文件 (*.*) - Stack trace - 堆栈跟踪信息 + Crash handler + - pgModeler crash file analysis - pgModeler 崩溃文件分析 + Bug report analysis mode activated. + - Error - 错误 + Oops! pgModeler just crashed! + 糟糕!pgModeler 崩溃了! - File: %1 -Size: %2 bytes - - - 文件: %1 -大小: %2 bytes - - + We apologize for what happened! It is clear that a nasty bug caused that. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. + + + + CsvLoadWidget - Information - 信息 + Form + Form - Crash report successfuly generated! Please send the file '%1' to %2 in order be debugged. Thank you for the collaboration! - 成功生成故障报告!请将文件 ‘%1' 发送到 %2,以便用于调试。感谢您的合作! + Load CSV + - - - CrashHandlerForm - Crash Handler + CSV File: - Stack trace - 堆栈跟踪信息 + Select output file + - Input: + ... - Load report file for analysis + Separator: - Save the attached model file on the filesystem + Use the first row as column names in the CSV file. By unchecking this option the first row is used as data. - pgModeler bug report (*.bug);;All files (*.*) + Columns in the first row - Load report + Load + 打开 + + + Semicolon (;) - Save model - 保存模型 + Comma (,) + - Database model (*.dbm);;All files (*.*) - 数据库模型 (*.dbm);; 所有文件 (*.*) + Space + Space - Crash handler + Tabulation - Bug report analysis mode activated. + Other - Oops! pgModeler just crashed! - 糟糕!pgModeler 崩溃了! + ; + - We apologize for what happened! It is clear that a nasty bug caused that. Please fill out the form below describing your actions before pgModeler quit unexpectedly. This will help on bug extermination and improve the software. + Text delimiter: + + + + " + + + + Load CSV file + + + + Comma-separted values (*.csv);;All files (*.*) @@ -1681,10 +1413,6 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE <html><head/><body><p>Use custom commands with extreme caution because you can change the semantics of the entire model when running SQL validation or export processes. Additionally, depending on the amount of commands, those processes can have their performance sensibly degradated.</p></body></html> - - Type: - 类型: - Generic INSERT @@ -1732,18 +1460,10 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE &Close 关闭(&C) - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> - - Refresh listing - - Refresh - - F5 F5 @@ -1752,34 +1472,14 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE Save changes - - Save - 保存 - Ctrl+S Ctrl+S - - Copy the selection as CSV buffer - - - - Copy - 复制 - - - Ctrl+C - - Export results to CSV file - - Export - 导出 - Ctrl+X @@ -1788,10 +1488,6 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE Undo modifications - - Undo - 撤销 - Ctrl+Z Ctrl+Z @@ -1800,10 +1496,6 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE Add empty rows - - Add - 新建 - Ins Ins @@ -1812,10 +1504,6 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE Mark the selected rows to be deleted - - Delete - 删除 - Del Del @@ -1824,10 +1512,6 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE Duplicate the selected rows - - Duplicate - - Ctrl+D @@ -1968,29 +1652,93 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE insert - - - DatabaseExplorerWidget - Form - Form + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + - Toggles the display of system objects. + Copy items on the grid - System + Paste items on the grid - Toggles the display of extension objects + Ctrl+V - Extension + Browse referenced tables + + + + Change the values of all selected cells at once + + + + Ctrl+E + + + + Add new rows from a CSV file + + + + Copy as CSV + + + + Copy as text + + + + Copy items + + + + Pase items + + + + Browse tables + + Duplicate row(s) + + + + Delete row(s) + + + + Edit cell(s) + + + + Column + + + + Referenced tables + + + + (none) + + + + Referrer tables + + + + + DatabaseExplorerWidget + + Form + Form + Open the grid to visualize or edit data @@ -2019,10 +1767,6 @@ Unchecking this will cause the SQL to be appended at the end of CREATE DATABASE Update the objects tree - - Ctrl+S - Ctrl+S - Drop this database @@ -2761,131 +2505,251 @@ Ref. column(s): %2 -- Source code unavailable for the object %1 (%2). -- - - - DatabaseImportForm - Database Import + Toggle the display of filter widget as well the system/extension objects. - Database import + Sort items alphabetically. When unchecked, items are sorted by OID. - Settings + Sort alphabetically - Options + Client encoding - Connection: - 连接: + Configuration file + - Origin point: + Data directory - Starting point where objects will be put. + Dynamic library path - Tables per row: + Dynamic shared memory - Tables per row + Hba file - Spacing: + Listen addresses - Schemas per row + Max. connections - Spacing between objects + Listen port - Schemas per row: + Server encoding - Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types, extensions. + SSL - Automatically resolve dependencies + SSL ca file - Random colors will be assigned to imported relationships facilitating the identification of links between tables mainly in large models. + SSL cert file - Random colors for relationships + SSL crl file - Enables the import of system built-in objects. It's recommend to select only those objects that are directly referenced by the ones to be imported. WARNING: Try to import a huge set of system objects can bloat the resultant model or even crash pgModeler due to memory/cpu overuse. + SSL key file - Import system objects + Server version - Enables the import of objects created by extensions. Generally there is no need to check this option but if there are objects in the database that directly references this category of objects this mode must be enabled. + Ident file - Import extension objects + Password encryption - pgModeler ignores import errors and will try to create as many as possible objects. By checking this option the import operation will be not aborted but an incomplete model will be constructed. This option generates a log file on pgModeler's temp directory. + Connection ID - Ignore import errors + Server PID - All catalog queries as well the created objects' source code are printed to standard output (stdout). + Server protocol - Debug mode + Referrers - Create all imported objects in the current working model instead of create a new one. + Identity - Import objects to the working model + Command - Database - 数据库 + USING expr. + - Filter: + CHECK expr. - Filter object by it's OID - + Roles + 角色 - By OID + RLS enabled + + + + RLS forced + + + + Show objects filter + + + + Show system objects + + + + Show extension objects + + + + -- Source code unavailable for this kind of object -- + + + + Also restart sequences + + + + Warning + + + + You're running a demonstration version! The data manipulation feature is available only in the full version! + + + + <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? + + + + + DatabaseImportForm + + Settings + + + + Options + + + + Connection: + 连接: + + + Resolve some of the object's dependencies by querying the catalog when a needed object does not exists on the loaded set. In some cases it's necessary to combine this option with others below. This option does not applies to database level objects like role, tablespace and language as well for data types, extensions. + + + + Automatically resolve dependencies + + + + Random colors will be assigned to imported relationships facilitating the identification of links between tables mainly in large models. + + + + Random colors for relationships + + + + Enables the import of system built-in objects. It's recommend to select only those objects that are directly referenced by the ones to be imported. WARNING: Try to import a huge set of system objects can bloat the resultant model or even crash pgModeler due to memory/cpu overuse. + + + + Import system objects + + + + Enables the import of objects created by extensions. Generally there is no need to check this option but if there are objects in the database that directly references this category of objects this mode must be enabled. + + + + Import extension objects + + + + pgModeler ignores import errors and will try to create as many as possible objects. By checking this option the import operation will be not aborted but an incomplete model will be constructed. This option generates a log file on pgModeler's temp directory. + + + + Ignore import errors + + + + All catalog queries as well the created objects' source code are printed to standard output (stdout). + + + + Debug mode + + + + Create all imported objects in the current working model instead of create a new one. + + + + Import objects to the working model + + + + Database + 数据库 + + + Filter: + + + + Filter object by it's OID + + + + By OID @@ -2965,15 +2829,19 @@ Ref. column(s): %2 - Retrieving objects of table `%1'... + This is a PostgreSQL built-in data type and cannot be imported. - This is a PostgreSQL built-in data type and cannot be imported. + This is a pgModeler's built-in object. It will be ignored if checked by user. - This is a pgModeler's built-in object. It will be ignored if checked by user. + Import database + + + + Retrieving objects of `%1' (%2)... @@ -2991,10 +2859,6 @@ Ref. column(s): %2 Creating object `%1' (%2)... - - Trying to recreate object `%1' (%2)... - - Import failed to recreate some objects in `%1' tries. @@ -3031,17 +2895,17 @@ Ref. column(s): %2 Assigning sequences to columns... - - - DatabaseModel - Loading object: %1 (%2) - 正在载入对象:%1 (%2) + Creating object `%1' (%2), oid `%3'... + - Generating %1 of the object: %2 (%3) - 正在生成对象的 %1:%2 (%3) + Trying to recreate object `%1' (%2), oid `%3'... + + + + DatabaseModel The demonstration version can create only `%1' instances of each object type! You've reach this limit for the type: `%2' @@ -3054,10 +2918,6 @@ Ref. column(s): %2 Validating relationships... - - Generating %1 of the object `%2' (%3) - - Saving object `%1' (%2) @@ -3094,6 +2954,10 @@ Ref. column(s): %2 Metadata file successfully loaded! + + Generating %1 code: `%2' (%3) + + DatabaseWidget @@ -3113,10 +2977,6 @@ Ref. column(s): %2 Default 默认 - - Form - Form - Template DB: 数据库模板: @@ -3161,6 +3021,18 @@ Ref. column(s): %2 Use the above fields to specify the default attributes assigned to new objects created on the database model. Leaving a field empty will cause PostgreSQL to use the default values when exporting the model. + + Options: + 选项: + + + Allow connections + + + + Is template + + DomainWidget @@ -3169,32 +3041,32 @@ Ref. column(s): %2 默认值: - Constraint Name: - 约束名称: + Name: + 名称: - Check Expression: - 检查表达式: + Attributes + 属性 - Form - Form + Not null + - Not Null: - 非空: + Check constraints + - Constraint - 约束 + Expression: + - Name: - 名称: + Name + 名称 - Check Expr.: - 检查表达式: + Expression + 表达式 @@ -3332,18 +3204,10 @@ Ref. column(s): %2 Exception - - Insufficient memory space to allocate the object! - 内存不足,无法分配对象! - Assignment of a pseudo-type to the type of the column! 列类型不能为伪类型! - - Zero length assignment! - 长度不能为 0! - Assignment of a precision greater than the length of the type! 精度不能大于类型长度! @@ -3352,10 +3216,6 @@ Ref. column(s): %2 Assignment of an invalid precision to type time, timestamp or interval. The precision in this case must be equal to or less than 6! 类型 time,timestamp 或 interval 的精度设置无效。精度必须小于等于 6! - - Assignment of a not allocated column to object '%1' (%2)! - 必须给对象'%1' (%2) 设置列! - Reference to a column which index is out of the capacity of the column list! 不能引用不在列列表中的列! @@ -3364,26 +3224,6 @@ Ref. column(s): %2 Assignment of not allocated object! 必须设置对象! - - Assignment of a not allocated schema to object '%1' (%2)! - 必须给对象 '%1' (%2) 设置模式! - - - The object '%1' (%2) has inconsistent configuration (invalid SQL/XML definition)! - 对象 '%1' (%2) 设置冲突 (无效的 SQL/XML 定义)! - - - The object '%1' (%2) already exists in the list of elements of the same type in the object '%3' (%4)! - 对象 '%1' (%2) 已经存在于对象 '%3' (%4) 的同类型元素列表中! - - - The object '%1' (%2) can't be assigned because there is already exists in the container object '%3'! - 对象 '%1' (%2) 不能被赋值,因其已存在于容器对象 '%3'! - - - Assignment of object of an invalid type! - 设置的对象无效! - Removing an object of an invalid type! 不能移除无效类型的对象! @@ -3396,62 +3236,18 @@ Ref. column(s): %2 Assignment of empty name to table return type! 表的返回值类型的名称不能为空! - - The insertion of the parameter '%1' will not be possible because there is another parameter with same name in the function '%2'! - 无法插入参数 '%1',因为函数 '%2' 中已经存在一个相同名称的参数了! - - - The insertion of the table return type '%1' will not be possible because there is another return type with the same name in the '%2'! - 无法插入表返回类型 '%1',因为在 '%2' 中已经存在一个相同名称的返回类型! - - - Reference to a parameter which index is out of the parameter list capacity! - 不能引用不在参数列表中的参数! - Reference to an event which does not belongs to trigger! 不能引用不属于触发器的事件! - - The column '%1' can't be assigned to the trigger '%2' because does not belongs to the trigger parent table! - 列 '%1' 无法赋值给触发器 '%2',因为它不属于触发器父表! - - - Assignment of a not allocated function to object '%1' (%2)! - 必须给对象 '%1' (%2) 设置函数! - - - Assignment of a function which return type is different from 'trigger'! - 函数的返回值类型与‘触发器’的不一致! - - - Assignment of a function which parameter count is invalid to the object '%1' (%2)! - 对于对象 '%1' (%2),函数的参数数目不匹配! - Assignment of a function which language is invalid! 语言转换函数无效! - - Assignment of not allocated table to object '%1' (%2)! - 必须给对象 '%1'(%2) 设置表! - - - Reference to an argument which index is out of argument list capacity! - 引用的参数超出参数列表范围! - - - Insertion of a column which name is already registered to another column of the object! - 要插入的列名称已经被注册给了另一个列的对象! - Assignment of empty name to an object! 对象名称不能为空! - - Assignment of invalid name to an object! - 对象名称无效! - Assignment of schema object which type is invalid! 模式对象类型无效! @@ -3488,42 +3284,10 @@ Ref. column(s): %2 Reference to an operator with invalid type! 引用了无效的操作符类型! - - Assigment of value to an invalid option type on role! - 角色选项值的类型无效! - Reference to an invalid role type! 引用了无效的角色类型! - - The insertion of the role '%1' is not possible because this is already being referenced by role '%2'! - 无法插件角色 '%1',因为它已经被角色 '%2' 引用了! - - - Reference redundance detected by having the role '%1' referencing the role '%2'! - 发现角色 '%1' 到角色 '%2' 的引用冗余! - - - The role '%1' can not be listed as a member of itself! - 角色 '%1' 不能列入自身的成员中! - - - Reference to a paper which index is out of paper list capacity! - 纸型引用超出纸型列表范围! - - - Insertion of null command to the rule! - 不能规则插入空命令! - - - Reference to a command which index is out of the command list capacity! - 引用的命令超出命令列表范围! - - - Is not possible to create a self generalization/dependecy relationship! The table can not inherit or copy their own attributes! - 无法创建自身泛化的关系/自身依赖的关系!表不能继承或复制自身的属性! - Assignment of an object that already belongs to another table! 对象已属于另一个表! @@ -3540,10 +3304,6 @@ Ref. column(s): %2 Assignment of a minimum value to the sequence which is greater than the maximum value! 序列的最小值大于其最大值! - - Assignment of a start value to the sequence which is extrapolating the range defined by minimum and maximum values​​! - 序列的起始值不在序列的最小值与最大值的范围内! - Assignment of a null increment value to the sequence! 不能给序列设置空的自增值! @@ -3552,38 +3312,10 @@ Ref. column(s): %2 Assignment of null cache value to the sequence! 序列缓冲值不能为空! - - Assignment of owner table which is not in the same schema as the sequence '%1'! - 表与序列 '%1' 不在同一模式中! - - - Assignment of owner table which does not belong to the same owner of the sequence '%1'! - 表与序列 '%1' 的所有者不同! - - - Assignment of a nonexistent owner column to the sequence '%1'! - 序列 '%1' 的列不存在! - - - Assignment of an owner column to the sequence '%1' that is not related to any table! - 序列 '%1' 的列未关联到任何表! - - - Reference to a label which index is out of labels list capacity! - 引用的标签不在标签列表的范围内! - Allocation of object with invalid type! 不能创建类型无效的对象! - - Assignment of a function with invalid return type to object '%1' (%2)! - 对象 '%1'(%2) 函数的返回类型无效! - - - Assignment of a function with invalid parameter(s) type(s) to object '%1' (%2)! - 对象 '%1'(%2) 函数的参数类型无效! - Assignment of not allocated language! 没有指定语言! @@ -3596,18 +3328,10 @@ Ref. column(s): %2 Reference to data type with an index outside the capacity of data types list! 引用的数据类型不在数据类型列表的范围内! - - Assignment of a null type to to object '%1' (%2)! - 对象 '%1'(%2) 类型不能为空! - Assignment of invalid type to the object! 对象的类型无效! - - Assignment of an empty directory to object '%1' (%2)! - 对象 '%1'(%2) 的目录不能为空! - Obtaining types with invalid quantity! 正确获取的类型的数量无效! @@ -3628,69 +3352,21 @@ Ref. column(s): %2 Insertion of invalid item in the enumerations list of the type! 插入类型枚举列表的项目无效! - - Reference to an attribute which index is out of the attributes list capacity! - 引用的属性超出属性列表的范围! - - - Reference to an enumeration which index is out of the enumerations list capacity! - 引用的枚举值超出枚举值列表的范围! - Assignment of invalid configuration to the type! 类型的配置无效! - The data type '%1' can not be assigned because it already exists in the types list of the aggregate function '%2'! - 无法指派数据类型 '%1',因其已存在于聚合函数 '%2' 的类型列表! + Assignment of an invalid strategy/support number to an operator class element! + 操作符类元素的策略/支持值无效! - Assignment of an operator which input type count is invalid to aggregate function! - 聚合函数的操作符输入类型的数目无效! + Insertion of element which already exists in the element list! + 插入的元素已存在于元素列表! - Assigment of an operator which types of arguments is invalid! - 操作符的参数类型无效! - - - Assignment of system reserved name to the object '%1' (%2)! - 对象 '%1'(%2) 使用了系统保留名称! - - - One function with invalid configuration is been used by the object '%1' (%2)! - 用于对象 '%1'(%2) 的函数的配置无效! - - - Assignment of invalid id to the user! - 无效的用户ID! - - - Assignment of an invalid strategy/support number to an operator class element! - 操作符类元素的策略/支持值无效! - - - Insertion of element which already exists in the element list! - 插入的元素已存在于元素列表! - - - Reference to an element which index is out of element list capacity! - 引用的元素不在元素列表的范围内! - - - Reference to an object which index is out of object list capacity! - 引用的对象不在对象列表的范围内! - - - Removal of an object not allocated! - 不能移除未分配的对象! - - - The object '%1' (%2) can not be removed because it is being referenced by object '%3' (%4)! - 无法移除对象 '%1'(%2),因其被对象 '%3'(%4) 引用了! - - - The object '%1' (%2) can not be removed because it is being referenced by object '%3' (%4) that belongs to '%5' (%6)! - 无法移除对象 '%1'(%2),因其已被对象 '%5'(%6) 中的对象 '%3'(%4) 引用了! + Removal of an object not allocated! + 不能移除未分配的对象! Operation with object(s) which type(s) is invalid! @@ -3704,10 +3380,6 @@ Ref. column(s): %2 Operation with object not allocated! 无法操作未分配的对象! - - The creation of the relationship '%1' between the table '%2' and '%3' can not be done because one does not have a primary key. If the relationship is of the type n-n both tables must have primary keys! - 无法创建关系 '%1',因为表 '%2' 或表 '%3' 缺少主键。如果创建的是 N-N 关系,则两个表都必须有主键! - The relationship of the type 1-1 where both tables are mandatory participation is not implemented because it requires fusion between the tables that breaks the modeling done by the user! 强制执行两表 1-1 关系的功能尚未实现,因为它结合模型中由用户定义的两人互相分离的表! @@ -3720,30 +3392,10 @@ Ref. column(s): %2 Assignment of a primary key to a table which already has one! 表的主键已存在! - - Identifier relationship can not be created for a self relationship, relationships of the type n-n, dependency or generalization! - 不能给自引用关系,N-N 类型关系,依赖关系或泛化关系创建标识符关系! - - - Unable to create a dependency relationship because the column '%1' in table '%2' already exists in table '%3'! - 无法创建依赖关系,因为表 '%2'中的列 '%1' 已经存在于表 '%3'! - - - Unable to create the generalization relationship because the column '%1' in table '%2' can not be merged with the column '%3' of table '%4' because they have incompatible types! - 无法创建泛化关系,因为表 '%2' 中的列 '%1' 不能被合并到表 '%4' 中的列 '%3',因为他们的类型不兼容! - - - An attribute can not be added to a dependence or generalization relationship! - 属性无法添加到依赖关系或者泛化关系中! - A foreign key can not be added to a relationship because is created automatically when this is connected! 无法给关系添加外键,因为在连接时已经自动添加了! - - The object '%1' (%2) is referencing the object '%3' (%4) which was not found in the list of objects of the same type in the model! - 对象 '%1'(%2) 所引用的对象 '%3'(%4) 不存在于模型中同类型的对象列表! - Reference to an user-defined data type that not exists in the model! 引用的用户自定义类型不存在于模型! @@ -3752,166 +3404,30 @@ Ref. column(s): %2 Assignment of invalid maximum size to operation list! 操作列表的最大值无效! - - Unable to write the file %1! Make sure the directory exists, or if the user has access permissions on it! - 无法写入文件 %1!请确保该目录存在,或者检查用户是否具有访问权限! - - - Unable to write the model in the file %1 due to one or more errors in the definition generation process! - 无法保存模式到文件 %1,因为在定义生成过程中出现一个或多个错误! - - - There is already a relationship between '%1' (%2) and '%3' (%4) in the model! - 模型中已存在 '%1'(%2) 和 '%3'(%4) 的关系! - - - The configuration of the relationship '%1' generates a redundancy between the relationships '%2'. Redundancy on identifier or generalization/dependency relationships are not accepted since they result in incorrect column spreading making the model inconsistent! - 关系 “%1”的配置产生了一个在关系'%2' 中的冗余。标识符或者泛化 / 依赖关系不支持冗余,因为他们会生成错误的列从而导致模型错误! - One or more objects were invalidated and automatically removed because they were referencing table columns which were included through relationships and which no longer exists due to disconnection of relationships or exclusion of such generated columns! 一个或者多个对象无效,并自动删除了。因为他们引用的表列所在的关系已经不存在了,由于连接中断或者排除生成的列! - - The primary key '%1' can only be allocated if declared within a block of code that defines a table or relationship! - 主键 '%1' 只有在表或关系定义的代码块中声明之后才可以被分配! - Reference to an invalid privilege type! 引用了无效的权限类型! - - Insertion of an role which already exists in the role list of the permission! - 插入的角色已存在于权限角色列表! - Assignment of privilege incompatible with the type of object referenced by permission! 权限与被允许引用的对象的类型不一致! - - There is already a permission on object '%1' (%2) which has one or more equal roles from those present on permission to be assigned to the object! - 对象 '%1'(%2) 已经有一个权限,分配给此对象权限的角色中有一个或多个功能相当的角色! - - - A permission is referencing the object '%1' (%2) which was not found in the model! - 权限所引用的对象 '%1'(%2) 不存在模型中! - - - The object '%1' (%2) can not be created by not being assigned to any schema! - 无法创建对象 '%1'(%2),因为还没有给它指定模式! - - - The tablespace '%1' can not be inserted into the model because it points to the same directory as the tablespace '%2'! - 表空间 '%1' 无法被加到模型中。因为它指向的目录和表空间 '%2' 的相同! - It is not possible to create arrays of domains or sequences (dimension >= 1)! PostgreSQL does not yet implement this feature! 无法创建维数 > = 1域或序列数组!PostgreSQL 尚未实现此功能! - - The function '%1' can not get a source code as a definition because its language is set to C. Use the attributes symbol and dynamic library instead! - 函数 '%1' 无法获取定义的源代码,因为它的语言被设成了 C 语言。请使用属性号和动态库代替! - - - The function '%1' can have the attributes symbol and dynamic library configured only if the language is set to C. For all other cases you must specify a source code that defines it in the DBMS! - 函数 '%1'只有当语言被设置成 C 语言时,才需要属性符号和动态库配置。其他情况下,您必须在 DBMS 中定义它的源代码! - - - The operator '%1' can not be assigned as a comutator of operator '%2' because it has incompatible settings! - 操作符 '%1' 不能被设置成操作符 '%2' 的转接器,因为两者的设置不兼容! - - - The operator '%1' can not be assigned as negator of operator '%2' because it has incompatible settings! - 操作符 '%1' 不能被设置成操作符 '%2' 的否定操作符,因为两者的设置不兼容! - - - The type '%1' can not self refer in the attributes 'element' or 'copy type' or be used as a data type of an attribute in the configuration of a composite type! - 类型 '%1' 不能对'元素’或'复制类型'进行自引用,或被用作组合类型配置中属性的数据类型! - - - Assignment of invalid element to type '%1'! - 指派给类型 '%1' 的元素无效! - - - Assignment of invalid alignment to type '%1'! - 指派了无效的对齐给类型 ‘%1'! - Assignment of invalid name to the table generated from N-N relationship! 分配无效名称给由 N-N 关系生成的表! - - The relationship '%1' can not make use of the special primary key. Only generalization/dependency relationships have access to this resource! - 关系 '%1' 无法使用特殊主键。只有泛化 / 依赖关系才能! - - - Assignment of invalid suffix to the relationship '%1'! - 分配无效前缀给关系 '%1'! - - - The object '%1' (%2) can not be edited or deleted because it was automatically included through a relationship! To manipulate the object is necessary to make it from the edit form of the relationship that holds it. - 无法修改或删除对象 '%1'(%2),因为它已经被关系自动包含了!要修改对象请到对应的关系修改窗口中操作。 - - - The object '%1' (%2) can not be deleted because it is protected! - 无法删除对象 '%1'(%2),因为它是被保护的! - - - The group '%1' has already been declared earlier! - 组 '%1'已经声明过了! - - - The group '%1' can not be built in the groups declaration block ('%2')! - 组 '%1'无法在组声明区域 (%2) 中构建! - - - The group '%1' was built but not declared in the groups declaration block ('%2')! - 组 '%1'已被构建,但是不是在组声明区域 (%2) 中声明的! - - - The group '%1' can not be built without possessing child elements! - 无法构建组 '%1',因为没有子元素! - - - The group '%1' can not be built once more because this was done in previous blocks! - 无法重新构建组 '%1',因为之前已经做过了! - - - The group '%1' has been declared but not built! - 组 '%1' 已经声明,但是没构建! - - - Reference to a column of objects table with invalid index! - 请参考索引无效的对象表中的一列! - - - Reference to a row of objects table with invalid index! - 请参考索引无效的对象表中的一行! - - - The schema public and the languages plpgsql, c and sql can not be manipulated because they are reserved to PostgreSQL! They are present in the model database only as a reference! - 模式 public 和语言 plpgsql,C,SQL 都无法修改,因为它们是系统保留的!它们在模型数据库中只是一个参考! - - - The new configuration function invalidates the object '%1' (%2)! In this case it is needed to undo the relationship between the affected object and function so that the new configuration of the latter to take effect! - 新的配置函数使对象 '%1'(%2) 无效!在这种情况下,需要重新配置下对象与函数的关系,然后,新的配置就会起作用了! - - - A vision reference must have at least one SQL application : SELECT, FROM, FROM-WHERE or After WHERE! - 一个视图引用必须至少有一个 SQL 应用:SELECT,FROM,FROM-WHERE 或者 WHERE 后! - Constraints like primary key, foreign key or unique must have at least one column related to them! For foreign keys must be selected, in addition, the referenced columns! 主键,外键,唯一键等约束必须有至少一列来关联他们!对于外键约束引用列必须被选中! - - Unable to load one or more configuration files! Please check if files exists in the configuration folder and if they are not corrupted to preventing this error to occur again on the next startup! - 无法载入一个或多少配置文件!请检查文件是否存在配置目录中或者文件错误来防止错误继续在下一次启动中发生! - - - Could not find the default settings file '%1'! To restore default settings check the existence of the file and try again! - 没有发现默认的配置文件 '%1'!重新保存默认设置到文件中! - The export process failed due to an error triggered by the PostgreSQL server in an attempt to execute a SQL command. For more details about the error check the exception stack! @@ -3924,42 +3440,14 @@ Ref. column(s): %2 %1 - - Could not load the plugin '%1' from the library '%2'! Message returned by plugin manager: '%3' - 无法从库 '%2' 中加载插件 '%1'!插件管理器的返回信息:'%3' - One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details. 插件加载发生错误,一个或多个插件没有激活!详情请查看异常信息。 - - Invalid syntax in file %1, line %2, column %3! - 错误语法位于文件 %1,行 %2,列 %3 有! - - - Invalid conditional instruction '%1' on file %2, line %3, column %4! - 错误的条件结构 '%1' 位于文件 %2,行 %3,列 %4! - - - Unknown attribute '%1' in file %2, line %3, column %4! - 未知属性 '%1' 位于文件 %2,行 %3,列 %4! - - - Invalid metacharacter '%1' in file %2, line %3, column %4! - 错误的字符 '%1' 位于文件 %2,行 %3,列 %4! - - - Attribute '%1' with an undefined value in file %2, line %3, column %4! - 未赋值的属性 '%1' 位于文件 %2,行 %3,列 %4! - Assignment of empty XML buffer to parser! 分配空白 XML 缓存给解析器! - - Could not access the file or directory %1! Make sure that it exists or if the user has access permissions on it! - 无法访问文件或目录 %1!请确保它存在,或者检查用户具有访问权限! - Assignment of empty DTD file name! 分配一个空 DTD 文件名! @@ -3968,19 +3456,10 @@ Ref. column(s): %2 Assignment of empty name to the DTD declaration! 分配空白名称给 DTD 声明! - - Error while interpreting XML buffer at line %1 column %2. -Message generated by the parser: '%3'. %4 - 解析 XML 缓存发生错误,错误位于行 %1 列 %2。解析器生成的消息:'%3'。%4 - Operation on unallocated element tree! It is necessary to load the XML parser buffer and interpret it so that the tree is generated! 操作在未分配的元素树上!必须要先载入 XML 解析器缓存并执行解析,这样树才能生成! - - Could not load file %1. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! - 无法载入文件 %1。它出现了不一致性或其中有的依赖项出现错误或已经丢失! - Operation with unallocated tree element! 操作在未分配的树元素上! @@ -4001,12 +3480,6 @@ Message generated by the parser: '%3'. %4 Attempt to connect without define configuration parameters! 尝试没有定义配置参数的连接! - - Could not connect to the database. -Message returned: '%1' - 无法连接数据库。 -返回的信息:'%1' - Assignment of not allocated SQL command result! 指定的 SQL 命令结果不存在! @@ -4015,15 +3488,6 @@ Message returned: '%1' Unable to allocate the result of the SQL command because the response from the DBMS was not understood by the client! 无法获得 SQL 命令结果,因为服务器端的反馈客户端无法识别! - - Unable to allocate command result for the SQL because the server has generated a fatal error! -Message returned by the DBMS: %1 - 无法获取 SQL 的命令结果,因为服务端产生了严重错误!数据库服务器返回的信息:%1 - - - Unable to allocate the result of the SQL command because the command passed was an empty SQL! - 无法获取 SQL 命令的结果,因为命令是一条空 SQL! - Reference to a column of tuple with invalid index! 引用的一列元组索引无效! @@ -4032,16 +3496,6 @@ Message returned by the DBMS: %1 Reference to a column of tuple with invalid name! 引用的一列元组名字无效! - - Reference to a tuple with index invalid or the result is empty (no tuples)! - 引用的元组索引无效或者结果为空(没有)! - - - Could not execute the SQL command. - Message returned: %1 - 无法执行 SQL 命令。 -返回的信息: %1 - Assignment of a not allocated column to object `%1' (%2)! @@ -4266,10 +3720,6 @@ Message returned by the DBMS: %1 Unable to write the file `%1' due to one or more errors in the definition generation process! - - There is already a relationship between `%1' (%2) and `%3' (%4) in the model! - - The configuration of the relationship `%1' generates a redundancy between the relationships `%2'. Redundancy on identifier or generalization/copy relationships are not accepted since they result in incorrect column spreading making the model inconsistent! @@ -4390,30 +3840,6 @@ Message returned by the DBMS: %1 Could not load the plugin `%1' from the library `%2'! Message returned by plugin manager: `%3' - - Invalid instruction `%1' on file %2, line %3, column %4! - - - - Unknown attribute `%1' in file %2, line %3, column %4! - - - - Invalid metacharacter `%1' in file %2, line %3, column %4! - - - - Invalid operator `%1' in comparison expression, file %2, line %3, column %4! - - - - Attribute `%1' with an undefined value in file %2, line %3, column %4! - - - - Attribute `%1' with an invalid name in file %2, line %3, column %4! - - Error while interpreting XML buffer at line %1 column %2. Message generated by the parser: %3. %4 @@ -4526,10 +3952,6 @@ Message returned by the DBMS: `%1' The operator class assigned to the object `%1' (%2) must use `btree' as indexing method! - - Unsupported PostgreSQL version (%1) detected! Valid versions are: %2 - - The validation process failed due to an error triggered by the validation helper. For more details about the error check the exception stack! @@ -4574,10 +3996,6 @@ Message returned by the DBMS: `%1' The widget already has a parent and cannot be assigned to a different object! - - The object `%1' (%2) could not be imported due to one or more errors! Check the exception stack for more details. - - Could not load the database model file `%1'. Check the error stack to see details. Try to run `pgmodeler-cli --fix-model' in order to correct the structure of the file if that is the case. @@ -4658,24 +4076,77 @@ Message returned by the DBMS: `%1' The connection was unexpectedly closed by the database server `%1' at port `%2'! - - - ExportHelper - Creating object '%1' (%2)... - 正在创建对象 '%1' (%2)... + There is already a relationship between `%1' (%2) and `%3' (%4) in the model! When using relationships of the type generalization, copy and one-to-one there can't be other relationships linked to the pair of tables. + + + + Unable to load the configuration file `%1'! Please check if file exists in its folder and/or if it is not corrupted! + + + + Invalid syntax in file `%1', line %2, column %3! + + + + Invalid instruction `%1' on file `%2', line %3, column %4! + + + + Unknown attribute `%1' in file `%2', line %3, column %4! + + + + Invalid metacharacter `%1' in file `%2', line %3, column %4! + + + + Invalid operator `%1' in comparison expression, file `%2', line %3, column %4! + + + + Attribute `%1' with an undefined value in file `%2', line %3, column %4! + + + + Attribute `%1' with an invalid name in file `%2', line %3, column %4! + + + + Could not access the file or directory `%1'! Make sure that it exists or if the user has access permissions on it! + + + + Could not load file `%1'. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing! + + + + Unsupported PostgreSQL version (%1) detected! Valid versions are between %2 and %3. + + + + The object `%1' (%2), oid `%3', could not be imported due to one or more errors! Check the exception stack for more details. `HINT:' if the object somehow references objects in `pg_catalog' or `information_schema' consider enable the importing of system objects. + + + + Failed to drop the database `%1' because it is defined as the default database for the connection `%2'! + + + + The column `%1' must be `NOT NULL' because it composes the primary key of the table `%2'. You need to remove the column from the mentioned contraint in order to disable the `NOT NULL' on it! + - Creating database '%1'... - 正在创建数据库 '%1'... + The identity column `%1' has an invalid data type! The data type must be `smallint', `integer' or `bigint'. + - Connecting to database '%1'... - 正在连接数据库 '%1'... + Reference to an invalid affected command in policy `%1'! + - Creating objects on database '%1'... - 正在对数据库 '%1' 创建对象... + Reference to an invalid special role in policy `%1'! + @@ -4763,6 +4234,14 @@ Message returned by the DBMS: `%1' Whole words + + Hide this widget + + + + ... + + FunctionWidget @@ -4770,18 +4249,10 @@ Message returned by the DBMS: `%1' Attributes 属性 - - Langague: - 语言: - Function Type: 函数类型: - - Window Function: - 窗口函数: - Execution Cost: 执行开销: @@ -4802,18 +4273,10 @@ Message returned by the DBMS: `%1' Return Method: 返回方法: - - Simple - 简单 - Set - - Table - - Parameters 参数 @@ -4854,18 +4317,10 @@ Message returned by the DBMS: `%1' Default Value 默认值 - - Form - Form - Return Table 返回表 - - IN/OUT - IN/OUT - Si&mple @@ -4886,41 +4341,17 @@ Message returned by the DBMS: `%1' Mode + + Language: + + GeneralConfigWidget - - Grid size: - 网格大小: - Operation history: 操作记录: - - items - - - - Autosave interval: - 自动保存的时间间隔: - - - minute(s) - 分钟 - - - Save widgets position - 保存部件位置 - - - Save current session - 保存当前会话 - - - Printing Options: - 打印选项: - Print grid 打印网格 @@ -4933,10 +4364,6 @@ Message returned by the DBMS: `%1' Paper: 纸型: - - Custom (Based on margins) - 定制 (基于边框) - Orientation: 方向: @@ -4949,10 +4376,6 @@ Message returned by the DBMS: `%1' Landscape 横向 - - Margins: - 边距: - Milimeters 毫米 @@ -4993,10 +4416,6 @@ Message returned by the DBMS: `%1' Form Form - - pixels - 像素 - A0 (841 x 1189 mm) A0 (841 x 1189 mm) @@ -5137,18 +4556,10 @@ Message returned by the DBMS: `%1' General 常规 - - The opened models will be saved periodically - - Check if there is a new version on server - - Check for updates at startup - - Design @@ -5177,14 +4588,6 @@ Message returned by the DBMS: `%1' Move canvas by keep mouse on corners - - By default panning mode is triggered with left click and range selection with Shift + left click. - - - - Swap panning and range selection triggers - - Graphical objects (table, views and textboxes) will be created in a single step without the need to click on canvas @@ -5325,118 +4728,146 @@ Message returned by the DBMS: `%1' The little brown fox jumps over the lazy dog - - - GraphicalView - Connected rels: %1 + Minimum object opacity (%): - - - HintTextWidget - Form - Form + Defines the minimum opacity percentage applied to the objects when using the fade out feature. A zero opacity causes the object to be completely hidden not being possible to interact with it in the canvas area. + - - - IndexWidget - Indexing Type: - 索引类型: + Canvas grid size: + - Fill Factor: - 填充因子: + Defines the vertical and horizontal grid size. This value affects the spacing of objects when using object grid alignment feature. + - Options: - 选项: + By default the range selection is triggered with Shift + left click. By checking this option range selection will be activated only with a single click and move. + - Concurrent - 并发 + Trigger range selection with a single click + - Check duplicates - 检查重复 + Defines the maximum amount of elements held in the operation history. Once reached the maximum number the history is automatically cleaned. + - Fast update - 快速更新 + Defines the period when the opened models will be saved automatically. + - Conditional Expr.: - 条件表达式: + Autosave interval (minutes): + - Elements - 元素 + Replaces any straight line in relationship by curved ones in order to improve the model's visualization. + - Column: - 列: + Use curved lines for relationships + - Expression: - 表达式: + Souce code editor args: + - Operator Class: - 操作符类: + lines + - Sorting: - 正在排序: + Clear the entire SQL comand history. + - Ascending - 升序 + Clear history + - Descending - 降序 + Open in file manager + 在文件管理器中打开 - Nulls first - Null 值优先 + Overrides the default user interface language defined by the system. Requires restarting the program. <strong>NOTE:</strong> UI translations are third party collaborations thus any typo or mistake should be reported directly to their respective maintainers. + - Type - 类型 + SQL history max. length: + - Operator Class - 操作符类 + Check updates at startup + - Sorting - 排序 + User interface language: + + + + Browse the source code editor application + + + + Souce code editor: + + + + Configurations directory: + + + + System default + + + + All files (*.*) + + + + Load file + + + + + GenericSQLWidget + + SQL code + + + + HintTextWidget Form - Form + Form + + + IndexWidget - Element - 元素 + Fill Factor: + 填充因子: - Nulls First - Null 值优先 + Options: + 选项: - Expressão - 表达式 + Concurrent + 并发 - Sim - + Fast update + 快速更新 - Não - + Elements + 元素 Attributes @@ -5465,26 +4896,10 @@ Message returned by the DBMS: `%1' Trusted: 可信: - - Handler Function: - 处理函数: - - - Validator Function: - 验证函数: - - - Inline Function: - 内联函数: - The functions to be assigned to the language should have, respectively, the following signatures:<br/><br/> <strong>Handler Function:</strong> <em>language_handler function()</em><br/> <strong>Validator Function:</strong> <em>void function(oid)</em><br/> <strong>Inline Function:</strong> <em>void function(internal)</em> 语言处理函数的签名分别为:<br/><br/> <strong>处理函数:</strong> <em>language_handler function()</em><br/> <strong>验证函数:</strong> <em>void function(oid)</em><br/> <strong>内联函数:</strong> <em>void function(internal)</em> - - Form - Form - Validator Func.: @@ -5508,134 +4923,30 @@ Message returned by the DBMS: `%1' &Edit 编辑(&E) - - &Help - 帮助(&H) - &Show 视图(&S) - - &Tools - 工具(&T) - - - &Plugins - 插件(&P) - - - File - 文件 - - - Edit - 编辑 - - - Help - 帮助 - - - Show - 显示 - New 新建 - - Save - 保存 - Zoom - 缩小 - - Load - 打开 - - - Next - 下一个 - - - Previous - 上一个 - - - Exit - 退出 - - - About pgModeler - 关于 pgModeler - - - Print - 打印 - - - Undo - 撤销 - - - Redo - 重做 - - - Export - 导出 - Show grid 显示网格 - - Align to grid - 对齐到网格 - - - Fullscreen - 全屏 - - - Show the model on fullscreen mode - 在全屏模式下显示模型 - Show the page delimiters 显示分页符 - - Configurations - 配置 - - - Save all models - 保存全部模型 - - - Some models were modified! Do you want to save them before finish the pgModeler? - 模型已被修改!你要在关闭 pgModeler 之前保存它们吗? - Save '%1' as... 保存 '%1' 为... - - Print grid - 打印网格 - - - Print page numbers - 打印页码 - - - Model Options - 模型选项 - Confirmation 确认 @@ -5644,10 +4955,6 @@ Message returned by the DBMS: `%1' Load model 打开模型 - - Overview - 概览 - Show the model overview 显示模型概览 @@ -5688,14 +4995,6 @@ Message returned by the DBMS: `%1' Ctrl+O Ctrl+O - - Save as - 另存为 - - - F2 - F2 - Ctrl+P Ctrl+P @@ -5712,14 +5011,6 @@ Message returned by the DBMS: `%1' Ctrl+G Ctrl+G - - Close model - 关闭模型 - - - Normal zoom - 正常比例 - Ctrl+0 Ctrl+0 @@ -5728,22 +5019,10 @@ Message returned by the DBMS: `%1' Align objects position to grid 对齐对象到网格 - - F11 - F11 - - - Show delimiters - 显示分页符 - Ctrl+L Ctrl+L - - Widgets - 部件 - Save all 保存全部 @@ -5756,18 +5035,6 @@ Message returned by the DBMS: `%1' Changes were detected in the definitions of paper/margin of the model which may cause the incorrect print of the objects. Do you want to continue printing using the new settings? To use the default settings click 'No' or 'Cancel' to abort printing. 模型的纸型/页边距已改变,这可能导致对象打印出错。要使用新的设置继续打印吗?要使用默认设置,请单击“否”或“取消”中止打印。 - - Tools - 工具 - - - View - 视图 - - - Model - 模型 - Database model (*.dbm);;All files (*.*) 数据库模型 (*.dbm);; 所有文件 (*.*) @@ -5776,18 +5043,10 @@ Message returned by the DBMS: `%1' Save model 保存模型 - - The model were modified! Do you want to save it before close? - 模型已被修改!要在关闭前保存吗? - Ctrl+Q - - F3 - F3 - Ctrl+Shift+S @@ -6088,10 +5347,6 @@ Message returned by the DBMS: `%1' &Diff - - Determine the changes between model and database - - Ctrl+Shift+D @@ -6256,64 +5511,33 @@ Message returned by the DBMS: `%1' Executing pending <strong>%1</strong> operation... - - - MessageBox - - Show/hide exceptions stack. - 显示/隐藏异常堆栈。 - - - &Yes - 是(&Y) - - - &No - 否(&N) - - - Cancel - 取消 - - - Error - 错误 - - - Alert - 警告 - - - Information - 信息 - - &Cancel - 取消(&C) + Determine the changes between model/database and another database + - Dialog - Dialog + Arrange objects + - ... - ...... + Rearrange objects over the canvas + - msg - 信息 + Grid + - &Ok - 确定(&O) + Hierarchical + - Exceptions - 异常 + Scattered + - Show excpetion stack in text format (useful to report errors). - 以文本形式显示异常堆栈(有助于报告错误)。 + Rearrange objects over the canvas is an irreversible operation! Would like to proceed? + @@ -6462,138 +5686,150 @@ Message returned by the DBMS: `%1' - Save textboxes to the output file when extracting metadata. When loading the file textboxes are recreated and duplicated ones are ignored. + Textbox objects - Textbox objects + Tag objects - Save tags to the output file when extracting metadata. When loading the file tags are recreated and duplicated ones are ignored. + Backup file: - Tag objects + Select file - Backup file: + ... - Select file + Apply to: - ... + Operation: - Apply to: + Output - Operation: + Progress label... + 处理标签... + + + model not saved yet - Extracts the objects metadata from one of the loaded models and apply to the current model. + The backup file cannot be the same as the input model! - Extract from a &model + Extracting metadata to file `%1' - Reads the objects metadata from a previously saved backup file and apply to the current model. + Saving backup metadata to file `%1' - Restore a bac&kup file + Applying metadata from file `%1' - Output + Metadata processing aborted! - Progress label... - 处理标签... + Objects metadata file (*.omf);;All files (*.*) + - model not saved yet + Handles the objects' fade out status in the metadata file. - The backup file cannot be the same as the input model! + Objects' fade out status - Extracting metadata to file `%1' + Save tags to the output file when extracting metadata. When loading the file, the tags are recreated and duplicated ones are ignored. - Saving backup metadata to file `%1' + Save textboxes to the output file when extracting metadata. When loading the file, the textboxes are recreated and duplicated ones are ignored. - Applying metadata from file `%1' + Handles the tables' and views' extended attributes display status in the metadata file. - Metadata processing aborted! + Tables' extended attributes display - Objects metadata file (*.omf);;All files (*.*) + Save generic SQL objects to the output file when extracting metadata. When loading the file, the objects are recreated and duplicated ones are ignored. - - - ModelDatabaseDiffForm - Database model diff + Generic SQL objects - Generate diff from model + Extracts the objects' metadata from the loaded models and apply to the current focused model. A backup file can be specified to where the focused model's current metadata will be saved. - Settings + &Extract and restore - Input database + Extracts the objects metadata from one of the loaded models saving the info to a backup file. - Connection: - 连接: + Extract &only + - Database: + Reads the objects' metadata from a previously saved backup file and apply to the current model. - Options + &Restore a backup file + + + ModelDatabaseDiffForm - Ignores as many as possible errors on import step. This option generates an incomplete diff. + Settings - Ignore import errors + Connection: + 连接: + + + Database: - Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production servers and always make a backup before use it. + Ignores as many as possible errors on import step. This option generates an incomplete diff. + + + + Ignore import errors - Trucate tables before alter columns + Clears the data of all tables which will have columns modified. This is useful to avoid errors related to type casting. <strong>WARNING:</strong> DO NOT use this option on production servers and always make a backup before use it. @@ -6784,14 +6020,6 @@ Message returned by the DBMS: `%1' Waiting process to start... - - Importing database <strong>%1</strong>... - - - - Comparing the model <strong>%1</strong> and database <strong>%2</strong>... - - Confirmation 确认 @@ -6808,10 +6036,6 @@ Message returned by the DBMS: `%1' Preview diff - - Exporting diff to database <strong>%1</strong>... - - Diff process paused. Waiting user action... @@ -6858,136 +6082,136 @@ Message returned by the DBMS: `%1' SQL code (*.sql);;All files (*.*) SQL 代码 (*.sql);;所有文件 (*.*) - - - ModelExportForm - Model Export - 导出模型 + Diff tool + - Select the export type: - 选择导出类型: + Generate diff code + - File: - 文件: + Source database + - Select target file - 选择目标文件 + Current model: + - PostgreSQL version in which the SQL code should be generated - 生成 SQL 代码的 PostgreSQL 版本 + (model) + - Check if the system user has write permission on target folder. - 检查系统用户是否具有目标文件夹的写权限。 + Compare to + - Options: - 选项: + Diff + - Show grid - 显示网格 + Froce the generation of DROP commands for columns and constraints that exist in database but not in the model. This is useful when diff a partial model against the complete database and the user needs to drop columns and constraint but preserve the rest of the objects. + - Ignore object duplicity - 忽略重复对象 + Drop missing columns and constraints + - The pgModeler ignores errors generated by duplicate objects and creates only model objects that do not exist in the database. This option may be used when an object was created after a later model export. - pgModeler 忽略重复对象的错误,并只会创建数据库中不存在的模型对象。此选项可用在模型导出以后才创建的对象。 + Truncate tables before alter columns + - Export to DBMS: - 导出到数据库系统: + Import && Export + - Connection: - 连接: + Import + - It is recommended to select this option only when the version of the DBMS, somehow, is not identifiable or if you need to generate a specific version of SQL code for testing. - 当无法确定数据库系统的版本或想生成用于测试的特定版本 SQL 代码时,建议选择此项。 + Export + 导出 - &Export - 导出(&E) + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + - &Close - 关闭(&C) + Ignore error codes + - Generating source code... - 正在生成源代码... + model not saved yet + - Initializing model export... - 正在初始化模型导出... + (none) + - Saving file '%1' - 正在保存文件 '%1' + Step %1/%2: Importing database <strong>%3</strong>... + - Creating object '%1' (%2)... - 正在创建对象 '%1' (%2)... + Step %1/%2: Comparing <strong>%3</strong> and <strong>%4</strong>... + - Creating database '%1'... - 正在创建数据库 '%1'... + Step %1/%2: Exporting diff to database <strong>%3</strong>... + + + + ModelExportForm - Connecting to database '%1'... - 正在连接数据库 '%1'... + File: + 文件: - Creating objects on database '%1'... - 正在对数据库 '%1' 创建对象... + Select target file + 选择目标文件 - Exporting process sucessfuly ended! - 成功导出! + PostgreSQL version in which the SQL code should be generated + 生成 SQL 代码的 PostgreSQL 版本 - Error on export! - 导出出错! + Show grid + 显示网格 - Export model as... - 导出模型为... + Ignore object duplicity + 忽略重复对象 - SQL code (*.sql);;All files (*.*) - SQL 代码 (*.sql);;所有文件 (*.*) + Connection: + 连接: - PNG image (*.png);;All files (*.*) - PNG 图像 (*.png);; 所有文件 (*.*) + &Export + 导出(&E) - Export to SQL file: - 导出到 SQL 文件: + &Close + 关闭(&C) - Export to PNG image: - 导出到 PNG 图像: + Initializing model export... + 正在初始化模型导出... - Image: - 图像: + Saving file '%1' + 正在保存文件 '%1' - Show the page delimiters - 显示分页符 + Exporting process sucessfuly ended! + 成功导出! - Check if the system user has write permission on image target folder. - 检查系统用户是否有图像目标文件夹的写权限。 + Export model as... + 导出模型为... ... @@ -7001,10 +6225,6 @@ Message returned by the DBMS: `%1' Progress label... 处理标签... - - ico - ico - Export model @@ -7049,10 +6269,6 @@ Message returned by the DBMS: `%1' Graphics file - - Image (PNG) - - Type: 类型: @@ -7061,10 +6277,6 @@ Message returned by the DBMS: `%1' Zoom: - - Vectorial (SVG) - - Show delimiters 显示分页符 @@ -7113,6 +6325,22 @@ Message returned by the DBMS: `%1' Exporting process canceled by user! + + This advanced option causes pgModeler to ignore extra errors by their numeric codes. These errors must be informed in the input below and separeted by space. For the complete list of error codes check the PostgreSQL docs, section <strong> Appendix A. PostgreSQL Error Codes</strong>. <strong>WARNING:</strong> use this option with extreme care since it can interfere in final export result. + + + + Ignore error codes + + + + I&mage (PNG) + + + + &Vectorial (SVG) + + ModelExportHelper @@ -7377,10 +6605,6 @@ p, li { white-space: pre-wrap; } Parent Type 父类型 - - Visible Object Types - - Select All 选择全部 @@ -7449,6 +6673,14 @@ p, li { white-space: pre-wrap; } By ID + + Visible object types + + + + Model objects + + ModelOverviewWidget @@ -7456,17 +6688,14 @@ p, li { white-space: pre-wrap; } Model overview 模型概览 + + Failed to generate the overview image. +The requested size %1 x %2 was too big and there was not enough memory to allocate! + + ModelRestorationForm - - Modified: %1 - 修改:%1 - - - yyyy-MM-dd hh:mm:ss - yyyy-MM-dd hh:mm:ss - Model restoration 模型恢复 @@ -7479,10 +6708,6 @@ p, li { white-space: pre-wrap; } &Cancel 取消(&C) - - pgModeler was not closed properly in a previous execution and some models were still being edited. Click 'Restore' to reopen the models or 'Cancel' to abort the restoration. - pgModeler 在之前运行时没有正常关闭且部分模型还处于编辑状态。单击“恢复”重新打开模型或“取消”放弃恢复。 - pgModeler was not closed properly in a previous execution and some models were still being edited. Click <strong>Restore</strong> to reopen the models or <strong>Cancel</strong> to abort the restoration. @@ -7573,10 +6798,6 @@ p, li { white-space: pre-wrap; } Try to resolve the reported issues. - - Apply Fix - - Ctrl+S Ctrl+S @@ -7585,10 +6806,6 @@ p, li { white-space: pre-wrap; } Change the creation order for two objects by swapping their ids - - Swap Ids - - Va&lidate @@ -7685,17 +6902,25 @@ p, li { white-space: pre-wrap; } Processing object: %1 - - - ModelWidget - Generalization - 泛化 + Apply fixes + - <strong>CAUTION:</strong> The object model is protected! New objects will be inserted only when the protection is removed! - <STRONG>警告:</STRONG>对象模型处于受保护状态!只有在移除保护之后才可以插入对象! + Swap ids + + + + The column <strong>%1</strong> on <strong>%2</strong> <em>(%3)</em> is referencing the geospatial data type <strong>%4</strong> but the <strong>postgis</strong> extension is not present in the model! + + + <strong>HINT:</strong> Create the extension in the model or let it be created by applying the needed fixes. + + + + + ModelWidget Source code 源代码 @@ -7720,22 +6945,10 @@ p, li { white-space: pre-wrap; } Unprotect 取消保护 - - Pretects the object(s) against modifications - 添加修改保护 - - - Removes from the objetc(s) the protection against modifications - 移除修改保护 - Delete 删除 - - Delete the selected object(s) - 删除选中对象 - Select all 选择全部 @@ -7744,46 +6957,22 @@ p, li { white-space: pre-wrap; } Selects all the graphical objects in the model 选择模型中的全部图形对象 - - Converts the n-n relationship into table - 将 N-N 关系转换成表 - Copy 复制 - - Copy the selected objects(s) - 复制选中对象 - Paste 粘贴 - - Paste the previos copied object(s) - 粘贴已复制的对象 - Cut 剪切 - - Displays objects that reference and that are dependent of the selected object - 显示选中对象的引用对象和依赖对象 - - - New object - 新建对象 - Add a new object in the model 添加新对象到模型中 - - Quick actions - 快速操作 - Rename 重命名 @@ -7796,34 +6985,18 @@ p, li { white-space: pre-wrap; } Move to schema 移动到模式 - - Move the object to another schema - 将此对象移动到另一个模式 - Edit permissions 编辑权限 - - Edit object's permissions - 编辑对象的权限 - Change owner 变更所有者 - - Change object's owner - 变更对象的所有者 - Select children 选择子对象 - - Selects all the children graphical objects on the selected schema - 选择所选定模式的所有子图形对象 - Loading database model 正在载入数据库模型 @@ -7832,10 +7005,6 @@ p, li { white-space: pre-wrap; } Saving database model 正在保存数据库模型 - - Confirmation - 确认 - Also copy all dependencies of selected objects? This minimizes the breakdown of references when copied objects are pasted into another model. 同时复制选中对象的依赖对象吗?这会最大限度减小已复制对象被粘贴到其他模型时,发生引用失效的机会。 @@ -7857,80 +7026,32 @@ p, li { white-space: pre-wrap; } 约束 - Convert a relationship is an irreversible operation and causes the deletion of all operation history! Do you want to continue? - 转换关系是不可逆操作并会删除所有操作记录!要继续吗? + Protects object(s) from modifications + - Dependence - 依赖 + (no objects) + - Convert rel. n-n - 转换 N-N 关系 + One to One (1-1) + - Cut the selected object(s) - 剪切选中的对象 + One to Many (1-n) + - Depend. / Refer. - 依赖/引用 + Many to Many (n-n) + - Relationship - 关系 + Inheritance + - CAUTION: Remove multiple objects at once can cause irreversible invalidations to other objects in the model. Do you really want to delete ALL selected objects? - 注意:同时删除多个对象可能会造成模型中其他对象不可逆的失效。要删除所有选中的对象吗? - - - Validating object: %1 (%2) - 正在验证对象:%1 (%2) - - - Pasting object: %1 (%2) - 正在粘贴对象:%1 (%2) - - - Generating XML code of object: %1 (%2) - 正在生成对象 %1 (%2) 的 XML 代码 - - - Protects object(s) from modifications - - - - Dependencies - 依赖 - - - Highlight - - - - (no objects) - - - - One to One (1-1) - - - - One to Many (1-n) - - - - Many to Many (n-n) - - - - Inheritance - - - - <strong>ATTENTION:</strong> The database model is protected! Operations that could modify it are disabled! - + <strong>ATTENTION:</strong> The database model is protected! Operations that could modify it are disabled! + Source @@ -8104,6 +7225,94 @@ p, li { white-space: pre-wrap; } The cascade deletion found some problems when running! Some objects could not be deleted or registered in the operation's history! Please, refer to error stack for more details. + + Edit data + + + + Select tagged + + + + Select + 选择 + + + Duplicate + + + + Ctrl+D + + + + Extended attributes + + + + Show + 显示 + + + Hide + + + + Jump to table + + + + Schemas rectangles + + + + Fade in/out + + + + Fade in + + + + Fade out + + + + Relationships + + + + Swap ids + + + + Edit the objects creation order by swapping their ids + + + + All objects + + + + Schemas + + + + Tables + + + + Views + + + + Textboxes + + + + None + + ModelsDiffHelper @@ -8394,6 +7603,18 @@ p, li { white-space: pre-wrap; } 0 0 + + Generic SQL + + + + Policy + + + + 8 + 8 + NumberedTextEditor @@ -8413,6 +7634,42 @@ p, li { white-space: pre-wrap; } Ident left + + Load + 打开 + + + Load the object's source code from an external file + + + + Edit + 编辑 + + + Edit the source code in the preferred external editor + + + + Clear + + + + SQL file (*.sql);;All files (*.*) + + + + Load file + + + + The source editor `%1' is running on `pid: %2'. + + + + Could not start the source code editor application `%1'! Make to sure that the source editor path defined in the general settings points to a valid executable and the current user has permission to run the application. Error message returned: `%2' + + ObjectDepsRefsWidget @@ -8440,14 +7697,6 @@ p, li { white-space: pre-wrap; } References 引用 - - Dependeces / References of Object - 对象的依赖/引用 - - - Form - Form - Object's dependencies & references @@ -8495,14 +7744,6 @@ p, li { white-space: pre-wrap; } Clear - - Highlight graphical objects when selecting them or their children on the result list - - - - Highlight - - ... @@ -8563,6 +7804,30 @@ p, li { white-space: pre-wrap; } No objects found. + + (Un)selects the graphical objects in the results grid + + + + Select + 选择 + + + Fades outs all the graphical objects in the results grid (or those not listed). The current fade in/out state of all objects is modified. + + + + Fade out + + + + Listed + + + + Not listed + + ObjectRenameWidget @@ -8607,110 +7872,106 @@ p, li { white-space: pre-wrap; } - ObjectTableWidget + ObjectsTableWidget - Add Item - 添加项目 - - - Remove Item - 移除项目 + Form + Form - Update Item - 更新项目 + Add Item + 添加项目 - Remove All - 删除全部 + Ins + Ins - Edit Item - 编辑项目 + Remove Item + 移除项目 - Move Up - 上移 + Del + Del - Move Down - 下移 + Update Item + 更新项目 - Move to start - 移至开头 + Alt+R + Alt+R - Move to end - 移至末尾 + Remove All + 删除全部 - Do you really want to remove the selected item? - 要移除选中的项目吗? + Shift+Del + Shift+Del - Do you really want to remove the all items? - 要移除全部项目吗? + Duplicate item + - Form - Form + Ctrl+D + - Ins - Ins + Edit Item + 编辑项目 - Del - Del + Space + Space - Alt+R - Alt+R + Move Up + 上移 - Shift+Del - Shift+Del + Ctrl+Up + Ctrl+Up - Space - Space + Move Down + 下移 - Ctrl+Up - Ctrl+Up + Ctrl+Down + Ctrl+Down - Ctrl+Down - Ctrl+Down + Move to start + 移至开头 Ctrl+Home - Ctrl+Home + Ctrl+Home - Ctrl+End, Ctrl+S - Ctrl+End, Ctrl+S + Move to end + 移至末尾 - Confirmação - 确认 + Ctrl+End, Ctrl+S + Ctrl+End, Ctrl+S Confirmation 确认 - - - OperationList - Undoing operation on object: %1 (%2) - 正在撤销对象操作: %1 (%2) + Do you really want to remove the selected item? + 要移除选中的项目吗? - Redoing operation on object:: %1 (%2) - 正在重做对象操作: %1 (%2) + Do you really want to remove all the items? + + + + OperationList (invalid object) @@ -8766,14 +8027,6 @@ p, li { white-space: pre-wrap; } Operation: %1 操作:%1 - - Undoing operations... - 正在撤销操作... - - - Redoing operations... - 正在重做操作... - Operation history exclusion 不显示操作记录 @@ -8817,10 +8070,6 @@ p, li { white-space: pre-wrap; } Elements 元素 - - Elemente Type: - 元素类型: - Operator 操作符 @@ -8845,14 +8094,6 @@ p, li { white-space: pre-wrap; } Support/Strategy: 支持/策略: - - Recheck - 重新检查 - - - Family: - 族: - Storage Type 存储类型 @@ -8870,24 +8111,12 @@ p, li { white-space: pre-wrap; } 支持/策略 - Yes - + Element Type: + - No - - - - Form - Form - - - Element Type: - - - - Op. Family: - + Op. Family: + Operator Family @@ -8900,10 +8129,6 @@ p, li { white-space: pre-wrap; } Indexing: 正在建立索引: - - Form - Form - OperatorWidget @@ -8915,46 +8140,6 @@ p, li { white-space: pre-wrap; } Arguments 参数 - - Functions - 函数 - - - Constraints: - 约束: - - - Operator: - 操作符: - - - Operators - 操作符 - - - Commutation: - 交换: - - - Negation: - 否定: - - - Sort (1): - 排序 (1): - - - Sort (2): - 排序 (2): - - - Less than: - 小于: - - - Greater then: - 大于: - Right Argument Type 右参数类型 @@ -8967,10 +8152,6 @@ p, li { white-space: pre-wrap; } To create a unary operator it is necessary to specify as <strong><em>'any'</em></strong> one of its arguments. Additionally, the function that defines the operator must have only one parameter and this, in turn, must have the same data type of the the argument of unary operator. 在创建单目操作符时必须指定它们参数中的<strong><em>任何</em></strong>一个。另外,作为操作符的函数必须有且只有一个参数,而且这个参数的类型必须与单目操作符参数的类型相同。 - - Form - Form - MERGES 融合连接 (MERGES) @@ -9014,10 +8195,6 @@ p, li { white-space: pre-wrap; } Mode: 模式: - - Form - Form - IN IN @@ -9053,18 +8230,6 @@ p, li { white-space: pre-wrap; } Add Permission 添加权限 - - Type: - 类型: - - - Role - 角色 - - - Form - Form - ID: ID: @@ -9093,10 +8258,6 @@ p, li { white-space: pre-wrap; } Cascade - - Leave the <em><strong>Roles</strong></em> empty to create a permission applicable to <strong><em>PUBLIC</em></strong>. - - Edit permissions 编辑权限 @@ -9121,6 +8282,14 @@ p, li { white-space: pre-wrap; } /* Could not generate the SQL code preview for permissions! + + Name + 名称 + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + + PgModelerCLI @@ -9137,290 +8306,525 @@ p, li { white-space: pre-wrap; } - Connection aliased as '%1' was not found on configuration file. + Usage: pgmodeler-cli [OPTIONS] - Usage: pgmodeler-cli [OPTIONS] + command line interface. - command line interface. + DBMS export options: - PostgreSQL Database Modeler Project - pgmodeler.com.br + Input file must be different from output! - %1, %2 Export to a sql script file. + Incomplete connection information! - %1, %2 Export to a png image. + Starting model export... - %1, %2 Export directly to a PostgreSQL server. + General options: - %1, %2 Version of generated SQL code. Only for file or dbms export. + PNG and SVG export options: - %1, %2 Silent execution. Only critical errors are shown during process. + Miscellaneous options: - %1, %2 Show this help menu. + There are no connections configured. - %1, %2 Draws the grid on the exported png image. + Invalid zoom specified! - %1, %2 Draws the page delimiters on the exported png image. + Invalid action specified to update mime option! - DBMS export options: + Starting model fixing... + + + + Starting mime update... - %1, %2 Ignores errors related to duplicated objects that eventually exists on server side. + Model successfully fixed! - %1, %2=[ALIAS] Connection configuration alias to be used. + Extracting objects' XML... - %1, %2=[HOST] PostgreSQL host which export will operate. + Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! - %1, %2=[PORT] PostgreSQL host listening port. + Recreating objects... - %1, %2=[DBNAME] Connection's initial database. + +** Object(s) that couldn't fixed: - No export mode specified! + WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) - No input file specified! + Database model files (.dbm) are already associated to pgModeler! - No output file specified! + There is no file association related to pgModeler and .dbm files! - Input file must be different from output! + Mime database operation: %1 - Incomplete connection information! + Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. - Starting model export... + Running update-mime-database command... - Loading input file: + Connection aliased as '%1' was not found in the configuration file. - Export to PNG image: + PostgreSQL Database Modeler Project - pgmodeler.io - Export to SQL script file: + Copyright 2006-2018 Raphael A. Silva <raphael@pgmodeler.io> - Export to DBMS: + This CLI tool provides several operations over models and databases without the need to perform them +in pgModeler's graphical interface. All available options are described below. - Export successfully ended! + %1, %2 [FILE] Input model file (.dbm). This is mandatory for fix, export operations. - Copyright 2006-2015 Raphael A. Silva <raphael@pgmodeler.com.br> + %1, %2 [DBNAME] Input database name. This is mandatory for import operation. - This CLI tool provides the operations to export pgModeler's database models without - the need to load them on graphical interface as well to fix model files to the most recent - accepted structure. All available options are described below. + %1, %2 [FILE] Output file. This is mandatory for fixing model or exporting to file, png or svg. - General options: + %1, %2 Try to fix the structure of the input model file in order to make it loadable again. - %1, %2=[FILE] Input model file (.dbm). Mandatory use when fixing a model or exporting it. + %1, %2 [NUMBER] Model fix tries. When reaching the maximum count the invalid objects will be discarded. - %1, %2=[FILE] Output file. Mandatory use when fixing model or export to file or png. + %1, %2 Export the input model to a sql script file. - %1, %2 Try to fix the structure of the input model file in order to make it loadable again. + %1, %2 Export the input model to a png image. - %1, %2 Model fix tries. When reaching the maximum count the invalid objects will be discard. + %1, %2 Export the input model to a svg file. - %1, %2 Export to a svg file. + %1, %2 Export the input model directly to a PostgreSQL server. - %1, %2 List available connections on %3 file. + %1, %2 Import a database to an output file. - PNG and SVG export options: + %1, %2 Compares a model and a database or two databases generating the SQL script to synch the latter in relation to the first. - %1, %2 Each page will be exported on a separated png image. (Only for PNG) + %1, %2 Force the PostgreSQL version of generated SQL code. - %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG) + %1, %2 Silent execution. Only critical messages and errors are shown during process. - %1, %2 Drop the database before execute a export process. + %1, %2 Show this help menu. - %1, %2 Runs the DROP commands attached to SQL-enabled objects. + Connection options: - %1, %2 Simulates a export process. Actually executes all steps but undoing any modification. + %1, %2 List available connections in file %3. - %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. + %1, %2 [ALIAS] Connection configuration alias to be used. - %1, %2=[USER] PostgreSQL username. + %1, %2 [HOST] PostgreSQL host in which a task will operate. - %1, %2=[PASSWORD] PostgreSQL user password. + %1, %2 [PORT] PostgreSQL host listening port. - Miscellaneous options: + %1, %2 [USER] PostgreSQL username. - %1, %2=[ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + %1, %2 [PASSWORD] PostgreSQL user password. - There are no connections configured. + %1, %2 [DBNAME] Connection's initial database. - Available connections (alias : conn. string) + %1, %2 Draws the grid in the exported image. - Export, fix model and update mime operations can't be used at the same time! + %1, %2 Draws the page delimiters in the exported image. - Multiple export mode specified! + %1, %2 Each page will be exported in a separated png image. (Only for PNG images) - Invalid zoom specified! + %1, %2 [FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG images) - Invalid action specified to update mime option! + %1, %2 Ignores errors related to duplicated objects that eventually exist in the server. - Starting model fixing... + %1, %2 [CODES] Ignores additional errors by their codes. A comma-separated list of alphanumeric codes should be provided. - Starting mime update... + %1, %2 Drop the database before execute a export process. - Fixed model file: + %1, %2 Runs the DROP commands attached to SQL-enabled objects. - Model successfully fixed! + %1, %2 Simulates an export process by executing all steps but undoing any modification in the end. - Mime database successfully updated. + %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode. - Export to SVG file: + Database import options: - Extracting objects' XML... + %1, %2 Ignore all errors and try to create as many as possible objects. - Invalid input file! It seems that is not a pgModeler generated model or the file is corrupted! + %1, %2 Import system built-in objects. This option causes the model bloating due to the importing of unneeded objects. - Recreating objects... + %1, %2 Import extension objects. This option causes the model bloating due to the importing of unneeded objects. - -** Object(s) that couldn't fixed: + %1, %2 Run import in debug mode printing all queries executed in the server. - WARNING: There are objects that maybe can't be fixed. Trying again... (tries %1/%2) + Diff options: - Database model files (.dbm) are already associated to pgModeler! + %1, %2 [DBNAME] The database used in the comparison. All the SQL code generated is applied to it. - There is no file association related to pgModeler and .dbm files! + %1, %2 Save the generated diff code to output file. - Mime database operation: %1 + %1, %2 Apply the generated diff code on the database server. - Can't erase the file %1! Check if the current user has permissions to delete it and if the file exists. + %1, %2 Don't preview the generated diff code when applying it to the server. - Running update-mime-database command... + %1, %2 Drop cluster level objects like roles and tablespaces. + + + + %1, %2 Revoke permissions already set on the database. New permissions configured in the input model are still applied. + + + + %1, %2 Drop missing objects. Generates DROP commands for objects that are present in the input model but not in the compared database. + + + + %1, %2 Force the drop of missing columns and constraints. Causes only columns and constraints to be dropped, other missing objects aren't removed. + + + + %1, %2 Rename the destination database when the names of the involved databases are different. + + + + %1, %2 Don't drop or truncate objects in cascade mode. + + + + %1, %2 Truncate tables prior to alter columns. Avoids errors related to type casting when the new type of a column isn't compatible to the old one. + + + + %1, %2 Don't reuse sequences on serial columns. Drop the old sequence assigned to a serial column and creates a new one. + + + + %1, %2 Don't force the recreation of objects. Avoids the usage of a DROP and CREATE commands to create a new version of the objects. + + + + %1, %2 Don't recreate the unmodifiable objects. These objects are the ones which can't be changed via ALTER command. + + + + %1, %2 [ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4]. + + + + ** The diff process allows the usage of the following options related to import and export operations: + + + + * Export: + + + + * Import: + + + + ** When running the diff using two databases (%1 and %2) there's the need to specify two connections/aliases. + + + + If only one connection is set it will be used to import the input database as well to retrieve database used in the comparison. + + + + A second connection can be specified by appending a 1 on any connection configuration parameter listed above. + + + + Available connections (alias : connection string) + + + + No operation mode was specified! + + + + Export, fix model, import database, diff and update mime operations can't be used at the same time! + + + + Multiple export mode was specified! + + + + No input file was specified! + + + + No input database was specified! + + + + No output file was specified! + + + + No input file or database was specified! + + + + The input file and database can't be used at the same time! + + + + No database to be compared was specified! + + + + No diff action (save or apply) was specified! + + + + No output file for the diff code was specified! + + + + ** Error code `%1' found and ignored. Proceeding with export. + + + + ** Command: %1 + + + + Loading input file: %1 + + + + Fixed model file: %1 + + + + Export to PNG image: %1 + + + + Export to SVG file: %1 + + + + Export to SQL script file: %1 + + + + Export to DBMS: %1 + + + + Export successfully ended! + + + + + Starting database import... + + + + Input database: %1 + + + + Saving the imported database to file... + + + + Import successfully ended! + + + + + Starting diff process... + + + + Input model: %1 + + + + Compare to: %1 + + + + Loading input model... + + + + Importing the database `%1'... + + + + Comparing the generated models... + + + + No differences were detected. + + + + Saving diff to file `%1' + + + + ** WARNING: You are about to apply the generated diff code to the server. Data can be lost in the process! + + + + ** Proceed with the diff applying? (yes/no) > + + + + yes + + + + no + + + + Diff code not applied to the server. + + + + Applying diff to the database `%1'... + + + + Diff successfully ended! + + + + + Mime database successfully updated! + @@ -9547,10 +8951,6 @@ p, li { white-space: pre-wrap; } Loaded plug-ins 已加载的插件 - - <html><head/><body><p>Details about plugins development and installation can be found at <a href="http://www.pgmodeler.com.br/wiki/doku.php?id=plugins"><span style=" text-decoration: underline; color:#0057ae;">pgModeler Wiki</span></a>. <span style=" font-weight:600;">Note:</span> plugin installation requires pgModeler to be restarted.</p></body></html> - <html><head/><body><p>关于插件开发和安装的详细信息可以在<a href="http://www.pgmodeler.com.br/wiki/doku.php?id=plugins"><span style=" text-decoration: underline; color:#0057ae;">pgModeler Wiki</span></a>中找到。 <span style=" font-weight:600;">注意:</span> 安装插件需要重启pgModeler。 - Plugin 插件 @@ -9564,6 +8964,45 @@ p, li { white-space: pre-wrap; } 动态链接库 + + PolicyWidget + + Basics + + + + Command: + + + + Permissive + + + + Roles + 角色 + + + Expressions + + + + USING: + + + + CHECK: + + + + Name + 名称 + + + Leave the <em><strong>Roles</strong></em> grid empty in order to create a %1 applicable to <strong><em>PUBLIC</em></strong>. + + + QObject @@ -9575,21 +9014,6 @@ p, li { white-space: pre-wrap; } %1 (行:%2) - - QuickRenameWidget - - Form - Form - - - Rename - 重命名 - - - Cancel - 取消 - - Relationship @@ -9623,18 +9047,10 @@ p, li { white-space: pre-wrap; } Connection Mode - - This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. - - Connect FK to PK columns - - This mode is the classical one. It connects the relationship to tables through their central points. - - Connect tables' center points @@ -9747,6 +9163,30 @@ p, li { white-space: pre-wrap; } Default 默认 + + This mode renders the relationships in crow's foot notation which has a better semantics and readability. It also determines the optimal point where the relationship is connected on the tables' edges taking their position into account. + + + + Crow's foot notation + + + + This mode determines the optimal point where the relationship is connected on the tables' edges taking their position into account. It implies the usage of the classical ER notation. + + + + Connect tables' edges + + + + This mode is available only for <strong>one-to-one</strong>, <strong>one-to-many</strong> and <strong>fk relationships</strong> but provides a better semantics when linking tables by placing the lines on the exact point where the relationship occurs. It implies the usage of the classical ER notation. + + + + This mode is the classical one. It connects the relationship to tables through their central points. It implies the usage of the classical ER notation. + + RelationshipWidget @@ -9754,10 +9194,6 @@ p, li { white-space: pre-wrap; } General 常规 - - Relationship: - 关系: - One to one relationship 一对一关系 @@ -9774,46 +9210,18 @@ p, li { white-space: pre-wrap; } Generalization relationship (inheritance) 泛化关系 (继承) - - Dependency relationship - 依赖关系 - Identifier 标识符 - - Source Table: - 原始表: - - - Target Table: - 目标表: - Cardinality: 基数: - - Source Required - 原始对象是必须的 - - - Target Required - 目标对象是必须的 - Name of the table generated from many to many relationship 多对多关系生成表的名称 - - Table Name: - 表名称: - - - Foreign key - 外键 - Deferrable: 可延迟: @@ -9846,26 +9254,6 @@ p, li { white-space: pre-wrap; } Constraint 约束 - - Editing attributes of an existing relationship is allowed, but must be done carefully because it may break references to columns and cause invalidation of objects such as triggers, indexes, constraints and sequences. - 编辑现有关系的属性是允许的,但必须小心,因为此操作会导致无效的对象 (如触发器,索引,约束和序列),进而破坏引用列。 - - - Use the special primary key if you want to include a primary key containing inherited / copied columns to the receiving table. This is a feature available only for generalization / dependency relationships. - 如果你想在受方表中包含一个带有继承/复制列的主键,请使用特殊主键。此特性仅适用于泛化/依赖关系。 - - - Automatic Suffix - 自动补充后缀 - - - Form - Form - - - 1-1 - 1-1 - 1-n 1-N @@ -9874,22 +9262,10 @@ p, li { white-space: pre-wrap; } n-n N-N - - gen - gen - dep dep - - Source Suffix: - 原始后缀: - - - Target Suffix: - 目标后缀: - Dependency / Copy relationship @@ -10143,16 +9519,19 @@ p, li { white-space: pre-wrap; } + + ResultSetModel + + [binary data] + + + RoleWidget Password: 密码: - - Validity: - 合法性: - Connections: 连接: @@ -10165,26 +9544,6 @@ p, li { white-space: pre-wrap; } Superuser 超级用户 - - Inherit Permissions - 继承权限 - - - Create Database - 创建数据库 - - - Can Login - 允许登录 - - - Create Users/Groups - 创建用户/组 - - - Encrypted Password - 加密密码 - Members 成员 @@ -10202,47 +9561,43 @@ p, li { white-space: pre-wrap; } 成员(管理员) - Form - Form - - - SysID: - SysID: + Member of + 成员 - yyyy-MMM-dd hh:mm - yyyy-MMM-dd hh:mm + Encrypted + - Member of - 成员 + yyyy-MMM-dd hh:mm:ss + - SysID - SysID + Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. + - Can create Database + Inherit permissions - Can create Role + Can create database - Can use Replication + Bypass RLS - Encrypted + Can use replication - yyyy-MMM-dd hh:mm:ss + Can login - Assigning <strong><em>-1</em></strong> to <strong><em>Connections</em></strong> creates a role without connection limit.<br/> Unchecking <strong><em>Validity</em></strong> creates an role that never expires. + Can create role @@ -10260,10 +9615,6 @@ p, li { white-space: pre-wrap; } Conditional Expr.: 条件表达式: - - Executed Commands - 执行的命令 - SQL Command: SQL 命令: @@ -10272,10 +9623,6 @@ p, li { white-space: pre-wrap; } To create a rule that does not perform any action (<strong>DO NOTHING</strong>) simply do not specify commands in the SQL commands table. 创建一个不执行任何操作的规则(<STRONG>DO NOTHING</STRONG>)简单点说,就是 SQL 命令表中没有的命令。 - - Form - Form - SQL command SQL 命令 @@ -10291,30 +9638,14 @@ p, li { white-space: pre-wrap; } Form Form - - Load SQL script - - - - &Load - - Save SQL commands - - &Save - - Search in SQL code - - &Find - - Alt+F @@ -10399,10 +9730,6 @@ p, li { white-space: pre-wrap; } Results (%1) - - [%1]: SQL command successfully executed. <em>%2 <strong>%3</strong></em> - - Rows affected @@ -10435,6 +9762,90 @@ p, li { white-space: pre-wrap; } Clear history + + Close the current SQL script + + + + SQL script currently handled + + + + (not saved) + + + + Handle external SQL script + + + + &Script + + + + Fi&nd + + + + Alt+T + + + + Alt+X + + + + Current working database + + + + Load + 打开 + + + Save + 保存 + + + Save as + 另存为 + + + [%1]: SQL command successfully executed in <em><strong>%2</strong></em>. <em>%3 <strong>%4</strong></em> + + + + Plain format + + + + CVS format + + + + This action will wipe out all the SQL commands history for all connections! Do you really want to proceed? + + + + Save history + + + + Reload history + + + + Find in history + + + + Hide find tool + + + + This action will wipe out all the SQL commands history for the current connection! Do you really want to proceed? + + SQLToolWidget @@ -10490,21 +9901,48 @@ p, li { white-space: pre-wrap; } <strong>ATTENTION:</strong> Disconnect from all databases will close any opened tab in this view! Do you really want to proceed? + + + SceneInfoWidget + + Form + Form + + + Current position of the mouse in the canvas + + - <strong>CAUTION:</strong> You are about to drop the entire database <strong>%1</strong>! All data will be completely wiped out. Do you really want to proceed? + - - You're running a demonstration version! The data manipulation feature is available only in the full version! + Current zoom factor + + + + Currently selected object(s) + + + + Dimensions of the selected object(s) + + + + No selection + + + + N/A + + + + Sel. objects: %1 SchemaWidget - - Form - Form - Show rectangle @@ -10541,15 +9979,15 @@ p, li { white-space: pre-wrap; } 缓存: - Owner: - 所有者: + Owner Col.: + - Form - Form + Defualt values: + - Owner Col.: + User defined @@ -10688,10 +10126,6 @@ p, li { white-space: pre-wrap; } Version: 版本: - - Type: - 类型: - Source code visualization 查看源代码 @@ -10704,10 +10138,6 @@ p, li { white-space: pre-wrap; } -- SQL code unavailable for this type of object -- -- 无法生成此对象类型的 SQL 代码 -- - - Form - Form - PostgreSQL PostgreSQL @@ -10800,20 +10230,52 @@ p, li { white-space: pre-wrap; } ID: - Before: + Before: + + + + Swap the values of the fields + + + + Swap values + + + + Change the objects creation order is an irreversible operation and cause the operations history to be automatically erased. Note that the creation order configured in this form is not definitive and may change after a model validation. + + + + Swap the object ids changing their creation order + + + + Swap ids + + + + Filter: + + + + ID - It's recommended to use this feature only when the SQL validation fails in cases when a object is being referenced in portions where the ordinary validation couldn't reach, e.g., inside of a rule command or check constraint expression. - + Object + 对象 - Swap the values of the fields - + Type + 类型 - Swap values - + Parent Object + 父对象 + + + Parent Type + 父类型 @@ -10837,18 +10299,10 @@ p, li { white-space: pre-wrap; } Add empty rows - - Add - 新建 - Ins Ins - - Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely igored when generating the <strong>INSERT</strong> commands. - - Add an empty column @@ -10857,10 +10311,6 @@ p, li { white-space: pre-wrap; } Remove all rows from the grid preserving columns - - Clear - - Shift+Del Shift+Del @@ -10869,26 +10319,14 @@ p, li { white-space: pre-wrap; } Delete the selected rows - - Delete - 删除 - Del Del - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in <span style=" font-weight:600;">{}</span>. To use <span style=" font-weight:600;">{</span> or <span style=" font-weight:600;">}</span> as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\{</span> or <span style=" font-weight:600;">\}</span>.</p></body></html> - - Duplicate the selected rows - - Duplicate - - Ctrl+D @@ -10926,59 +10364,88 @@ p, li { white-space: pre-wrap; } - (no columns) + Copy items on the grid - - - TableObjectView - -Relationship: %1 + Copy + 复制 + + + Add row - - - TableView - Connected rels: %1 + Delete column - - - TableWidget - Columns - + Paste items on the grid + - Constraints - 约束 + Paste + 粘贴 - Triggers - 触发器 + Ctrl+V + - Rules - 规则 + Fills the grid using a CSV file + - Indexes - 索引 + <html><head/><body><p>Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely ignored when generating the <span style=" font-weight:600;">INSERT</span> commands.</p></body></html> + - Tables - + Add column + + + + Duplicate rows + + + + Change the values of all selected cells at once + + + + Bulk data edit + + + + Ctrl+E + - Ancestor Tables: - 祖先表: + Delete all columns + + + + Delete rows + + + + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + + + + Delete all rows + + + + TableObjectView - Copied Tables: - 复制的表: + +Relationship: %1 + + + + TableWidget Name 名称 @@ -11011,18 +10478,6 @@ Relationship: %1 Indexing 索引 - - Form - Form - - - With OIDs: - 接受 OIDs: - - - Attribute - 属性 - ON DELETE ON DELETE @@ -11099,6 +10554,62 @@ Relationship: %1 Define initial data for the table + + Enable row level security + + + + Force RLS for owner + + + + &Policies + + + + PK + + + + Attribute(s) + + + + It is not possible to mark a column as primary key when the table already has a primary key which was created by a relationship! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. + + + + It is not possible to mark a column created by a relationship as primary key! This action should be done in the section <strong>Primary key</strong> of the relationship's editing form. + + + + Command + + + + Permissive + + + + USING expression + + + + CHECK expression + + + + Roles + 角色 + + + Yes + + + + No + + TablespaceWidget @@ -11140,10 +10651,6 @@ Relationship: %1 TaskProgressWidget - - Loading object: [object] (type) - 载入对象:[对象] (类型) - Executing tasks 正在执行的任务 @@ -11167,10 +10674,6 @@ Relationship: %1 Select text color 选择文本颜色 - - Form - Form - Underline 下划线 @@ -11194,14 +10697,6 @@ Relationship: %1 TriggerWidget - - Triggering Mode: - 触发器模式: - - - Execute per row - 逐行执行 - Event: 事件: @@ -11210,18 +10705,6 @@ Relationship: %1 Deferrable: 可延迟: - - Deferral: - 延迟: - - - Referenced Table: - 引用表: - - - Conditional Expr.: - 条件表达式: - Columns @@ -11250,14 +10733,6 @@ Relationship: %1 Type 类型 - - Form - Form - - - INSTEAD OF - INSTEAD OF - INSERT INSERT @@ -11274,10 +10749,6 @@ Relationship: %1 TRUNCATE TRUNCATE - - Constraint Trigger: - 约束触发器: - Constraint 约束 @@ -11317,10 +10788,6 @@ Relationship: %1 Enumeration 枚举 - - Composite - 组合 - Enumerations 枚举 @@ -11341,18 +10808,10 @@ Relationship: %1 Storage: 存储: - - By Value: - 按值: - Category: 类别: - - Preferred: - 首选: - Delimiter: 分隔符: @@ -11369,10 +10828,6 @@ Relationship: %1 Functions 函数 - - Copy Type - 复制类型 - Element Type 元素类型 @@ -11385,10 +10840,6 @@ Relationship: %1 Type 类型 - - Form - Form - char char @@ -11552,22 +11003,10 @@ Relationship: %1 Get source code - - Recover a package - - - - Purchase a new package - - Failed to check updates - - The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <strong>%1</strong>. - - No updates found @@ -11580,6 +11019,10 @@ Relationship: %1 The update notifier failed to check for new versions! A HTTP status code was returned: <strong>%1</strong> + + The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <em>%1</em> - <strong>%2</strong>. + + ViewWidget @@ -11587,10 +11030,6 @@ Relationship: %1 References 引用 - - Type: - 类型: - Column @@ -11603,10 +11042,6 @@ Relationship: %1 Used in: 被用在: - - After WHERE - WHERE 之后 - Table: 表: @@ -11635,26 +11070,6 @@ Relationship: %1 Code Preview 代码预览 - - To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[tablel].*</strong></em> - 要引用表中全部列 (*) 保留空的 <strong>Column</strong> 字段即可,这等同于 <em><strong>[schema].[tablel].*</strong></em> - - - -- Could not generate the code. Make sure all attributes are correctly filled! -- - -- 无法生成代码。请确认已正确填写全部属性! -- - - - Form - Form - - - SELECT-FROM - SELECT-FROM - - - FROM-WHERE - FROM-WHERE - Col./Expr. 列/表达式 @@ -11667,10 +11082,6 @@ Relationship: %1 Alias Col. 列别名 - - SF FW AW - SF FW AW - Reference Type: @@ -11691,10 +11102,6 @@ Relationship: %1 Table Expression - - Flags: SF FW AW VD - - Name 名称 @@ -11751,68 +11158,57 @@ Relationship: %1 With no data - - - VisaoObjetosWidget - - Objects of Model - 模型中的对象 - - - Visible Objects Type - 可见对象类型 - - Select All - 选择全部 + The element will be used as part of the SELECT statement to retrieve columns or expressions that will compose the view's columns + - Clear All - 取消全部 + SELECT ... + - Select - 选择 + The element will be used as part of the WHERE clause in form of conditional expression + - Cancel - 取消 + WHERE ... + - Objects view configuration - 对象视图配置 + The element is used in the FROM portion of the command in order to reference tables or construct JOIN statements + - Tree view - 树视图 + FROM ... + - List view - 列表视图 + The element's expression is used exclusively as the view's definition + - 1 - 1 + The element will be appended to the very end of the view's definition. This is useful when using GROUP BY/HAVING statements + - ... - ... + End expression + - Object - 对象 + Indexes + 索引 - Type - 类型 + Flags: SF FW AW EX VD + - Parent Object - 父对象 + To reference all columns in a table (*) just do not fill the field <strong>Column</strong>, this is the same as write <em><strong>[schema].[table].*</strong></em> + - Parent Type - 父类型 + Indexing + 索引 diff --git a/libobjrenderer/src/baseobjectview.cpp b/libobjrenderer/src/baseobjectview.cpp index 396741816e..b1d3a7b3b2 100644 --- a/libobjrenderer/src/baseobjectview.cpp +++ b/libobjrenderer/src/baseobjectview.cpp @@ -24,6 +24,7 @@ map BaseObjectView::font_config; map> BaseObjectView::color_config; unsigned BaseObjectView::global_sel_order=1; bool BaseObjectView::use_placeholder=true; +bool BaseObjectView::compact_view=false; BaseObjectView::BaseObjectView(BaseObject *object) { @@ -397,6 +398,16 @@ bool BaseObjectView::isPlaceholderEnabled(void) return(use_placeholder); } +void BaseObjectView::setCompactViewEnabled(bool value) +{ + compact_view = value; +} + +bool BaseObjectView::isCompactViewEnabled(void) +{ + return(compact_view); +} + QVariant BaseObjectView::itemChange(GraphicsItemChange change, const QVariant &value) { if(change==ItemPositionHasChanged) @@ -638,10 +649,12 @@ double BaseObjectView::getFontFactor(void) double BaseObjectView::getScreenDpiFactor(void) { - double factor = qApp->screens().at(qApp->desktop()->screenNumber(qApp->activeWindow()))->logicalDotsPerInch() / 96.0f; + QScreen *screen = qApp->screens().at(qApp->desktop()->screenNumber(qApp->activeWindow())); + double factor = screen->logicalDotsPerInch() / 96.0f; + double pixel_ratio = screen->devicePixelRatio(); if(factor < 1) return (1); - return(factor); + return(factor * pixel_ratio); } diff --git a/libobjrenderer/src/baseobjectview.h b/libobjrenderer/src/baseobjectview.h index 5a7aba7614..64ac2ce6c8 100644 --- a/libobjrenderer/src/baseobjectview.h +++ b/libobjrenderer/src/baseobjectview.h @@ -46,6 +46,11 @@ class BaseObjectView: public QObject, public QGraphicsItemGroup { is incremented each time an object is selected. */ static unsigned global_sel_order; + /*! \brief Stores the current status for object's compact view display. + * In compact view the alias of object's are shown instead of name. Also, data types and constraint types are hidden, + * as well the table's extended area is collapsed by default */ + static bool compact_view; + /*! \brief Stores the selection order of the current object. This attribute is used to know when an item was selected before another in the scene because the implementation of the method QGraphicsScene :: selectedItem() the selected objects are returned without @@ -153,6 +158,10 @@ class BaseObjectView: public QObject, public QGraphicsItemGroup { static bool isPlaceholderEnabled(void); + static void setCompactViewEnabled(bool value); + + static bool isCompactViewEnabled(void); + //! \brief Sets the font style for the specified element id static void setFontStyle(const QString &id, QTextCharFormat font_fmt); diff --git a/libobjrenderer/src/basetableview.cpp b/libobjrenderer/src/basetableview.cpp index 1e50e9beda..362d3f76f2 100644 --- a/libobjrenderer/src/basetableview.cpp +++ b/libobjrenderer/src/basetableview.cpp @@ -356,13 +356,14 @@ void BaseTableView::__configureObject(float width) QPen pen = ext_attribs_body->pen(); float py = 0; float factor = qApp->screens().at(qApp->desktop()->screenNumber(qApp->activeWindow()))->logicalDotsPerInch() / 96.0f; + float pixel_ratio = qApp->screens().at(qApp->desktop()->screenNumber(qApp->activeWindow()))->devicePixelRatio(); ext_attribs_toggler->setVisible(true); ext_attribs_tog_arrow->setVisible(true); ext_attribs_toggler->setPen(pen); ext_attribs_toggler->setBrush(ext_attribs_body->brush()); - ext_attribs_toggler->setRect(QRectF(0, 0, width, 12 * factor)); + ext_attribs_toggler->setRect(QRectF(0, 0, width, 12 * factor * pixel_ratio)); if(!tab->isExtAttribsHidden()) { @@ -383,14 +384,14 @@ void BaseTableView::__configureObject(float width) if(!tab->isExtAttribsHidden()) { pol.append(QPointF(0,0)); - pol.append(QPointF(-5 * factor, 6 * factor)); - pol.append(QPointF(5 * factor, 6 * factor)); + pol.append(QPointF(-5 * factor * pixel_ratio, 6 * factor * pixel_ratio)); + pol.append(QPointF(5 * factor * pixel_ratio, 6 * factor * pixel_ratio)); } else { - pol.append(QPointF(0,6 * factor)); - pol.append(QPointF(-5 * factor, 0)); - pol.append(QPointF(5 * factor, 0)); + pol.append(QPointF(0,6 * factor * pixel_ratio)); + pol.append(QPointF(-5 * factor * pixel_ratio, 0)); + pol.append(QPointF(5 * factor * pixel_ratio, 0)); } QLinearGradient grad(QPointF(0,0),QPointF(0,1)); diff --git a/libobjrenderer/src/graphicalview.cpp b/libobjrenderer/src/graphicalview.cpp index d1dccd5841..8967980536 100644 --- a/libobjrenderer/src/graphicalview.cpp +++ b/libobjrenderer/src/graphicalview.cpp @@ -58,8 +58,7 @@ void GraphicalView::configureObject(void) count=count1=view->getReferenceCount(Reference::SQL_VIEW_DEFINITION); //Moves the references group to the origin to be moved latter - columns->moveBy(-columns->scenePos().x(), - -columns->scenePos().y()); + columns->moveBy(-columns->scenePos().x(), -columns->scenePos().y()); subitems=columns->childItems(); diff --git a/libobjrenderer/src/relationshipview.cpp b/libobjrenderer/src/relationshipview.cpp index 56f02bc645..6c0e7fa7a7 100644 --- a/libobjrenderer/src/relationshipview.cpp +++ b/libobjrenderer/src/relationshipview.cpp @@ -1750,7 +1750,7 @@ void RelationshipView::configureAttributes(void) attrib->setPos(px, py); - text->setText(col->getName()); + text->setText(compact_view && !col->getAlias().isEmpty() ? col->getAlias() : col->getName()); text->setPos(QPointF(desc->pos().x() + desc->boundingRect().width() + (HORIZ_SPACING * factor), 0)); desc->setPos(0, VERT_SPACING * factor); @@ -1803,6 +1803,22 @@ void RelationshipView::configureLabels(void) labels[BaseRelationship::REL_NAME_LABEL]->setVisible(!hide_name_label); configureLabelPosition(BaseRelationship::REL_NAME_LABEL, x, y); + if(!hide_name_label) + { + Textbox *txtbox = dynamic_cast(labels[BaseRelationship::REL_NAME_LABEL]->getSourceObject()); + + if(compact_view && !base_rel->getAlias().isEmpty()) + { + txtbox->setComment(base_rel->getAlias()); + txtbox->setModified(true); + } + else if(txtbox->getComment() != base_rel->getName(true)) + { + txtbox->setComment(base_rel->getName(true)); + txtbox->setModified(true); + } + } + //Hides the cardinality labels when crow's feet is enabled if(labels[BaseRelationship::SRC_CARD_LABEL] && labels[BaseRelationship::DST_CARD_LABEL]) { diff --git a/libobjrenderer/src/schemaview.cpp b/libobjrenderer/src/schemaview.cpp index cc065fcc35..5f848d39f2 100644 --- a/libobjrenderer/src/schemaview.cpp +++ b/libobjrenderer/src/schemaview.cpp @@ -200,7 +200,7 @@ void SchemaView::configureObject(void) } //Configures the schema name at the top - sch_name->setText(schema->getName()); + sch_name->setText(compact_view && !schema->getAlias().isEmpty() ? schema->getAlias() : schema->getName()); font=BaseObjectView::getFontStyle(ParsersAttributes::GLOBAL).font(); font.setItalic(true); font.setBold(true); diff --git a/libobjrenderer/src/tableobjectview.cpp b/libobjrenderer/src/tableobjectview.cpp index 383a499a82..6707201ed2 100644 --- a/libobjrenderer/src/tableobjectview.cpp +++ b/libobjrenderer/src/tableobjectview.cpp @@ -150,8 +150,7 @@ void TableObjectView::configureDescriptor(ConstraintType constr_type) desc->setPen(pen); } } - else if(obj_type==OBJ_INDEX || obj_type==OBJ_RULE || - obj_type==OBJ_TRIGGER || obj_type==OBJ_CONSTRAINT) + else if(obj_type != BASE_OBJECT) { TableObject *tab_obj=dynamic_cast(this->getSourceObject()); QGraphicsPolygonItem *desc=dynamic_cast(descriptor); @@ -176,8 +175,7 @@ void TableObjectView::configureDescriptor(ConstraintType constr_type) { QGraphicsEllipseItem *desc=dynamic_cast(descriptor); - desc->setRect(QRectF(QPointF(0,0), - QSizeF(9.0f * factor, 9.0f * factor))); + desc->setRect(QRectF(QPointF(0,0), QSizeF(9.0f * factor, 9.0f * factor))); desc->setBrush(this->getFillStyle(ParsersAttributes::REFERENCE)); pen = this->getBorderStyle(ParsersAttributes::REFERENCE); @@ -266,8 +264,7 @@ void TableObjectView::configureObject(void) px=descriptor->pos().x() + descriptor->boundingRect().width() + (2 * HORIZ_SPACING); //Configuring the labels as follow: [object name] [type] [constraints] - //Configuring tha name label - lables[0]->setText(tab_obj->getName()); + lables[0]->setText(compact_view && !tab_obj->getAlias().isEmpty() ? tab_obj->getAlias() : tab_obj->getName()); //Strikeout the column name when its SQL is disabled QFont font=fmt.font(); @@ -281,10 +278,16 @@ void TableObjectView::configureObject(void) //Configuring the type label fmt=font_config[ParsersAttributes::OBJECT_TYPE]; - if(column) - lables[1]->setText(TYPE_SEPARATOR + (*column->getType())); + + if(compact_view) + lables[1]->setText(" "); else - lables[1]->setText(TYPE_SEPARATOR + tab_obj->getSchemaName()); + { + if(column) + lables[1]->setText(TYPE_SEPARATOR + (*column->getType())); + else + lables[1]->setText(TYPE_SEPARATOR + tab_obj->getSchemaName()); + } lables[1]->setFont(fmt.font()); lables[1]->setBrush(fmt.foreground()); @@ -293,7 +296,9 @@ void TableObjectView::configureObject(void) //Configuring the constraints label fmt=font_config[ParsersAttributes::CONSTRAINTS]; - if(column) + if(compact_view) + lables[2]->setText(" "); + else if(column) lables[2]->setText(str_constr); else { @@ -301,6 +306,7 @@ void TableObjectView::configureObject(void) Trigger *trigger=dynamic_cast(tab_obj); Index *index=dynamic_cast(tab_obj); Constraint *constr=dynamic_cast(tab_obj); + Policy *policy = dynamic_cast(tab_obj); if(rule) { @@ -368,6 +374,27 @@ void TableObjectView::configureObject(void) str_constr = TXT_UNIQUE; else if(type == ConstraintType::exclude) str_constr = TXT_EXCLUDE; + else if(type == ConstraintType::check) + str_constr = TXT_CHECK; + + atribs_tip = (~type).toLower(); + } + else if(policy) + { + if(policy->isPermissive()) + { + str_constr += QString("p"); + atribs_tip += QString("permissive"); + } + else + { + str_constr += QString("r"); + atribs_tip += QString("restrictive"); + } + + atribs_tip += QString(", "); + str_constr += (~policy->getPolicyCommand()).toLower().at(0); + atribs_tip += (~policy->getPolicyCommand()).toLower(); } if(!str_constr.isEmpty()) @@ -417,17 +444,27 @@ void TableObjectView::configureObject(Reference reference) { //Configures the name label as: [table].[column] fmt=font_config[ParsersAttributes::REF_TABLE]; - lables[0]->setText(reference.getTable()->getName() + "."); + + if(compact_view && !reference.getReferenceAlias().isEmpty()) + lables[0]->setText(reference.getReferenceAlias()); + else + lables[0]->setText(reference.getTable()->getName() + "."); + lables[0]->setFont(fmt.font()); lables[0]->setBrush(fmt.foreground()); lables[0]->setPos(px, 0); px+=lables[0]->boundingRect().width(); fmt=font_config[ParsersAttributes::REF_COLUMN]; - if(reference.getColumn()) - lables[1]->setText(reference.getColumn()->getName()); + if(compact_view && !reference.getReferenceAlias().isEmpty()) + lables[1]->setText(QString(" ")); else - lables[1]->setText("*"); + { + if(reference.getColumn()) + lables[1]->setText(reference.getColumn()->getName()); + else + lables[1]->setText("*"); + } lables[1]->setFont(fmt.font()); lables[1]->setBrush(fmt.foreground()); @@ -437,10 +474,14 @@ void TableObjectView::configureObject(Reference reference) else { fmt=font_config[ParsersAttributes::REF_TABLE]; + str_aux = compact_view && !reference.getReferenceAlias().isEmpty() ? reference.getReferenceAlias() : QString(); - str_aux=reference.getExpression().simplified().mid(0,25); - if(reference.getExpression().size() > 25) str_aux+=QString("..."); - str_aux.replace(QString("\n"), QString(" ")); + if(str_aux.isEmpty()) + { + str_aux=reference.getExpression().simplified().mid(0,25); + if(reference.getExpression().size() > 25) str_aux+=QString("..."); + str_aux.replace(QString("\n"), QString(" ")); + } lables[0]->setText(str_aux); lables[0]->setFont(fmt.font()); @@ -451,8 +492,9 @@ void TableObjectView::configureObject(Reference reference) } //Configures a label for the alias (if there is one) - if((reference.getColumn() && !reference.getColumnAlias().isEmpty()) || - (!reference.getAlias().isEmpty() && reference.getReferenceType()==Reference::REFER_EXPRESSION)) + if(!compact_view && + ((reference.getColumn() && !reference.getColumnAlias().isEmpty()) || + (!reference.getAlias().isEmpty() && reference.getReferenceType()==Reference::REFER_EXPRESSION))) { if(reference.getReferenceType()==Reference::REFER_EXPRESSION) str_aux=reference.getAlias(); @@ -466,6 +508,8 @@ void TableObjectView::configureObject(Reference reference) lables[2]->setBrush(fmt.foreground()); lables[2]->setPos(px, 0); } + else + lables[2]->setText(QString()); descriptor->setPos(HORIZ_SPACING, lables[0]->boundingRect().center().y() - descriptor->boundingRect().center().y()); bounding_rect.setTopLeft(QPointF(descriptor->pos().x(), lables[0]->pos().y())); diff --git a/libobjrenderer/src/tabletitleview.cpp b/libobjrenderer/src/tabletitleview.cpp index ed7e1c71dc..8f3fb818bc 100644 --- a/libobjrenderer/src/tabletitleview.cpp +++ b/libobjrenderer/src/tabletitleview.cpp @@ -89,13 +89,18 @@ void TableTitleView::configureObject(BaseGraphicObject *object) if(schema->isRectVisible()) schema_name->setText(QString(" ")); else - schema_name->setText(schema->getName() + QString(".")); + { + if(compact_view && !schema->getAlias().isEmpty()) + schema_name->setText(schema->getAlias() + QString(".")); + else + schema_name->setText(schema->getName() + QString(".")); + } fmt=font_config[name_attrib]; font=fmt.font(); obj_name->setFont(font); - obj_name->setText(object->getName()); + obj_name->setText(compact_view && !object->getAlias().isEmpty() ? object->getAlias() : object->getName()); if(!tag) { diff --git a/libobjrenderer/src/tableview.cpp b/libobjrenderer/src/tableview.cpp index 8385f31e29..842b8941fd 100644 --- a/libobjrenderer/src/tableview.cpp +++ b/libobjrenderer/src/tableview.cpp @@ -69,6 +69,9 @@ void TableView::configureObject(void) tab_objs.insert(tab_objs.end(), table->getObjectList(OBJ_RULE)->begin(), table->getObjectList(OBJ_RULE)->end()); + tab_objs.insert(tab_objs.end(), + table->getObjectList(OBJ_POLICY)->begin(), + table->getObjectList(OBJ_POLICY)->end()); } //Gets the subitems of the current group diff --git a/libparsers/src/parsersattributes.cpp b/libparsers/src/parsersattributes.cpp index dd0f7709ba..f915eb061e 100644 --- a/libparsers/src/parsersattributes.cpp +++ b/libparsers/src/parsersattributes.cpp @@ -33,6 +33,7 @@ namespace ParsersAttributes { ALTER_CMDS=QString("alter-cmds"), ALLOW_CONNS=QString("allow-conns"), ANALYZE_FUNC=QString("analyze"), + ANALYZE_COUNT=QString("analyze-count"), ANCESTOR_TABLE=QString("ancestor-table"), APPEND_AT_EOD=QString("append-at-eod"), APPENDED_SQL=QString("appended-sql"), @@ -47,6 +48,8 @@ namespace ParsersAttributes { ASC_ORDER=QString("asc-order"), ASSIGNMENT=QString("assignment"), ATTRIBUTE=QString("attribute"), + AUTOVACUUM_COUNT=QString("autovacuum-count"), + AUTOANALYZE_COUNT=QString("autoanalyze-count"), AUTO_BROWSE_DB=QString("auto-browse-db"), AUTOSAVE_INTERVAL=QString("autosave-interval"), BACKGROUND_COLOR=QString("background-color"), @@ -92,6 +95,7 @@ namespace ParsersAttributes { COMMENT=QString("comment"), COMMUTATOR_OP=QString("commutator-op"), COMPARISON_TYPE=QString("comparison-type"), + COMPACT_VIEW=QString("compact-view"), COMPLETION_TRIGGER=QString("completion-trigger"), COMPOSITE_TYPE=QString("composite"), CONCURRENT=QString("concurrent"), @@ -124,6 +128,7 @@ namespace ParsersAttributes { CROWS_FOOT=QString("crows-foot"), CTE_EXPRESSION=QString("cte-exp"), CUR_VERSION=QString("cur-version"), + CUR_IDENTITY_TYPE=QString("cur-identity-type"), CUSTOM_COLOR=QString("custom-color"), CUSTOM_FILTER=QString("custom-filter"), CUSTOMIDXS=QString("customidxs"), @@ -226,6 +231,7 @@ namespace ParsersAttributes { HAS_CHANGES=QString("has-changes"), HASHES=QString("hashes"), HBA_FILE=QString("hba-file"), + HEIGHT=QString("height"), HIDE_EXT_ATTRIBS=QString("hide-ext-attribs"), HIDE_REL_NAME=QString("hide-rel-name"), HIDE_TABLE_TAGS=QString("hide-table-tags"), @@ -245,6 +251,8 @@ namespace ParsersAttributes { INDEX_TYPE=QString("index-type"), INDEX=QString("index"), INDEXES=QString("indexes"), + INDEX_SCAN=QString("index-scan"), + INDEX_SCAN_READ=QString("index-scan-read"), INFO=QString("info"), INH_COLUMN=QString("inh-column"), INH_COLUMNS=QString("inh-columns"), @@ -272,6 +280,9 @@ namespace ParsersAttributes { LAST_SYS_OID=QString("last-sys-oid"), LAST_VALUE=QString("last-value"), LAST_ZOOM=QString("last-zoom"), + LAST_ANALYZE=QString("last-analyze"), + LAST_AUTOVACUUM=QString("last-autovacuum"), + LAST_VACUUM=QString("last-vacuum"), LEAKPROOF=QString("leakproof"), LEFT_TYPE=QString("left-type"), LEFT=QString("left"), @@ -291,7 +302,7 @@ namespace ParsersAttributes { MATERIALIZED=QString("materialized"), MAX_CONNECTIONS=QString("max-connections"), MAX_VALUE=QString("max-value"), - MAX_RESULT_ROWS=QString("max-result-rows"), + MAXIMIZED=QString("maximized"), MEMBER_ROLES=QString("member-roles"), MEMBER=QString("member"), MERGES=QString("merges"), @@ -388,6 +399,7 @@ namespace ParsersAttributes { RECURSIVE=QString("recursive"), RECV_FUNC=QString("receive"), REDUCED_FORM=QString("reduced-form"), + REF_ALIAS=QString("ref-alias"), REF_COLUMN=QString("ref-column"), REF_ROLES=QString("ref-roles"), REF_TABLE=QString("ref-table"), @@ -410,6 +422,7 @@ namespace ParsersAttributes { RENAME=QString("rename"), REPLICATION=QString("replication"), RESTRICTION_FUNC=QString("restriction"), + RESTART_SEQ=QString("restart-seq"), RETURN_TABLE=QString("return-table"), RETURN_TYPE=QString("return-type"), RETURNS_SETOF=QString("returns-setof"), @@ -427,6 +440,7 @@ namespace ParsersAttributes { ROW_AMOUNT=QString("row-amount"), RULES=QString("rules"), SAVE_LAST_POSITION=QString("save-last-position"), + SAVE_RESTORE_GEOMETRY=QString("save-restore-geometry"), SCHEMA=QString("schema"), SEARCH_PATH=QString("search-path"), SECURITY_TYPE=QString("security-type"), @@ -435,6 +449,8 @@ namespace ParsersAttributes { SELECT_OBJECTS=QString("select-objects"), SEND_FUNC=QString("send"), SEQUENCE=QString("sequence"), + SEQ_SCAN=QString("seq-scan"), + SEQ_SCAN_READ=QString("seq-scan-read"), SERVER_ENCODING=QString("server-encoding"), SERVER_VERSION=QString("server-version"), SERVER_PID=QString("server-pid"), @@ -512,6 +528,9 @@ namespace ParsersAttributes { TRUNCATE_PRIV=QString("truncate"), TRUNCATE=QString("truncate"), TRUSTED=QString("trusted"), + TUPLES_DEL=QString("tuples-del"), + TUPLES_UPD=QString("tuples-upd"), + TUPLES_INS=QString("tuples-ins"), TYPE_ATTRIBUTE=QString("typeattrib"), TYPE_OID=QString("type-oid"), TYPE=QString("type"), @@ -535,6 +554,7 @@ namespace ParsersAttributes { USE_SORTING=QString("use-sorting"), USE_UNIQUE_NAMES=QString("use-unique-names"), USING_EXP=QString("using-exp"), + VACUUM_COUNT=QString("vacuum-count"), VALIDATOR_FUNC=QString("validator"), VALIDATOR=QString("validator"), VALIDITY=QString("validity"), @@ -550,6 +570,8 @@ namespace ParsersAttributes { VIEW_TITLE=QString("view-title"), VISIBLE=QString("visible"), WIDGET=QString("widget"), + WIDGETS_GEOMETRY=QString("widgets-geometry"), + WIDTH=QString("width"), WILDCARD=QString("wildcard"), WINDOW_FUNC=QString("window-func"), WITH_NO_DATA=QString("with-no-data"), @@ -559,6 +581,6 @@ namespace ParsersAttributes { WORD_SEPARATORS=QString("word-separators"), WORKING_DIR=QString("working-dir"), X_POS=QString("x"), - Y_POS=QString("y"); + Y_POS=QString("y"); } diff --git a/libparsers/src/parsersattributes.h b/libparsers/src/parsersattributes.h index d06ce98284..84b54017bc 100644 --- a/libparsers/src/parsersattributes.h +++ b/libparsers/src/parsersattributes.h @@ -107,6 +107,7 @@ namespace ParsersAttributes { COMMENT, COMMUTATOR_OP, COMPARISON_TYPE, + COMPACT_VIEW, COMPLETION_TRIGGER, COMPOSITE_TYPE, CONCURRENT, @@ -139,6 +140,7 @@ namespace ParsersAttributes { CROWS_FOOT, CTE_EXPRESSION, CUR_VERSION, + CUR_IDENTITY_TYPE, CUSTOM_COLOR, CUSTOM_FILTER, CUSTOMIDXS, @@ -241,6 +243,7 @@ namespace ParsersAttributes { HAS_CHANGES, HASHES, HBA_FILE, + HEIGHT, HIDE_EXT_ATTRIBS, HIDE_REL_NAME, HIDE_TABLE_TAGS, @@ -306,7 +309,7 @@ namespace ParsersAttributes { MATERIALIZED, MAX_CONNECTIONS, MAX_VALUE, - MAX_RESULT_ROWS, + MAXIMIZED, MEMBER_ROLES, MEMBER, MERGES, @@ -403,6 +406,7 @@ namespace ParsersAttributes { RECURSIVE, RECV_FUNC, REDUCED_FORM, + REF_ALIAS, REF_COLUMN, REF_ROLES, REF_TABLE, @@ -424,6 +428,7 @@ namespace ParsersAttributes { RELATIONSHIP, RENAME, REPLICATION, + RESTART_SEQ, RESTRICTION_FUNC, RETURN_TABLE, RETURN_TYPE, @@ -439,6 +444,7 @@ namespace ParsersAttributes { ROW_AMOUNT, RULES, SAVE_LAST_POSITION, + SAVE_RESTORE_GEOMETRY, SCHEMA, SEARCH_PATH, SECURITY_TYPE, @@ -562,6 +568,8 @@ namespace ParsersAttributes { VIEW_TITLE, VISIBLE, WIDGET, + WIDGETS_GEOMETRY, + WIDTH, WILDCARD, WINDOW_FUNC, WITH_NO_DATA, @@ -571,7 +579,22 @@ namespace ParsersAttributes { WORD_SEPARATORS, WORKING_DIR, X_POS, - Y_POS; + Y_POS, + INDEX_SCAN, + INDEX_SCAN_READ, + LAST_ANALYZE, + LAST_AUTOVACUUM, + LAST_VACUUM, + TUPLES_DEL, + TUPLES_UPD, + TUPLES_INS, + SEQ_SCAN, + SEQ_SCAN_READ, + VACUUM_COUNT, + AUTOVACUUM_COUNT, + ANALYZE_COUNT, + AUTOANALYZE_COUNT + ; } #endif diff --git a/libpgconnector/src/connection.cpp b/libpgconnector/src/connection.cpp index c284c83acc..95be646e81 100644 --- a/libpgconnector/src/connection.cpp +++ b/libpgconnector/src/connection.cpp @@ -519,3 +519,10 @@ void Connection::operator = (const Connection &conn) default_for_oper[idx]=conn.default_for_oper[idx]; } +void Connection::requestCancel(void) +{ + if(!connection) + throw Exception(ERR_OPR_NOT_ALOC_CONN, __PRETTY_FUNCTION__, __FILE__, __LINE__); + + PQrequestCancel(connection); +} diff --git a/libpgconnector/src/connection.h b/libpgconnector/src/connection.h index 40016e2359..c064f7b35f 100644 --- a/libpgconnector/src/connection.h +++ b/libpgconnector/src/connection.h @@ -168,7 +168,7 @@ class Connection { //! \brief Set if the database configured on the connection is auto browseable when using the SQLTool manage database void setAutoBrowseDB(bool value); - //! \brief Open the connection to the database + //! \brief Open the connection to the database. void connect(void); //! \brief Resets the database connection @@ -177,6 +177,9 @@ class Connection { //! \brief Close the opened connection void close(void); + //! \brief Request the cancel of the running command on a opened connection + void requestCancel(void); + //! \brief Returns the value of specified parameter name QString getConnectionParam(const QString ¶m); diff --git a/libpgconnector/src/resultset.cpp b/libpgconnector/src/resultset.cpp index 81dac934cc..4d19bbf1f6 100644 --- a/libpgconnector/src/resultset.cpp +++ b/libpgconnector/src/resultset.cpp @@ -55,10 +55,11 @@ ResultSet::ResultSet(PGresult *sql_result) //In case of sucess states the result will be created case PGRES_COMMAND_OK: case PGRES_TUPLES_OK: + case PGRES_SINGLE_TUPLE: case PGRES_COPY_OUT: case PGRES_COPY_IN: default: - empty_result=(res_state!=PGRES_TUPLES_OK && res_state!=PGRES_EMPTY_QUERY); + empty_result=(res_state!=PGRES_TUPLES_OK && res_state!=PGRES_SINGLE_TUPLE && res_state!=PGRES_EMPTY_QUERY); current_tuple=-1; is_res_copied=false; break; @@ -67,10 +68,10 @@ ResultSet::ResultSet(PGresult *sql_result) ResultSet::~ResultSet(void) { - destroyResultSet(); + clearResultSet(); } -void ResultSet::destroyResultSet(void) +void ResultSet::clearResultSet(void) { /* Destroy the resultset of the object if it was not copied to another class instance (see 'operator =') */ @@ -316,6 +317,11 @@ bool ResultSet::isEmpty(void) return(empty_result); } +bool ResultSet::isValid(void) +{ + return(sql_result != nullptr); +} + void ResultSet::operator = (ResultSet &res) { /* Mark the result parameter as copied, avoiding @@ -324,7 +330,7 @@ void ResultSet::operator = (ResultSet &res) /* If the resultset 'this' is allocated, it will be deallocated to avoid memory leaks */ - destroyResultSet(); + clearResultSet(); //Copy the parameter restulset attributes to 'this' resultset this->current_tuple=res.current_tuple; diff --git a/libpgconnector/src/resultset.h b/libpgconnector/src/resultset.h index d07ad541ec..82962e2c56 100644 --- a/libpgconnector/src/resultset.h +++ b/libpgconnector/src/resultset.h @@ -46,8 +46,6 @@ class ResultSet { when this flag is marked as false */ bool is_res_copied; - void destroyResultSet(void); - void validateColumnIndex(int column_idx); int validateColumnName(const QString &column_name); @@ -122,6 +120,11 @@ class ResultSet { //! \brief Returns if the result set is empty due a DML command that does not returned any data bool isEmpty(void); + //! \brief Returns if the result set is valid (created from a valid result set) + bool isValid(void); + + void clearResultSet(void); + //! \brief Make a copy between two resultsets void operator = (ResultSet &res); diff --git a/libpgmodeler/src/baseobject.cpp b/libpgmodeler/src/baseobject.cpp index 62b1aa10de..5ae0e34bc4 100644 --- a/libpgmodeler/src/baseobject.cpp +++ b/libpgmodeler/src/baseobject.cpp @@ -83,6 +83,7 @@ BaseObject::BaseObject(void) database=nullptr; collation=nullptr; attributes[ParsersAttributes::NAME]=QString(); + attributes[ParsersAttributes::ALIAS]=QString(); attributes[ParsersAttributes::COMMENT]=QString(); attributes[ParsersAttributes::OWNER]=QString(); attributes[ParsersAttributes::TABLESPACE]=QString(); @@ -360,6 +361,15 @@ void BaseObject::setName(const QString &name) this->obj_name=aux_name; } +void BaseObject::setAlias(const QString &alias) +{ + if(alias.size() > OBJECT_NAME_MAX_LENGTH) + throw Exception(ERR_ASG_LONG_NAME_OBJECT,__PRETTY_FUNCTION__,__FILE__,__LINE__); + + this->alias = alias; + setCodeInvalidated(this->alias != alias); +} + void BaseObject::setComment(const QString &comment) { setCodeInvalidated(this->comment!=comment); @@ -449,10 +459,19 @@ bool BaseObject::acceptsAlterCommand(ObjectType obj_type) bool BaseObject::acceptsDropCommand(ObjectType obj_type) { return(obj_type!=OBJ_PERMISSION && obj_type!=OBJ_RELATIONSHIP && - obj_type!=OBJ_TEXTBOX && obj_type!=OBJ_TYPE_ATTRIBUTE && - obj_type!=OBJ_PARAMETER && obj_type!=BASE_OBJECT && - obj_type!=OBJ_TAG && obj_type!=BASE_RELATIONSHIP && - obj_type!=BASE_TABLE); + obj_type!=OBJ_TEXTBOX && obj_type!=OBJ_TYPE_ATTRIBUTE && + obj_type!=OBJ_PARAMETER && obj_type!=BASE_OBJECT && + obj_type!=OBJ_TAG && obj_type!=BASE_RELATIONSHIP && + obj_type!=BASE_TABLE); +} + +bool BaseObject::acceptsAlias(ObjectType obj_type) +{ + return(obj_type==OBJ_RELATIONSHIP || obj_type==BASE_RELATIONSHIP || + obj_type==OBJ_TABLE || obj_type==OBJ_SCHEMA || obj_type==OBJ_VIEW || + obj_type == OBJ_COLUMN || obj_type == OBJ_CONSTRAINT || + obj_type == OBJ_INDEX || obj_type == OBJ_RULE || + obj_type == OBJ_TRIGGER || obj_type == OBJ_POLICY); } bool BaseObject::acceptsCustomSQL(void) @@ -556,6 +575,11 @@ QString BaseObject::getName(bool format, bool prepend_schema) return(this->obj_name); } +QString BaseObject::getAlias(void) +{ + return(this->alias); +} + QString BaseObject::getSignature(bool format) { return(this->getName(format, true)); @@ -653,6 +677,9 @@ void BaseObject::setBasicAttributes(bool format_name) if(attributes[ParsersAttributes::NAME].isEmpty()) attributes[ParsersAttributes::NAME]=this->getName(format_name); + if(attributes[ParsersAttributes::ALIAS].isEmpty()) + attributes[ParsersAttributes::ALIAS]=this->getAlias(); + if(attributes[ParsersAttributes::SIGNATURE].isEmpty()) attributes[ParsersAttributes::SIGNATURE]=this->getSignature(format_name); @@ -975,6 +1002,7 @@ void BaseObject::operator = (BaseObject &obj) this->database=obj.database; this->comment=obj.comment; this->obj_name=obj.obj_name; + this->alias=obj.alias; this->obj_type=obj.obj_type; this->is_protected=obj.is_protected; this->sql_disabled=obj.sql_disabled; diff --git a/libpgmodeler/src/baseobject.h b/libpgmodeler/src/baseobject.h index 910fcde30e..4d79416824 100644 --- a/libpgmodeler/src/baseobject.h +++ b/libpgmodeler/src/baseobject.h @@ -164,9 +164,13 @@ class BaseObject { //! \brief Comments related to object QString comment, + //! \brief Object's name (in PostgreSQL accepted format) obj_name, + //! \brief Object's alias (human readable / friendly) name + alias, + //! \brief The set of SQL commands appended on the objectc's definition appended_sql, @@ -277,6 +281,11 @@ class BaseObject { //! \brief Defines the objects name. If the passed name isn't valid it'll raise an error virtual void setName(const QString &name); + /*! \brief Defines the object's alias (human readable / friendly name). An alias is used when the database model is being + * displayed in compact view. This method raises an error when the provided name is larger than 63 bytes + * (the same rule for PostgreSQL names length) */ + virtual void setAlias(const QString &alias); + //! \brief Toggles the object's modify protection virtual void setProtected(bool value); @@ -319,6 +328,9 @@ class BaseObject { the parameter 'prepend_schema' includes the schema name on the objects name (defult) */ virtual QString getName(bool format=false, bool prepend_schema=true); + //! \brief Returns the object's alias (user friendly) name + virtual QString getAlias(void); + //! \brief Returns the name of the object with schema name (when available) prepended by default virtual QString getSignature(bool format=true); @@ -407,6 +419,9 @@ class BaseObject { //! \brief Returns if the specified type accepts the use of DROP commands static bool acceptsDropCommand(ObjectType obj_type); + //! \brief Returns if the specified type accepts an alias (friendly name) + static bool acceptsAlias(ObjectType obj_type); + //! \brief Returns if the object accepts to have a schema assigned bool acceptsSchema(void); diff --git a/libpgmodeler/src/baserelationship.cpp b/libpgmodeler/src/baserelationship.cpp index 45d88161f0..325df69657 100644 --- a/libpgmodeler/src/baserelationship.cpp +++ b/libpgmodeler/src/baserelationship.cpp @@ -263,17 +263,20 @@ void BaseRelationship::setConnected(bool value) { connected=value; - src_table->setModified(true); + if(!this->signalsBlocked()) + { + src_table->setModified(true); - if(dst_table!=src_table) - dst_table->setModified(true); + if(dst_table!=src_table) + dst_table->setModified(true); - dynamic_cast(src_table->getSchema())->setModified(true); + dynamic_cast(src_table->getSchema())->setModified(true); - if(dst_table->getSchema()!=src_table->getSchema()) - dynamic_cast(dst_table->getSchema())->setModified(true); + if(dst_table->getSchema()!=src_table->getSchema()) + dynamic_cast(dst_table->getSchema())->setModified(true); - this->setModified(true); + this->setModified(true); + } } void BaseRelationship::disconnectRelationship(void) diff --git a/libpgmodeler/src/column.cpp b/libpgmodeler/src/column.cpp index dc2a7defe2..59a33d92e7 100644 --- a/libpgmodeler/src/column.cpp +++ b/libpgmodeler/src/column.cpp @@ -21,7 +21,7 @@ Column::Column(void) { obj_type=OBJ_COLUMN; - not_null=false; + not_null=seq_cycle=false; attributes[ParsersAttributes::TYPE]=QString(); attributes[ParsersAttributes::DEFAULT_VALUE]=QString(); attributes[ParsersAttributes::NOT_NULL]=QString(); @@ -29,6 +29,13 @@ Column::Column(void) attributes[ParsersAttributes::SEQUENCE]=QString(); attributes[ParsersAttributes::DECL_IN_TABLE]=QString(); attributes[ParsersAttributes::IDENTITY_TYPE]=QString(); + attributes[ParsersAttributes::INCREMENT]=QString(); + attributes[ParsersAttributes::MIN_VALUE]=QString(); + attributes[ParsersAttributes::MAX_VALUE]=QString(); + attributes[ParsersAttributes::START]=QString(); + attributes[ParsersAttributes::CACHE]=QString(); + attributes[ParsersAttributes::CYCLE]=QString(); + parent_rel=sequence=nullptr; identity_type=BaseType::null; } @@ -185,6 +192,46 @@ BaseObject *Column::getSequence(void) return(sequence); } +bool Column::isIdSeqCycle(void) +{ + return(seq_cycle); +} + +QString Column::getIdSeqMaxValue(void) +{ + return(seq_max_value); +} + +QString Column::getIdSeqMinValue(void) +{ + return(seq_min_value); +} + +QString Column::getIdSeqIncrement(void) +{ + return(seq_increment); +} + +QString Column::getIdSeqStart(void) +{ + return(seq_start); +} + +QString Column::getIdSeqCache(void) +{ + return(seq_cache); +} + +void Column::setIdSeqAttributes(QString minv, QString maxv, QString inc, QString start, QString cache, bool cycle) +{ + seq_min_value = minv; + seq_max_value = maxv; + seq_increment = inc; + seq_start = start; + seq_cache = cache; + seq_cycle = cycle; +} + QString Column::getCodeDefinition(unsigned def_type) { QString code_def=getCachedCode(def_type, false); @@ -198,7 +245,15 @@ QString Column::getCodeDefinition(unsigned def_type) attributes[ParsersAttributes::IDENTITY_TYPE]=QString(); if(identity_type != BaseType::null) - attributes[ParsersAttributes::IDENTITY_TYPE] = ~identity_type; + { + attributes[ParsersAttributes::IDENTITY_TYPE] = ~identity_type; + attributes[ParsersAttributes::INCREMENT]=seq_increment; + attributes[ParsersAttributes::MIN_VALUE]=seq_min_value; + attributes[ParsersAttributes::MAX_VALUE]=seq_max_value; + attributes[ParsersAttributes::START]=seq_start; + attributes[ParsersAttributes::CACHE]=seq_cache; + attributes[ParsersAttributes::CYCLE]=(seq_cycle ? ParsersAttributes::_TRUE_ : QString()); + } else { if(!sequence) @@ -207,7 +262,7 @@ QString Column::getCodeDefinition(unsigned def_type) { //Configuring the default value of the column to get the next value of the sequence if(def_type==SchemaParser::SQL_DEFINITION) - attributes[ParsersAttributes::DEFAULT_VALUE]=QString("nextval('%1'::regclass)").arg(sequence->getSignature());//.remove("\"")); + attributes[ParsersAttributes::DEFAULT_VALUE]=QString("nextval('%1'::regclass)").arg(sequence->getSignature()); attributes[ParsersAttributes::SEQUENCE]=sequence->getName(true); } @@ -230,6 +285,7 @@ QString Column::getAlterDefinition(BaseObject *object) { attribs_map attribs; QString def_val; + bool ident_seq_changed = false; BaseObject::setBasicAttributes(true); @@ -263,6 +319,57 @@ QString Column::getAlterDefinition(BaseObject *object) this->identity_type != col->identity_type) attribs[ParsersAttributes::NEW_IDENTITY_TYPE] = ~col->identity_type; + attribs[ParsersAttributes::CUR_IDENTITY_TYPE] = QString(); + attribs[ParsersAttributes::MIN_VALUE] = QString(); + attribs[ParsersAttributes::MAX_VALUE] = QString(); + attribs[ParsersAttributes::START] = QString(); + attribs[ParsersAttributes::INCREMENT] = QString(); + attribs[ParsersAttributes::CACHE] = QString(); + attribs[ParsersAttributes::CYCLE] = QString(); + + //Checking differences in the underlying sequence (identity col) + if(attribs[ParsersAttributes::IDENTITY_TYPE] != ParsersAttributes::UNSET) + { + if(!col->seq_min_value.isEmpty() && this->seq_min_value != col->seq_min_value) + { + attribs[ParsersAttributes::MIN_VALUE] = col->seq_min_value; + ident_seq_changed = true; + } + + if(!col->seq_max_value.isEmpty() && this->seq_max_value != col->seq_max_value) + { + attribs[ParsersAttributes::MAX_VALUE] = col->seq_max_value; + ident_seq_changed = true; + } + + if(!col->seq_start.isEmpty() && this->seq_start != col->seq_start) + { + attribs[ParsersAttributes::START] = col->seq_start; + ident_seq_changed = true; + } + + if(!col->seq_increment.isEmpty() && this->seq_increment != col->seq_increment) + { + attribs[ParsersAttributes::INCREMENT] = col->seq_increment; + ident_seq_changed = true; + } + + if(!col->seq_cache.isEmpty() && this->seq_cache != col->seq_cache) + { + attribs[ParsersAttributes::CACHE] = col->seq_cache; + ident_seq_changed = true; + } + + if(this->seq_cycle != col->seq_cycle) + { + attribs[ParsersAttributes::CYCLE] = (col->seq_cycle ? ParsersAttributes::_TRUE_ : ParsersAttributes::_FALSE_); + ident_seq_changed = true; + } + + if(ident_seq_changed) + attribs[ParsersAttributes::CUR_IDENTITY_TYPE] = ~this->identity_type; + } + copyAttributes(attribs); return(BaseObject::getAlterDefinition(this->getSchemaName(), attributes, false, true)); } @@ -278,6 +385,7 @@ void Column::operator = (Column &col) this->is_protected=col.is_protected; this->obj_name=col.obj_name; + this->alias=col.alias; this->old_name=col.old_name; this->type=col.type; @@ -288,6 +396,13 @@ void Column::operator = (Column &col) this->sequence=col.sequence; this->identity_type=col.identity_type; + this->seq_cache = col.seq_cache; + this->seq_cycle = col.seq_cycle; + this->seq_increment = col.seq_increment; + this->seq_max_value = col.seq_max_value; + this->seq_min_value = col.seq_min_value; + this->seq_start = col.seq_start; + this->setParentTable(col.getParentTable()); this->setAddedByCopy(false); this->setAddedByGeneralization(false); diff --git a/libpgmodeler/src/column.h b/libpgmodeler/src/column.h index e68e9402a4..6a5fde5bd7 100644 --- a/libpgmodeler/src/column.h +++ b/libpgmodeler/src/column.h @@ -58,6 +58,25 @@ class Column: public TableObject{ //! \brief Identity type of the column (GENERATED BY DEFAULT | ALWAYS) IdentityType identity_type; + /*! \brief Indicates that the underlying sequence is cyclic + (the counter resets when maximum value is reached) (only for identity column) */ + bool seq_cycle; + + //! \brief Underlying sequence's minimum value (only for identity column) + QString seq_min_value, + + //! \brief Underlying sequence's maximum value (only for identity column) + seq_max_value, + + //! \brief Underlying sequence's current sequence value (only for identity column) + seq_start, + + //! \brief Underlying sequence's value increment (only for identity column) + seq_increment, + + //! \brief Underlying sequence's cache value (only for identity column) + seq_cache; + public: Column(void); @@ -116,6 +135,16 @@ class Column: public TableObject{ //! \brief Returns the sequence generator of default value BaseObject *getSequence(void); + //! \brief Sets at once all the necessary fields to define the underlying sequence's attributes + void setIdSeqAttributes(QString minv, QString maxv, QString inc, QString start, QString cache, bool cycle); + + bool isIdSeqCycle(void); + QString getIdSeqMaxValue(void); + QString getIdSeqMinValue(void); + QString getIdSeqIncrement(void); + QString getIdSeqStart(void); + QString getIdSeqCache(void); + //! \brief Copies on column to other void operator = (Column &col); }; diff --git a/libpgmodeler/src/copyoptions.cpp b/libpgmodeler/src/copyoptions.cpp index cfb06271ac..b416c532a9 100644 --- a/libpgmodeler/src/copyoptions.cpp +++ b/libpgmodeler/src/copyoptions.cpp @@ -17,6 +17,7 @@ */ #include "copyoptions.h" +#include "baseobject.h" CopyOptions::CopyOptions(void) { @@ -64,8 +65,8 @@ QString CopyOptions::getSQLDefinition(void) { QString def, mode, op_name; unsigned op_id, - ids[]={ALL, DEFAULTS, CONSTRAINTS, - INDEXES, STORAGE, COMMENTS }, + ids[]={ALL, DEFAULTS, CONSTRAINTS, INDEXES, + STORAGE, COMMENTS, IDENTITY, STATISTICS }, cnt = sizeof(ids) / sizeof(unsigned); mode = (copy_mode == INCLUDING ? QString(" INCLUDING") : QString(" EXCLUDING")); @@ -83,6 +84,8 @@ QString CopyOptions::getSQLDefinition(void) case INDEXES: op_name=QString(" INDEXES"); break; case STORAGE: op_name=QString(" STORAGE"); break; case COMMENTS: op_name=QString(" COMMENTS"); break; + case IDENTITY: op_name=(BaseObject::getPgSQLVersion().toFloat() > PgSQLVersions::PGSQL_VERSION_96.toFloat() ? QString(" IDENTITY") : QString()); break; + case STATISTICS: op_name=(BaseObject::getPgSQLVersion().toFloat() > PgSQLVersions::PGSQL_VERSION_96.toFloat() ? QString(" STATISTICS") : QString()); break; } if(!op_name.isEmpty()) diff --git a/libpgmodeler/src/copyoptions.h b/libpgmodeler/src/copyoptions.h index 16107d8072..82f6ead014 100644 --- a/libpgmodeler/src/copyoptions.h +++ b/libpgmodeler/src/copyoptions.h @@ -38,9 +38,11 @@ class CopyOptions { INDEXES=4, STORAGE=8, COMMENTS=16, - ALL=31, - INCLUDING=64, - EXCLUDING=128; + IDENTITY=32, + STATISTICS=64, + ALL=127, + INCLUDING=256, + EXCLUDING=512; CopyOptions(void); CopyOptions(unsigned copy_mode, unsigned copy_op_ids); diff --git a/libpgmodeler/src/databasemodel.cpp b/libpgmodeler/src/databasemodel.cpp index 201a197e27..f791925c96 100644 --- a/libpgmodeler/src/databasemodel.cpp +++ b/libpgmodeler/src/databasemodel.cpp @@ -520,7 +520,7 @@ void DatabaseModel::__removeObject(BaseObject *object, int obj_idx, bool check_r if(obj_idx >= 0) { - if(Permission::objectAcceptsPermission(obj_type)) + if(Permission::acceptsPermission(obj_type)) removePermissions(object); obj_list->erase(obj_list->begin() + obj_idx); @@ -1045,7 +1045,6 @@ void DatabaseModel::addView(View *view, int obj_idx) try { __addObject(view, obj_idx); - PgSQLType::addUserType(view->getName(true), view, this, UserTypeConfig::VIEW_TYPE); updateViewRelationships(view); @@ -1130,7 +1129,7 @@ void DatabaseModel::updateTableFKRelationships(Table *table) } else { - rel->setModified(true); + rel->setModified(!loading_model); itr1++; idx++; } } @@ -1255,13 +1254,14 @@ void DatabaseModel::updateViewRelationships(View *view, bool force_rel_removal) for(i=0; i < ref_count; i++) { - ref=view->getReference(i, Reference::SQL_REFER_SELECT); - tab=ref.getTable(); + ref = view->getReference(i, Reference::SQL_REFER_SELECT); + tab = ref.getTable(); rel=getRelationship(view,tab); if(tab && !rel) { - rel=new BaseRelationship(BaseRelationship::RELATIONSHIP_DEP,view,tab,false,false); + rel=new BaseRelationship(BaseRelationship::RELATIONSHIP_DEP, view, tab, false, false); + rel->setName(PgModelerNS::generateUniqueName(rel, base_relationships)); addRelationship(rel); } } @@ -1284,6 +1284,7 @@ void DatabaseModel::disconnectRelationships(void) { base_rel=dynamic_cast(*ritr_rel); ritr_rel++; + base_rel->blockSignals(loading_model); if(base_rel->getObjectType()==OBJ_RELATIONSHIP) { @@ -1292,6 +1293,8 @@ void DatabaseModel::disconnectRelationships(void) } else base_rel->disconnectRelationship(); + + base_rel->blockSignals(false); } } catch(Exception &e) @@ -1542,11 +1545,14 @@ void DatabaseModel::validateRelationships(void) //The validation continues until there is some invalid relationship while(found_inval_rel); - //Updates the schemas to ajdust its sizes due to the tables resizings - while(!schemas.empty()) + if(!loading_model) { - schemas.back()->setModified(true); - schemas.pop_back(); + //Updates the schemas to ajdust its sizes due to the tables resizings + while(!schemas.empty()) + { + schemas.back()->setModified(true); + schemas.pop_back(); + } } //Stores the errors related to creation of special objects on the general error vector @@ -1707,7 +1713,7 @@ void DatabaseModel::storeSpecialObjectsXML(void) Reference ref; ObjectType tab_obj_type[3]={ OBJ_CONSTRAINT, OBJ_TRIGGER, OBJ_INDEX }; bool found=false; - vector objects, rem_objects; + vector objects, rem_objects, upd_tables_rels; try { @@ -1765,9 +1771,15 @@ void DatabaseModel::storeSpecialObjectsXML(void) if(found) { + constr = dynamic_cast(tab_obj); + //When found the special object must be removed from the parent table table->removeObject(tab_obj->getName(), tab_obj->getObjectType()); + //We need to store the table which fk was referencing relationship added columns in order to update the fk relationships of that table + if(constr && constr->getConstraintType() == ConstraintType::foreign_key) + upd_tables_rels.push_back(table); + //Removes the permission from the table object removePermissions(tab_obj); @@ -1777,6 +1789,22 @@ void DatabaseModel::storeSpecialObjectsXML(void) } } + //Updating fk rels of tables which had fks referencing relationship added columns + if(!upd_tables_rels.empty()) + { + vector::iterator end; + + if(upd_tables_rels.size() > 1) + { + std::sort(upd_tables_rels.begin(), upd_tables_rels.end()); + end = std::unique(upd_tables_rels.begin(), upd_tables_rels.end()); + upd_tables_rels.erase(end, upd_tables_rels.end()); + } + + for(auto &tab : upd_tables_rels) + updateTableFKRelationships(dynamic_cast(tab)); + } + //Making a copy of the sequences list to avoid iterator invalidation when removing an object rem_objects.assign(sequences.begin(), sequences.end()); itr=rem_objects.begin(); @@ -1942,6 +1970,7 @@ void DatabaseModel::addRelationship(BaseRelationship *rel, int obj_idx) if(rel->getObjectType()==OBJ_RELATIONSHIP) checkRelationshipRedundancy(dynamic_cast(rel)); + rel->blockSignals(loading_model); __addObject(rel, obj_idx); if(rel->getObjectType()==OBJ_RELATIONSHIP) @@ -1951,6 +1980,8 @@ void DatabaseModel::addRelationship(BaseRelationship *rel, int obj_idx) } else rel->connectRelationship(); + + rel->blockSignals(false); } catch(Exception &e) { @@ -1978,7 +2009,9 @@ void DatabaseModel::removeRelationship(BaseRelationship *rel, int obj_idx) } else if(rel->getObjectType()==BASE_RELATIONSHIP) { + rel->blockSignals(loading_model); rel->disconnectRelationship(); + rel->blockSignals(false); } __removeObject(rel, obj_idx); @@ -3057,6 +3090,8 @@ void DatabaseModel::loadModel(const QString &filename) } this->setInvalidated(false); + + emit s_objectLoaded(100, trUtf8("Validating relationships..."), OBJ_RELATIONSHIP); this->setObjectsModified({OBJ_RELATIONSHIP, BASE_RELATIONSHIP}); //Doing another relationship validation when there are inheritances to avoid incomplete tables @@ -3064,6 +3099,7 @@ void DatabaseModel::loadModel(const QString &filename) { emit s_objectLoaded(100, trUtf8("Validating relationships..."), OBJ_RELATIONSHIP); validateRelationships(); + updateTablesFKRelationships(); } } catch(Exception &e) @@ -3172,9 +3208,13 @@ void DatabaseModel::setBasicAttributes(BaseObject *object) xmlparser.getElementAttributes(attribs); obj_type_aux=object->getObjectType(); + if(obj_type_aux!=OBJ_CAST) object->setName(attribs[ParsersAttributes::NAME]); + if(BaseObject::acceptsAlias(obj_type_aux)) + object->setAlias(attribs[ParsersAttributes::ALIAS]); + protected_obj=attribs[ParsersAttributes::PROTECTED]==ParsersAttributes::_TRUE_; sql_disabled=attribs[ParsersAttributes::SQL_DISABLED]==ParsersAttributes::_TRUE_; @@ -4674,6 +4714,8 @@ Column *DatabaseModel::createColumn(void) xmlparser.getElementAttributes(attribs); column->setNotNull(attribs[ParsersAttributes::NOT_NULL]==ParsersAttributes::_TRUE_); column->setDefaultValue(attribs[ParsersAttributes::DEFAULT_VALUE]); + column->setIdSeqAttributes(attribs[ParsersAttributes::MIN_VALUE], attribs[ParsersAttributes::MAX_VALUE], attribs[ParsersAttributes::INCREMENT], + attribs[ParsersAttributes::START], attribs[ParsersAttributes::CACHE], attribs[ParsersAttributes::CYCLE] == ParsersAttributes::_TRUE_); if(!attribs[ParsersAttributes::IDENTITY_TYPE].isEmpty()) column->setIdentityType(IdentityType(attribs[ParsersAttributes::IDENTITY_TYPE])); @@ -5686,6 +5728,7 @@ View *DatabaseModel::createView(void) unsigned type; int ref_idx, i, count; bool refs_in_expr=false; + Reference reference; try { @@ -5751,9 +5794,11 @@ View *DatabaseModel::createView(void) } //Adds the configured reference to a temporarily list - refs.push_back(Reference(table, column, - attribs[ParsersAttributes::ALIAS], - attribs[ParsersAttributes::COLUMN_ALIAS])); + reference = Reference(table, column, + attribs[ParsersAttributes::ALIAS], + attribs[ParsersAttributes::COLUMN_ALIAS]); + reference.setReferenceAlias(attribs[ParsersAttributes::REF_ALIAS]); + refs.push_back(reference); } else { @@ -5762,7 +5807,10 @@ View *DatabaseModel::createView(void) xmlparser.accessElement(XMLParser::CHILD_ELEMENT); xmlparser.accessElement(XMLParser::CHILD_ELEMENT); - refs.push_back(Reference(xmlparser.getElementContent(),str_aux)); + + reference = Reference(xmlparser.getElementContent(),str_aux); + reference.setReferenceAlias(attribs[ParsersAttributes::REF_ALIAS]); + refs.push_back(reference); xmlparser.restorePosition(); } @@ -6089,6 +6137,7 @@ BaseRelationship *DatabaseModel::createRelationship(void) base_rel=new BaseRelationship(BaseRelationship::RELATIONSHIP_FK, tables[0], tables[1], false, false); base_rel->setName(attribs[ParsersAttributes::NAME]); + base_rel->setAlias(attribs[ParsersAttributes::ALIAS]); addRelationship(base_rel); } else if(base_rel) @@ -6102,7 +6151,9 @@ BaseRelationship *DatabaseModel::createRelationship(void) .arg(BaseObject::getTypeName(BASE_RELATIONSHIP)), ERR_REF_OBJ_INEXISTS_MODEL,__PRETTY_FUNCTION__,__FILE__,__LINE__); + base_rel->blockSignals(loading_model); base_rel->disconnectRelationship(); + base_rel->blockSignals(false); } else { @@ -6153,6 +6204,7 @@ BaseRelationship *DatabaseModel::createRelationship(void) rel->setTableNameRelNN(attribs[ParsersAttributes::TABLE_NAME]); rel->setName(attribs[ParsersAttributes::NAME]); + rel->setAlias(attribs[ParsersAttributes::ALIAS]); base_rel=rel; //Configuring the name patterns @@ -6252,7 +6304,11 @@ BaseRelationship *DatabaseModel::createRelationship(void) /* If the FK relationship does not reference a foreign key (models generated in older versions) * we need to assign them to the respective relationships */ if(base_rel && base_rel->getObjectType()==BASE_RELATIONSHIP) + { + base_rel->blockSignals(loading_model); base_rel->connectRelationship(); + base_rel->blockSignals(false); + } if(base_rel && base_rel->getRelationshipType() == BaseRelationship::RELATIONSHIP_FK && @@ -8101,7 +8157,10 @@ void DatabaseModel::getObjectReferences(BaseObject *object, vector { col=tab->getColumn(i1); - if(!col->isAddedByRelationship() && col->getType()==ptr_pgsqltype) + if(!col->isAddedByRelationship() && + (col->getType()==ptr_pgsqltype || + //Special case for postgis extension + (obj_type == OBJ_EXTENSION && object->getName() == QString("postgis") && col->getType().isGiSType()))) { refer=true; refs.push_back(col); @@ -8808,6 +8867,15 @@ void DatabaseModel::__getObjectReferences(BaseObject *object, vector &objects) +{ + for(auto &obj : objects) + { + if(BaseGraphicObject::isGraphicObject(obj->getObjectType())) + dynamic_cast(obj)->setModified(true); + } +} + void DatabaseModel::setObjectsModified(vector types) { ObjectType obj_types[]={OBJ_TABLE, OBJ_VIEW, @@ -9209,7 +9277,7 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option QFile output(filename); QByteArray buf; QString objs_def; - vector objects; + vector objects, tab_objs; attribs_map attribs; BaseGraphicObject *graph_obj=nullptr; Relationship *rel=nullptr; @@ -9222,7 +9290,7 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option bool save_db_attribs=false, save_objs_pos=false, save_objs_prot=false, save_objs_sqldis=false, save_textboxes=false, save_tags=false, save_custom_sql=false, save_custom_colors=false, save_fadeout=false, - save_extattribs=false, save_genericsqls=false; + save_extattribs=false, save_genericsqls=false, save_objs_aliases=false; QStringList labels_attrs={ ParsersAttributes::SRC_LABEL, ParsersAttributes::DST_LABEL, ParsersAttributes::NAME_LABEL }; @@ -9238,6 +9306,7 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option save_fadeout=(META_OBJS_FADEDOUT & options) == META_OBJS_FADEDOUT; save_extattribs=(META_OBJS_EXTATTRIBS & options) == META_OBJS_EXTATTRIBS; save_genericsqls=(META_GENERIC_SQL_OBJS & options) == META_GENERIC_SQL_OBJS; + save_objs_aliases=(META_OBJS_ALIASES & options) == META_OBJS_ALIASES; output.open(QFile::WriteOnly); @@ -9262,7 +9331,7 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option if(save_db_attribs) objects.push_back(this); - if(save_objs_pos) + if(save_objs_pos || save_objs_aliases) { objects.insert(objects.end(), schemas.begin(), schemas.end()); objects.insert(objects.end(), tables.begin(), tables.end()); @@ -9274,7 +9343,8 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option for(BaseObject *object : relationships) { rel=dynamic_cast(object); - if(rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_NN && rel->getReceiverTable()) + + if(save_objs_pos && rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_NN && rel->getReceiverTable()) { tab_nn=rel->getReceiverTable(); src_tab=rel->getTable(BaseRelationship::SRC_TABLE); @@ -9288,6 +9358,22 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option objects.push_back(tab_nn); } } + + //Saving aliases the children of tables and views + if(save_objs_aliases) + { + for(auto &tab : tables) + { + tab_objs = dynamic_cast
(tab)->getObjects(); + objects.insert(objects.end(), tab_objs.begin(), tab_objs.end()); + } + + for(auto &vw : views) + { + tab_objs = dynamic_cast(vw)->getObjects(); + objects.insert(objects.end(), tab_objs.begin(), tab_objs.end()); + } + } } if(save_objs_prot || save_objs_sqldis) @@ -9322,21 +9408,31 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option objs_def+=object->getCodeDefinition(SchemaParser::XML_DEFINITION); continue; } + //Discarding the relationship added table objects (when extracting aliases) + else if(TableObject::isTableObject(obj_type) && dynamic_cast(object)->isAddedByRelationship()) + continue; graph_obj=dynamic_cast(object); base_tab=dynamic_cast(object); - attribs[ParsersAttributes::NAME]=object->getSignature(); + attribs[ParsersAttributes::TABLE]=QString(); + attribs[ParsersAttributes::NAME]=(TableObject::isTableObject(obj_type) ? object->getName() : object->getSignature()); + attribs[ParsersAttributes::ALIAS]=(save_objs_aliases ? object->getAlias() : QString()); attribs[ParsersAttributes::TYPE]=object->getSchemaName(); attribs[ParsersAttributes::PROTECTED]=(save_objs_prot && object->isProtected() && !object->isSystemObject() ? ParsersAttributes::_TRUE_ : QString()); attribs[ParsersAttributes::SQL_DISABLED]=(save_objs_sqldis && object->isSQLDisabled() && !object->isSystemObject() ? ParsersAttributes::_TRUE_ : QString()); attribs[ParsersAttributes::TAG]=(save_tags && base_tab && base_tab->getTag() ? base_tab->getTag()->getName() : QString()); attribs[ParsersAttributes::APPENDED_SQL]=object->getAppendedSQL(); attribs[ParsersAttributes::PREPENDED_SQL]=object->getPrependedSQL(); - attribs[ParsersAttributes::HIDE_EXT_ATTRIBS]=(save_extattribs && base_tab && base_tab->isExtAttribsHidden() ? ParsersAttributes::_TRUE_ : QString()); attribs[ParsersAttributes::FADED_OUT]=(save_fadeout && graph_obj && graph_obj->isFadedOut() ? ParsersAttributes::_TRUE_ : QString()); + if(TableObject::isTableObject(obj_type)) + { + base_tab = dynamic_cast(object)->getParentTable(); + attribs[ParsersAttributes::TABLE]=base_tab->getSignature(); + } + if(save_custom_sql && obj_type==OBJ_DATABASE) { attribs[ParsersAttributes::APPEND_AT_EOD]=(this->isAppendAtEOD() ? ParsersAttributes::_TRUE_ : ParsersAttributes::_FALSE_); @@ -9468,7 +9564,8 @@ void DatabaseModel::saveObjectsMetadata(const QString &filename, unsigned option (save_custom_sql && (!attribs[ParsersAttributes::APPENDED_SQL].isEmpty() || !attribs[ParsersAttributes::PREPENDED_SQL].isEmpty())) || (save_fadeout && !attribs[ParsersAttributes::FADED_OUT].isEmpty()) || - (save_extattribs && !attribs[ParsersAttributes::HIDE_EXT_ATTRIBS].isEmpty())) + (save_extattribs && !attribs[ParsersAttributes::HIDE_EXT_ATTRIBS].isEmpty()) || + (save_objs_aliases && !attribs[ParsersAttributes::ALIAS].isEmpty())) { emit s_objectLoaded(((idx++)/static_cast(objects.size()))*100, trUtf8("Saving metadata of the object `%1' (%2)") @@ -9529,12 +9626,11 @@ void DatabaseModel::loadObjectsMetadata(const QString &filename, unsigned option BaseRelationship *rel=nullptr; Schema *schema=nullptr; Tag *tag=nullptr; - QPointF pnt; int progress=0; bool load_db_attribs=false, load_objs_pos=false, load_objs_prot=false, load_objs_sqldis=false, load_textboxes=false, load_tags=false, load_custom_sql=false, load_custom_colors=false, load_fadeout=false, - load_extattribs=false, load_genericsqls=false; + load_extattribs=false, load_genericsqls=false, load_objs_aliases=false; load_db_attribs=(META_DB_ATTRIBUTES & options) == META_DB_ATTRIBUTES; load_objs_pos=(META_OBJS_POSITIONING & options) == META_OBJS_POSITIONING; @@ -9547,6 +9643,7 @@ void DatabaseModel::loadObjectsMetadata(const QString &filename, unsigned option load_fadeout=(META_OBJS_FADEDOUT & options) == META_OBJS_FADEDOUT; load_extattribs=(META_OBJS_EXTATTRIBS & options) == META_OBJS_EXTATTRIBS; load_genericsqls=(META_GENERIC_SQL_OBJS & options) == META_GENERIC_SQL_OBJS; + load_objs_aliases=(META_OBJS_ALIASES & options) == META_OBJS_ALIASES; try { @@ -9622,6 +9719,20 @@ void DatabaseModel::loadObjectsMetadata(const QString &filename, unsigned option object=this; } + else if(TableObject::isTableObject(obj_type)) + { + base_tab = getTable(attribs[ParsersAttributes::TABLE]); + + if(!base_tab && (obj_type == OBJ_RULE || obj_type == OBJ_INDEX || obj_type == OBJ_TRIGGER)) + base_tab = getView(attribs[ParsersAttributes::TABLE]); + + if(base_tab) + object = base_tab->getObject(attribs[ParsersAttributes::OBJECT], obj_type); + + //Discarding the object if it was added by relationship + if(object && dynamic_cast(object)->isAddedByRelationship()) + object = nullptr; + } else object=getObject(obj_name, obj_type); @@ -9667,6 +9778,9 @@ void DatabaseModel::loadObjectsMetadata(const QString &filename, unsigned option this->setPrependAtBOD(attribs[ParsersAttributes::PREPEND_AT_BOD]==ParsersAttributes::_TRUE_); } + if(load_objs_aliases && !attribs[ParsersAttributes::ALIAS].isEmpty()) + object->setAlias(attribs[ParsersAttributes::ALIAS]); + if(xmlparser.accessElement(XMLParser::CHILD_ELEMENT)) { do diff --git a/libpgmodeler/src/databasemodel.h b/libpgmodeler/src/databasemodel.h index 11406b0ad2..c44ae50773 100644 --- a/libpgmodeler/src/databasemodel.h +++ b/libpgmodeler/src/databasemodel.h @@ -181,7 +181,8 @@ class DatabaseModel: public QObject, public BaseObject { META_TEXTBOX_OBJS=256, //! \brief Handle textboxes object when save/load metadata file META_TAG_OBJS=512, //! \brief Handle tags object when save/load metadata file META_GENERIC_SQL_OBJS=1024, //! \brief Handle generic sql object when save/load metadata file - META_ALL_INFO=2047; //! \brief Handle all metadata information about objects when save/load metadata file + META_OBJS_ALIASES=2048, //! \brief Handle the object's aliases (graphical objects and table children objects) when save/load metadata file + META_ALL_INFO=4095; //! \brief Handle all metadata information about objects when save/load metadata file DatabaseModel(void); @@ -561,10 +562,13 @@ class DatabaseModel: public QObject, public BaseObject { meaning that ALL objects directly or inderectly linked to the 'object' are retrieved. */ void __getObjectReferences(BaseObject *object, vector &refs, bool exclude_perms=false); - /*! \brief Marks the graphical objects as modified forcing their redraw. User can specify only a set of + /*! \brief Marks the graphical objects of the provided types as modified forcing their redraw. User can specify only a set of graphical objects to be marked */ void setObjectsModified(vector types={}); + //! \brief Marks the graphical objects in the list as modified forcing their redraw. + void setObjectsModified(vector &objects); + /*! \brief Marks the objects with code invalidated forcing their code regeneration. User can specify only a set of graphical objects to be marked */ void setCodesInvalidated(vector types={}); diff --git a/libpgmodeler/src/extension.cpp b/libpgmodeler/src/extension.cpp index d4ef4246b3..2968e65ffe 100644 --- a/libpgmodeler/src/extension.cpp +++ b/libpgmodeler/src/extension.cpp @@ -85,11 +85,11 @@ QString Extension::getCodeDefinition(unsigned def_type) QString code_def=getCachedCode(def_type, false); if(!code_def.isEmpty()) return(code_def); - attributes[ParsersAttributes::NAME]=this->getName(true, false); + attributes[ParsersAttributes::NAME]=this->getName(def_type==SchemaParser::SQL_DEFINITION, false); attributes[ParsersAttributes::HANDLES_TYPE]=(handles_type ? ParsersAttributes::_TRUE_ : QString()); attributes[ParsersAttributes::CUR_VERSION]=versions[CUR_VERSION]; attributes[ParsersAttributes::OLD_VERSION]=versions[OLD_VERSION]; - attributes[ParsersAttributes::NAME]=this->getName(def_type==SchemaParser::SQL_DEFINITION, false); + return(BaseObject::__getCodeDefinition(def_type)); } @@ -119,7 +119,7 @@ QString Extension::getAlterDefinition(BaseObject *object) QString Extension::getDropDefinition(bool cascade) { - attributes[ParsersAttributes::NAME] = this->getName(); + attributes[ParsersAttributes::NAME] = this->getName(true); return(BaseObject::getDropDefinition(cascade)); } diff --git a/libpgmodeler/src/operationlist.cpp b/libpgmodeler/src/operationlist.cpp index f5e2d5e758..edfb742101 100644 --- a/libpgmodeler/src/operationlist.cpp +++ b/libpgmodeler/src/operationlist.cpp @@ -314,9 +314,9 @@ void OperationList::removeFromPool(unsigned obj_idx) BaseObject *object=nullptr; vector::iterator itr; - //Raises an error if the object index is invalid (out of bound) + //Avoiding the removal of an object in invalid index (out of bound) if(obj_idx >= object_pool.size()) - throw Exception(ERR_REF_OBJ_INV_INDEX,__PRETTY_FUNCTION__,__FILE__,__LINE__); + return; //Gets the element to bo removed through its index itr=object_pool.begin() + obj_idx; diff --git a/libpgmodeler/src/permission.cpp b/libpgmodeler/src/permission.cpp index 82b59ec762..0e3beef0dd 100644 --- a/libpgmodeler/src/permission.cpp +++ b/libpgmodeler/src/permission.cpp @@ -34,7 +34,7 @@ Permission::Permission(BaseObject *obj) /* Raises an error if the object type to be associated to the permission is invalid according to the rule (see class definition) */ - if(!objectAcceptsPermission(obj->getObjectType())) + if(!acceptsPermission(obj->getObjectType())) throw Exception(ERR_ASG_OBJECT_INV_TYPE,__PRETTY_FUNCTION__,__FILE__,__LINE__); this->object=obj; @@ -51,7 +51,7 @@ Permission::Permission(BaseObject *obj) attributes[ParsersAttributes::PRIVILEGES_GOP]=QString(); } -bool Permission::objectAcceptsPermission(ObjectType obj_type, int privilege) +bool Permission::acceptsPermission(ObjectType obj_type, int privilege) { bool result=false; unsigned priv_id=static_cast(privilege); @@ -142,7 +142,7 @@ void Permission::setPrivilege(unsigned priv_id, bool value, bool grant_op) if(priv_id > PRIV_USAGE) throw Exception(ERR_REF_INV_PRIVILEGE_TYPE,__PRETTY_FUNCTION__,__FILE__,__LINE__); - if(!objectAcceptsPermission(object->getObjectType(), priv_id)) + if(!acceptsPermission(object->getObjectType(), priv_id)) //Raises an error if the privilege is invalid according to the object type throw Exception(ERR_ASG_INCOMP_PRIV_OBJECT,__PRETTY_FUNCTION__,__FILE__,__LINE__); diff --git a/libpgmodeler/src/permission.h b/libpgmodeler/src/permission.h index e0198fa492..d35142a127 100644 --- a/libpgmodeler/src/permission.h +++ b/libpgmodeler/src/permission.h @@ -154,7 +154,7 @@ class Permission: public BaseObject { bool isSimilarTo(Permission *perm); //! \brief Returns if the passed object type accepts permission - static bool objectAcceptsPermission(ObjectType obj_type, int privilege=-1); + static bool acceptsPermission(ObjectType obj_type, int privilege=-1); //! \brief Returns the SQL / XML definition for the permission virtual QString getCodeDefinition(unsigned def_type) final; diff --git a/libpgmodeler/src/pgsqltypes.h b/libpgmodeler/src/pgsqltypes.h index 32dc8ee473..8649a5e97f 100644 --- a/libpgmodeler/src/pgsqltypes.h +++ b/libpgmodeler/src/pgsqltypes.h @@ -580,7 +580,7 @@ class EncodingType: public BaseType{ class StorageType: public BaseType{ private: - static const unsigned offset=207; + static const unsigned offset=205; static const unsigned types_count=4; public: diff --git a/libpgmodeler/src/reference.cpp b/libpgmodeler/src/reference.cpp index 68e3537f57..3289827940 100644 --- a/libpgmodeler/src/reference.cpp +++ b/libpgmodeler/src/reference.cpp @@ -33,7 +33,7 @@ Reference::Reference(Table *table, Column *column, const QString &tab_alias, con //Raises an error if the table/column alias has an invalid name else if((!tab_alias.isEmpty() && !BaseObject::isValidName(tab_alias)) || - (!col_alias.isEmpty() && !BaseObject::isValidName(col_alias))) + (!col_alias.isEmpty() && !BaseObject::isValidName(col_alias))) throw Exception(ERR_ASG_INV_NAME_OBJECT,__PRETTY_FUNCTION__,__FILE__,__LINE__); //Raises an error if the column parent table differs from the passed table @@ -106,6 +106,19 @@ unsigned Reference::getReferenceType(void) return(REFER_EXPRESSION); } +void Reference::setReferenceAlias(const QString &alias) +{ + if(alias.size() > BaseObject::OBJECT_NAME_MAX_LENGTH) + throw Exception(ERR_ASG_LONG_NAME_OBJECT,__PRETTY_FUNCTION__,__FILE__,__LINE__); + + ref_alias = alias; +} + +QString Reference::getReferenceAlias(void) +{ + return(ref_alias); +} + QString Reference::getSQLDefinition(unsigned sql_type) { QString sql_def, tab_name; @@ -213,6 +226,7 @@ QString Reference::getXMLDefinition(void) if(column) attribs[ParsersAttributes::COLUMN]=column->getName(); + attribs[ParsersAttributes::REF_ALIAS]=ref_alias; attribs[ParsersAttributes::EXPRESSION]=expression; attribs[ParsersAttributes::ALIAS]=alias; attribs[ParsersAttributes::COLUMN_ALIAS]=column_alias; diff --git a/libpgmodeler/src/reference.h b/libpgmodeler/src/reference.h index 0067a77590..4576e5eab4 100644 --- a/libpgmodeler/src/reference.h +++ b/libpgmodeler/src/reference.h @@ -39,10 +39,15 @@ class Reference { //! \brief Stores the expression that defines one reference QString expression, + //! \brief Stores the alias to the expression or table alias, + //! \brief Stores only the alias for the column - column_alias; + column_alias, + + //! \brief Stores the alias for the reference. This text will be displayed when the view is being show in compact mode + ref_alias; //! \brief Indicates if the expression is used as entire view definition bool is_def_expr; @@ -53,11 +58,11 @@ class Reference { REFER_EXPRESSION=1; //! \brief The reference is based on an expression //! \brief Constants used on the view code generation - static const unsigned SQL_REFER_WHERE=10, - SQL_REFER_SELECT=20, - SQL_REFER_FROM=30, - SQL_REFER_END_EXPR=40, - SQL_VIEW_DEFINITION=50; + static const unsigned SQL_REFER_WHERE=1, + SQL_REFER_SELECT=2, + SQL_REFER_FROM=4, + SQL_REFER_END_EXPR=8, + SQL_VIEW_DEFINITION=15; Reference(void); @@ -89,6 +94,10 @@ class Reference { //! \brief Returns the reference typ (see REFER_??? constants) unsigned getReferenceType(void); + void setReferenceAlias(const QString &alias); + + QString getReferenceAlias(void); + //! \brief Returns the SQL code definition QString getSQLDefinition(unsigned sql_type); diff --git a/libpgmodeler/src/relationship.cpp b/libpgmodeler/src/relationship.cpp index bd244cd1d6..897ffdb79e 100644 --- a/libpgmodeler/src/relationship.cpp +++ b/libpgmodeler/src/relationship.cpp @@ -172,25 +172,36 @@ QString Relationship::getNamePattern(unsigned pat_id) return(name_patterns[pat_id]); } -QString Relationship::generateObjectName(unsigned pat_id, Column *id_col) +QString Relationship::generateObjectName(unsigned pat_id, Column *id_col, bool use_alias) { - QString name; + QString name, aux_name; name=name_patterns[pat_id]; name.replace(GEN_TAB_TOKEN, (rel_type==RELATIONSHIP_NN ? tab_name_relnn : QString())); if(rel_type==RELATIONSHIP_NN) { - name.replace(SRC_TAB_TOKEN, src_table->getName()); - name.replace(DST_TAB_TOKEN, dst_table->getName()); + aux_name = use_alias && !src_table->getAlias().isEmpty() ? src_table->getAlias() : src_table->getName(); + name.replace(SRC_TAB_TOKEN, aux_name); + + aux_name = use_alias && !dst_table->getAlias().isEmpty() ? dst_table->getAlias() : dst_table->getName(); + name.replace(DST_TAB_TOKEN, aux_name); } else { - name.replace(SRC_TAB_TOKEN, getReferenceTable()->getName()); - name.replace(DST_TAB_TOKEN, getReceiverTable()->getName()); + aux_name = use_alias && !getReferenceTable()->getAlias().isEmpty() ? getReferenceTable()->getAlias() : getReferenceTable()->getName(); + name.replace(SRC_TAB_TOKEN, aux_name); + + aux_name = use_alias && !getReceiverTable()->getAlias().isEmpty() ? getReceiverTable()->getAlias() : getReceiverTable()->getName(); + name.replace(DST_TAB_TOKEN, aux_name); } - name.replace(SRC_COL_TOKEN, (id_col ? id_col->getName() : QString())); + aux_name.clear(); + + if(id_col) + aux_name = use_alias && !id_col->getAlias().isEmpty() ? id_col->getAlias() : id_col->getName(); + + name.replace(SRC_COL_TOKEN, aux_name); if(name.size() > BaseObject::OBJECT_NAME_MAX_LENGTH) name.remove(BaseObject::OBJECT_NAME_MAX_LENGTH, name.size()); @@ -257,6 +268,7 @@ void Relationship::createSpecialPrimaryKey(void) 2) Use the same tablespace as the receiver table */ pk_special=new Constraint; pk_special->setName(generateObjectName(PK_PATTERN)); + pk_special->setAlias(generateObjectName(PK_PATTERN, nullptr, true)); pk_special->setConstraintType(ConstraintType::primary_key); pk_special->setAddedByLinking(true); pk_special->setProtected(true); @@ -1189,6 +1201,7 @@ void Relationship::configureIndentifierRel(Table *recv_tab) new_pk=true; pk->setName(generateObjectName(PK_PATTERN)); + pk->setAlias(generateObjectName(PK_PATTERN, nullptr, true)); } //Adds the columns from the strong entity primary key on the weak entity primary key @@ -1250,6 +1263,7 @@ void Relationship::addUniqueKey(Table *recv_tab) uq->addColumn(gen_columns[i++], Constraint::SOURCE_COLS); uq->setName(generateObjectName(UQ_PATTERN)); + uq->setAlias(generateObjectName(UQ_PATTERN, nullptr, true)); uq->setName(PgModelerNS::generateUniqueName(uq, (*recv_tab->getObjectList(OBJ_CONSTRAINT)))); recv_tab->addConstraint(uq); } @@ -1271,7 +1285,7 @@ void Relationship::addForeignKey(Table *ref_tab, Table *recv_tab, ActionType del Constraint *pk=nullptr, *pk_aux=nullptr, *fk=nullptr; unsigned i, i1, qty; Column *column=nullptr, *column_aux=nullptr; - QString name, aux; + QString name, aux, fk_alias; try { @@ -1355,20 +1369,29 @@ void Relationship::addForeignKey(Table *ref_tab, Table *recv_tab, ActionType del } //Configures the foreign key name - aux.clear(); if(rel_type!=RELATIONSHIP_NN) + { name=generateObjectName(SRC_FK_PATTERN); + fk_alias=generateObjectName(SRC_FK_PATTERN, nullptr, true); + } else { if(ref_tab==src_table) + { name=generateObjectName(SRC_FK_PATTERN); + fk_alias=generateObjectName(SRC_FK_PATTERN, nullptr, true); + } else + { name=generateObjectName(DST_FK_PATTERN); + fk_alias=generateObjectName(DST_FK_PATTERN, nullptr, true); + } } fk->setName(name); + fk->setAlias(fk_alias); fk->setName(PgModelerNS::generateUniqueName(fk, (*recv_tab->getObjectList(OBJ_CONSTRAINT)))); recv_tab->addConstraint(fk); } @@ -1428,7 +1451,7 @@ void Relationship::copyColumns(Table *ref_tab, Table *recv_tab, bool not_null, b Constraint *dst_pk=nullptr, *src_pk=nullptr, *pk=nullptr; unsigned i, count; Column *column=nullptr, *column_aux=nullptr; - QString name, prev_name; + QString name, prev_name, col_alias; try { @@ -1466,15 +1489,26 @@ void Relationship::copyColumns(Table *ref_tab, Table *recv_tab, bool not_null, b prev_name=prev_ref_col_names[column_aux->getObjectId()]; if(rel_type!=RELATIONSHIP_NN) + { name=generateObjectName(SRC_COL_PATTERN, column_aux); + col_alias=generateObjectName(SRC_COL_PATTERN, column_aux, true); + } else { if(ref_tab==src_table && (!isSelfRelationship() || (isSelfRelationship() && !is_dst_table))) + { name=generateObjectName(SRC_COL_PATTERN, column_aux); + col_alias=generateObjectName(SRC_COL_PATTERN, column_aux, true); + } else + { name=generateObjectName(DST_COL_PATTERN, column_aux); + col_alias=generateObjectName(DST_COL_PATTERN, column_aux, true); + } } + column->setAlias(col_alias); + //Protects the column evicting that the user modifies it column->setAddedByLinking(true); @@ -1718,6 +1752,7 @@ void Relationship::addColumnsRelNn(void) { pk_col=new Column; pk_col->setName(generateObjectName(PK_COL_PATTERN)); + pk_col->setAlias(generateObjectName(PK_COL_PATTERN, nullptr, true)); pk_col->setType(PgSQLType(QString("serial"))); pk_col->setAddedByLinking(true); table_relnn->addColumn(pk_col); @@ -1726,6 +1761,7 @@ void Relationship::addColumnsRelNn(void) //Creates the primary key for the n-n relationship table pk_tabnn=new Constraint; pk_tabnn->setName(generateObjectName(PK_PATTERN)); + pk_tabnn->setAlias(generateObjectName(PK_PATTERN, nullptr, true)); pk_tabnn->setConstraintType(ConstraintType::primary_key); pk_tabnn->setAddedByLinking(true); @@ -2191,7 +2227,7 @@ bool Relationship::isInvalidated(void) Constraint *fk=nullptr, *fk1=nullptr, *constr=nullptr, *pk=nullptr; bool valid=false; Column *rel_pk_col=nullptr, *gen_col=nullptr, *pk_col=nullptr; - QString col_name; + QString col_name, col_alias; if(invalidated) { @@ -2262,9 +2298,8 @@ bool Relationship::isInvalidated(void) obtained directly from the primary key */ col_name=generateObjectName(SRC_COL_PATTERN, rel_pk_col); valid=(rel_pk_col==pk_col && - (gen_col->getName()==col_name || - gen_col->getName().contains(pk_col->getName())) && - (rel_pk_col->getType()==gen_col->getType() || + (gen_col->getName()==col_name || gen_col->getName().contains(pk_col->getName())) && + (rel_pk_col->getType()==gen_col->getType() || (rel_pk_col->getType()==QString("serial") && gen_col->getType()==QString("integer")) || (rel_pk_col->getType()==QString("bigserial") && gen_col->getType()==QString("bigint")) || (rel_pk_col->getType()==QString("smallserial") && gen_col->getType()==QString("smallint")))); @@ -2274,8 +2309,7 @@ bool Relationship::isInvalidated(void) /* For copy / generalization relationships, is obtained the number of columns created when connecting it and comparing with the number of columns of the source table */ - else if(rel_type==RELATIONSHIP_DEP || - rel_type==RELATIONSHIP_GEN) + else if(rel_type==RELATIONSHIP_DEP || rel_type==RELATIONSHIP_GEN) { table=getReferenceTable(); table1=getReceiverTable(); @@ -2352,8 +2386,7 @@ bool Relationship::isInvalidated(void) valid=(rel_cols_count == tab_cols_count); - /* Checking if the columns created with the connection still exists - in reference table */ + // Checking if the columns created with the connection still exists in reference table count=fk->getColumnCount(Constraint::SOURCE_COLS); pk=table->getPrimaryKey(); @@ -2362,11 +2395,10 @@ bool Relationship::isInvalidated(void) gen_col=fk->getColumn(i, Constraint::SOURCE_COLS); pk_col=pk->getColumn(i, Constraint::SOURCE_COLS); valid=(gen_col->getName()==generateObjectName(SRC_COL_PATTERN, pk_col) || - gen_col->getName().contains(pk_col->getName())); + gen_col->getName().contains(pk_col->getName())); } - /* Checking if the columns created with the connection still exists - in receiver table */ + // Checking if the columns created with the connection still exists in receiver table count=fk1->getColumnCount(Constraint::SOURCE_COLS); pk=table1->getPrimaryKey(); @@ -2490,7 +2522,7 @@ QString Relationship::getCodeDefinition(unsigned def_type) if(copy_options.getCopyMode()!=0) { attributes[ParsersAttributes::COPY_OPTIONS]=QString("%1").arg(copy_options.getCopyOptionsIds()); - attributes[ParsersAttributes::COPY_MODE]=QString("%1").arg(copy_options.getCopyMode());; + attributes[ParsersAttributes::COPY_MODE]=QString("%1").arg(copy_options.getCopyMode()); } reduced_form=(attributes[ParsersAttributes::COLUMNS].isEmpty() && diff --git a/libpgmodeler/src/relationship.h b/libpgmodeler/src/relationship.h index 86d56a5528..9a25244c5a 100644 --- a/libpgmodeler/src/relationship.h +++ b/libpgmodeler/src/relationship.h @@ -268,7 +268,7 @@ class Relationship: public BaseRelationship { void removeColumnFromTablePK(Table *table, Column *column); //! \brief Generates the object name according to the specified name pattern - QString generateObjectName(unsigned pat_id, Column *id_col=nullptr); + QString generateObjectName(unsigned pat_id, Column *id_col=nullptr, bool use_alias=false); protected: //! \brief Destroy all the relationship attributes and constraints diff --git a/libpgmodeler/src/sequence.cpp b/libpgmodeler/src/sequence.cpp index 808df35f2a..5225c6244a 100644 --- a/libpgmodeler/src/sequence.cpp +++ b/libpgmodeler/src/sequence.cpp @@ -44,24 +44,32 @@ Sequence::Sequence(void) attributes[ParsersAttributes::COL_IS_IDENTITY]=QString(); } -bool Sequence::isNullValue(const QString &value) +bool Sequence::isZeroValue(const QString &value) { + if(value.isEmpty()) + return(false); + unsigned i, count; - bool is_null; + bool is_zero; i=0; - is_null=true; + is_zero=true; count=value.size(); - while(i < count && is_null) + + while(i < count && is_zero) { - is_null=(value[i]=='0' || value[i]=='+' || value[i]=='-'); + is_zero=(value[i]=='0' || value[i]=='+' || value[i]=='-'); i++; } - return(is_null); + + return(is_zero); } bool Sequence::isValidValue(const QString &value) { + if(value.isEmpty()) + return(false); + /* To be valid the value can be start with + or -, have only numbers and it's length must not exceed the MAX_POSITIVE_VALUE length */ if(value.size() > MAX_BIG_POSITIVE_VALUE.size()) @@ -122,7 +130,7 @@ QString Sequence::formatValue(const QString &value) int Sequence::compareValues(QString value1, QString value2) { - if(value1==value2) + if(value1==value2 || value1.isEmpty() || value2.isEmpty()) return(0); else { @@ -174,12 +182,14 @@ void Sequence::setDefaultValues(PgSQLType serial_type) { QString min, max; - if(serial_type==QString("smallserial")) + if(serial_type==QString("smallserial") || + serial_type.isEquivalentTo(QString("smallint"))) { min=MAX_SMALL_NEGATIVE_VALUE; max=MAX_SMALL_POSITIVE_VALUE; } - else if(serial_type==QString("bigserial")) + else if(serial_type==QString("bigserial") || + serial_type.isEquivalentTo(QString("bigint"))) { min=MAX_BIG_NEGATIVE_VALUE; max=MAX_BIG_POSITIVE_VALUE; @@ -235,22 +245,16 @@ void Sequence::setValues(QString minv, QString maxv, QString inc, QString start, start=formatValue(start); cache=formatValue(cache); - //Raises an error when some values are empty - if(minv.isEmpty() || maxv.isEmpty() || inc.isEmpty() || - start.isEmpty() || cache.isEmpty()) - throw Exception(ERR_ASG_INV_VALUE_SEQ_ATTRIBS,__PRETTY_FUNCTION__,__FILE__,__LINE__); - //Raises an error when the min value is greater than max value - else if(compareValues(minv,maxv) > 0) + if(compareValues(minv,maxv) > 0) throw Exception(ERR_ASG_INV_SEQ_MIN_VALUE,__PRETTY_FUNCTION__,__FILE__,__LINE__); //Raises an error when the start value is less that min value or grater than max value - else if(compareValues(start, minv) < 0 || - compareValues(start, maxv) > 0) + else if(compareValues(start, minv) < 0 || compareValues(start, maxv) > 0) throw Exception(ERR_ASG_INV_SEQ_START_VALUE,__PRETTY_FUNCTION__,__FILE__,__LINE__); //Raises an error when the increment value is null (0) - else if(isNullValue(inc)) + else if(isZeroValue(inc)) throw Exception(ERR_ASG_INV_SEQ_INCR_VALUE,__PRETTY_FUNCTION__,__FILE__,__LINE__); //Raises an error when the cache value is null (0) - else if(isNullValue(cache)) + else if(isZeroValue(cache)) throw Exception(ERR_ASG_INV_SEQ_CACHE_VALUE,__PRETTY_FUNCTION__,__FILE__,__LINE__); this->min_value=minv; @@ -442,19 +446,19 @@ QString Sequence::getAlterDefinition(BaseObject *object) attribs[ParsersAttributes::OWNER_COLUMN]=ParsersAttributes::UNSET; } - if(this->increment!=seq->increment) + if(!seq->increment.isEmpty() && this->increment!=seq->increment) attribs[ParsersAttributes::INCREMENT]=seq->increment; - if(this->min_value!=seq->min_value) + if(!seq->min_value.isEmpty() && this->min_value!=seq->min_value) attribs[ParsersAttributes::MIN_VALUE]=seq->min_value; - if(this->max_value!=seq->max_value) + if(!seq->max_value.isEmpty() && this->max_value!=seq->max_value) attribs[ParsersAttributes::MAX_VALUE]=seq->max_value; - if(this->start!=seq->start) + if(!seq->start.isEmpty() && this->start!=seq->start) attribs[ParsersAttributes::START]=seq->start; - if(this->cache!=seq->cache) + if(!seq->cache.isEmpty() && this->cache!=seq->cache) attribs[ParsersAttributes::CACHE]=seq->cache; if(this->cycle!=seq->cycle) diff --git a/libpgmodeler/src/sequence.h b/libpgmodeler/src/sequence.h index 4f7bd2cf5e..a95dd699ff 100644 --- a/libpgmodeler/src/sequence.h +++ b/libpgmodeler/src/sequence.h @@ -53,7 +53,7 @@ class Sequence: public BaseObject { bool isValidValue(const QString &value); //! \brief Returns true when the passed value is null (zero) - bool isNullValue(const QString &value); + bool isZeroValue(const QString &value); //! \brief Returns the formated value excluding the aditional operators QString formatValue(const QString &value); diff --git a/libpgmodeler/src/view.cpp b/libpgmodeler/src/view.cpp index 864a50fb41..a89eec7305 100644 --- a/libpgmodeler/src/view.cpp +++ b/libpgmodeler/src/view.cpp @@ -255,6 +255,10 @@ void View::addReference(Reference &refer, unsigned sql_type, int expr_id) //Gets the expression list expr_list=getExpressionList(sql_type); + //Avoiding the insertion of a duplicated reference in the expression list + if(std::find(expr_list->begin(), expr_list->end(), idx) != expr_list->end()) + return; + //Inserts the reference id on the expression list if(expr_id >= 0 && expr_id < static_cast(expr_list->size())) expr_list->insert(expr_list->begin() + expr_id, static_cast(idx)); diff --git a/libpgmodeler_ui/libpgmodeler_ui.pro b/libpgmodeler_ui/libpgmodeler_ui.pro index e0eacb7103..98a312b443 100644 --- a/libpgmodeler_ui/libpgmodeler_ui.pro +++ b/libpgmodeler_ui/libpgmodeler_ui.pro @@ -112,7 +112,10 @@ SOURCES += src/mainwindow.cpp \ src/sceneinfowidget.cpp \ src/bulkdataeditwidget.cpp \ src/policywidget.cpp \ - src/objectstablewidget.cpp + src/objectstablewidget.cpp \ + src/resultsetmodel.cpp \ + src/referencewidget.cpp \ + src/sqlexecutionhelper.cpp HEADERS += src/mainwindow.h \ @@ -212,7 +215,10 @@ HEADERS += src/mainwindow.h \ src/sceneinfowidget.h \ src/bulkdataeditwidget.h \ src/policywidget.h \ - src/objectstablewidget.h + src/objectstablewidget.h \ + src/resultsetmodel.h \ + src/referencewidget.h \ + src/sqlexecutionhelper.h FORMS += ui/mainwindow.ui \ ui/textboxwidget.ui \ @@ -295,7 +301,8 @@ FORMS += ui/mainwindow.ui \ ui/sceneinfowidget.ui \ ui/bulkdataeditwidget.ui \ ui/policywidget.ui \ - ui/objectstablewidget.ui + ui/objectstablewidget.ui \ + ui/referencewidget.ui unix|windows: LIBS += -L$$OUT_PWD/../libobjrenderer/ -lobjrenderer \ -L$$OUT_PWD/../libpgconnector/ -lpgconnector \ diff --git a/libpgmodeler_ui/res/icones/compactview.png b/libpgmodeler_ui/res/icones/compactview.png new file mode 100644 index 0000000000..671d3fdcba Binary files /dev/null and b/libpgmodeler_ui/res/icones/compactview.png differ diff --git a/libpgmodeler_ui/res/icones/help_big.png b/libpgmodeler_ui/res/icones/help_big.png new file mode 100644 index 0000000000..34d769e6b1 Binary files /dev/null and b/libpgmodeler_ui/res/icones/help_big.png differ diff --git a/libpgmodeler_ui/res/icones/moreactions.png b/libpgmodeler_ui/res/icones/moreactions.png new file mode 100644 index 0000000000..2ffd625838 Binary files /dev/null and b/libpgmodeler_ui/res/icones/moreactions.png differ diff --git a/libpgmodeler_ui/res/icones/stop.png b/libpgmodeler_ui/res/icones/stop.png new file mode 100644 index 0000000000..2fa991e063 Binary files /dev/null and b/libpgmodeler_ui/res/icones/stop.png differ diff --git a/libpgmodeler_ui/res/resources.qrc b/libpgmodeler_ui/res/resources.qrc index c4688eecf5..a9b4d60f48 100644 --- a/libpgmodeler_ui/res/resources.qrc +++ b/libpgmodeler_ui/res/resources.qrc @@ -239,6 +239,10 @@ icones/bulkedit.png icones/policy_grp.png icones/policy.png + icones/compactview.png + icones/help_big.png + icones/moreactions.png + icones/stop.png imagens/model2sql.png diff --git a/libpgmodeler_ui/src/aboutwidget.cpp b/libpgmodeler_ui/src/aboutwidget.cpp index 5c36d6391d..7e01b667c3 100644 --- a/libpgmodeler_ui/src/aboutwidget.cpp +++ b/libpgmodeler_ui/src/aboutwidget.cpp @@ -31,14 +31,13 @@ AboutWidget::AboutWidget(QWidget *parent) : QWidget(parent) drop_shadow->setBlurRadius(30); this->setGraphicsEffect(drop_shadow); - pgmodeler_ver_lbl->setText(QString("v%1").arg(GlobalAttributes::PGMODELER_VERSION)); - build_num_lbl->setText(GlobalAttributes::PGMODELER_BUILD_NUMBER); - - for(int row=0; row < contributors_tab->rowCount(); row++) - contributors_tab->item(row, 2)->setToolTip(contributors_tab->item(row, 2)->text().replace(QString("; "), QString(";\n"))); + PgModelerUiNS::configureWidgetFont(title_lbl, PgModelerUiNS::HUGE_FONT_FACTOR); + PgModelerUiNS::configureWidgetFont(pgmodeler_ver_lbl, PgModelerUiNS::HUGE_FONT_FACTOR); + PgModelerUiNS::configureWidgetFont(build_lbl, PgModelerUiNS::BIG_FONT_FACTOR); + PgModelerUiNS::configureWidgetFont(build_num_lbl, PgModelerUiNS::BIG_FONT_FACTOR); - contributors_tab->sortByColumn(0, Qt::AscendingOrder); - contributors_tab->resizeColumnsToContents(); + pgmodeler_ver_lbl->setText(QString("v%1 ").arg(GlobalAttributes::PGMODELER_VERSION)); + build_num_lbl->setText(QString("%1 Qt %2").arg(GlobalAttributes::PGMODELER_BUILD_NUMBER).arg(QT_VERSION_STR)); connect(hide_tb, &QToolButton::clicked, this, [&](){ @@ -46,12 +45,6 @@ AboutWidget::AboutWidget(QWidget *parent) : QWidget(parent) emit s_visibilityChanged(false); }); - PgModelerUiNS::configureWidgetFont(title_lbl, PgModelerUiNS::HUGE_FONT_FACTOR); - PgModelerUiNS::configureWidgetFont(slogan_lbl, PgModelerUiNS::BIG_FONT_FACTOR); - PgModelerUiNS::configureWidgetFont(pgmodeler_ver_lbl, PgModelerUiNS::HUGE_FONT_FACTOR); - PgModelerUiNS::configureWidgetFont(build_lbl, PgModelerUiNS::MEDIUM_FONT_FACTOR); - PgModelerUiNS::configureWidgetFont(build_num_lbl, PgModelerUiNS::MEDIUM_FONT_FACTOR); - float factor = BaseObjectView::getScreenDpiFactor(); this->adjustSize(); this->resize(this->minimumWidth() * factor, this->minimumHeight() * factor); diff --git a/libpgmodeler_ui/src/appearanceconfigwidget.cpp b/libpgmodeler_ui/src/appearanceconfigwidget.cpp index 15104d7136..b8ca6d6b34 100644 --- a/libpgmodeler_ui/src/appearanceconfigwidget.cpp +++ b/libpgmodeler_ui/src/appearanceconfigwidget.cpp @@ -25,36 +25,70 @@ AppearanceConfigWidget::AppearanceConfigWidget(QWidget * parent) : BaseConfigWid setupUi(this); QString conf_ids[]={ - ParsersAttributes::GLOBAL,ParsersAttributes::CONSTRAINTS, ParsersAttributes::OBJ_SELECTION, - ParsersAttributes::POSITION_INFO, ParsersAttributes::POSITION_INFO, - ParsersAttributes::OBJECT_TYPE, ParsersAttributes::LOCKER_ARC, ParsersAttributes::LOCKER_BODY, - ParsersAttributes::TABLE_SCHEMA_NAME, ParsersAttributes::TABLE_NAME, ParsersAttributes::TABLE_BODY, - ParsersAttributes::TABLE_EXT_BODY, ParsersAttributes::TABLE_TITLE, - BaseObject::getSchemaName(OBJ_RULE), BaseObject::getSchemaName(OBJ_RULE), - BaseObject::getSchemaName(OBJ_INDEX), BaseObject::getSchemaName(OBJ_INDEX), - BaseObject::getSchemaName(OBJ_TRIGGER), BaseObject::getSchemaName(OBJ_TRIGGER), - BaseObject::getSchemaName(OBJ_CONSTRAINT), BaseObject::getSchemaName(OBJ_CONSTRAINT), - ParsersAttributes::VIEW_SCHEMA_NAME, ParsersAttributes::VIEW_NAME, - ParsersAttributes::VIEW_BODY /*23*/, ParsersAttributes::VIEW_EXT_BODY /*24*/, ParsersAttributes::VIEW_TITLE /*25*/, ParsersAttributes::ALIAS, - ParsersAttributes::REF_COLUMN, ParsersAttributes::REF_TABLE, ParsersAttributes::REFERENCE, - BaseObject::getSchemaName(OBJ_TEXTBOX), ParsersAttributes::COLUMN, ParsersAttributes::COLUMN, - ParsersAttributes::INH_COLUMN, ParsersAttributes::PROT_COLUMN, ParsersAttributes::PK_COLUMN, - ParsersAttributes::PK_COLUMN, ParsersAttributes::FK_COLUMN, ParsersAttributes::FK_COLUMN, - ParsersAttributes::UQ_COLUMN, ParsersAttributes::UQ_COLUMN, ParsersAttributes::NN_COLUMN, - ParsersAttributes::NN_COLUMN, ParsersAttributes::RELATIONSHIP, ParsersAttributes::LABEL, - ParsersAttributes::LABEL, ParsersAttributes::ATTRIBUTE, ParsersAttributes::ATTRIBUTE, - ParsersAttributes::TAG, ParsersAttributes::TAG, ParsersAttributes::PLACEHOLDER}; + ParsersAttributes::GLOBAL, //0 + ParsersAttributes::CONSTRAINTS, //1 + ParsersAttributes::OBJ_SELECTION, //2 + ParsersAttributes::POSITION_INFO, //3 + ParsersAttributes::POSITION_INFO, //4 + ParsersAttributes::OBJECT_TYPE, //5 + ParsersAttributes::LOCKER_ARC, //6 + ParsersAttributes::LOCKER_BODY, //7 + ParsersAttributes::TABLE_SCHEMA_NAME, //8 + ParsersAttributes::TABLE_NAME, //9 + ParsersAttributes::TABLE_BODY, //10 + ParsersAttributes::TABLE_EXT_BODY, //11 + ParsersAttributes::TABLE_TITLE, //12 + BaseObject::getSchemaName(OBJ_RULE), //13 + BaseObject::getSchemaName(OBJ_RULE), //14 + BaseObject::getSchemaName(OBJ_INDEX), //15 + BaseObject::getSchemaName(OBJ_INDEX), //16 + BaseObject::getSchemaName(OBJ_TRIGGER), //17 + BaseObject::getSchemaName(OBJ_TRIGGER), //18 + BaseObject::getSchemaName(OBJ_CONSTRAINT), //19 + BaseObject::getSchemaName(OBJ_CONSTRAINT), //20 + BaseObject::getSchemaName(OBJ_POLICY), //21 + BaseObject::getSchemaName(OBJ_POLICY), //22 + ParsersAttributes::VIEW_SCHEMA_NAME, //21 -> 23 + ParsersAttributes::VIEW_NAME, //22 + ParsersAttributes::VIEW_BODY, //23 + ParsersAttributes::VIEW_EXT_BODY, //24 + ParsersAttributes::VIEW_TITLE, //25 + ParsersAttributes::ALIAS, //26 + ParsersAttributes::REF_COLUMN, //27 + ParsersAttributes::REF_TABLE, //28 + ParsersAttributes::REFERENCE, //29 + BaseObject::getSchemaName(OBJ_TEXTBOX), //30 + ParsersAttributes::COLUMN, //31 + ParsersAttributes::COLUMN, //32 + ParsersAttributes::INH_COLUMN, //33 + ParsersAttributes::PROT_COLUMN, //34 + ParsersAttributes::PK_COLUMN, //35 + ParsersAttributes::PK_COLUMN, //36 + ParsersAttributes::FK_COLUMN, //37 + ParsersAttributes::FK_COLUMN, //38 + ParsersAttributes::UQ_COLUMN, //39 + ParsersAttributes::UQ_COLUMN, //40 + ParsersAttributes::NN_COLUMN, //41 + ParsersAttributes::NN_COLUMN, //42 + ParsersAttributes::RELATIONSHIP, //43 + ParsersAttributes::LABEL, //44 + ParsersAttributes::LABEL, //45 + ParsersAttributes::ATTRIBUTE, //46 + ParsersAttributes::ATTRIBUTE, //47 + ParsersAttributes::TAG, //48 + ParsersAttributes::TAG, //49 + ParsersAttributes::PLACEHOLDER /*50*/}; int i, count=element_cmb->count(), //This auxiliary vector stores the id of elements that represents color/font conf. of objects - obj_conf_ids_vect[]={ 2, 4, 6, 7, 10, 11, 12, 14, 16, 18, 20, 23, 24, 25, - 29, 30, 32, 36, 38, 40, 42, 43, 45, 47, 49, 50 }; + obj_conf_ids_vect[]={ 2, 4, 6, 7, 10, 11, 12, 14, 16, 18, 20, 22, 25, 26, 27, + 31, 32, 34, 38, 40, 42, 44, 45, 47, 49, 51, 52 }; vector conf_obj_ids(obj_conf_ids_vect, obj_conf_ids_vect + sizeof(obj_conf_ids_vect) / sizeof(int)); conf_items.resize(count); for(i=0; i < count; i++) { conf_items[i].conf_id=conf_ids[i]; - conf_items[i].obj_conf=(std::find(conf_obj_ids.begin(), conf_obj_ids.end(), i)!=conf_obj_ids.end()); + conf_items[i].obj_conf=(std::find(conf_obj_ids.begin(), conf_obj_ids.end(), i) != conf_obj_ids.end()); } color_picker=new ColorPickerWidget(3, this); @@ -302,8 +336,8 @@ void AppearanceConfigWidget::enableConfigElement(void) color_picker->setVisible(colors_lbl->isVisible()); //Buttons visible when a object configuration element is selected - //color_picker->setButtonVisible(1, conf_items[idx].obj_conf); - //color_picker->setButtonVisible(2, conf_items[idx].obj_conf); + color_picker->setButtonVisible(1, conf_items[idx].obj_conf); + color_picker->setButtonVisible(2, conf_items[idx].obj_conf); underline_chk->blockSignals(true); italic_chk->blockSignals(true); @@ -384,7 +418,7 @@ void AppearanceConfigWidget::restoreDefaults(void) { try { - BaseConfigWidget::restoreDefaults(GlobalAttributes::OBJECTS_STYLE_CONF); + BaseConfigWidget::restoreDefaults(GlobalAttributes::OBJECTS_STYLE_CONF, false); this->loadConfiguration(); setConfigurationChanged(true); } diff --git a/libpgmodeler_ui/src/baseconfigwidget.cpp b/libpgmodeler_ui/src/baseconfigwidget.cpp index 8a94221c0b..e211d74e14 100644 --- a/libpgmodeler_ui/src/baseconfigwidget.cpp +++ b/libpgmodeler_ui/src/baseconfigwidget.cpp @@ -99,7 +99,7 @@ void BaseConfigWidget::saveConfiguration(const QString &conf_id, map%1!").arg(bkp_filename), Messagebox::INFO_ICON); diff --git a/libpgmodeler_ui/src/baseconfigwidget.h b/libpgmodeler_ui/src/baseconfigwidget.h index 572f584f5f..9225a529ba 100644 --- a/libpgmodeler_ui/src/baseconfigwidget.h +++ b/libpgmodeler_ui/src/baseconfigwidget.h @@ -55,8 +55,9 @@ class BaseConfigWidget: public QWidget { //! \brief Get a configuratoin key from the xml parser void getConfigurationParams(map &config_params, const vector &key_attribs); - //! \brief Restore the configuration specified by conf_in loading them from the original file (conf/defaults) - void restoreDefaults(const QString &conf_id); + /*! \brief Restore the configuration specified by conf_in loading them from the original file (conf/defaults) + * The silent parameter indicates that the restoration should not emit a message box informing the restoration sucess */ + void restoreDefaults(const QString &conf_id, bool silent); //! \brief Adds a parameter to the specified configuration parameters set static void addConfigurationParam(map &config_params, const QString ¶m, const attribs_map &attribs); diff --git a/libpgmodeler_ui/src/baseform.cpp b/libpgmodeler_ui/src/baseform.cpp index 309c2b35b7..2618f48cd7 100644 --- a/libpgmodeler_ui/src/baseform.cpp +++ b/libpgmodeler_ui/src/baseform.cpp @@ -46,10 +46,12 @@ void BaseForm::resizeForm(QWidget *widget) screen_id = qApp->desktop()->screenNumber(qApp->activeWindow()); QScreen *screen=qApp->screens().at(screen_id); float dpi_factor = 0; + float pixel_ratio = 0; max_w = screen->size().width() * 0.70; max_h = screen->size().height() * 0.70; dpi_factor = screen->logicalDotsPerInch() / 96.0f; + pixel_ratio = screen->devicePixelRatio(); if(dpi_factor <= 1.01f) dpi_factor = 1.0f; @@ -102,8 +104,8 @@ void BaseForm::resizeForm(QWidget *widget) ((buttons_lt->contentsMargins().top() + buttons_lt->contentsMargins().bottom()) * 6); - curr_w *= dpi_factor; - curr_h *= dpi_factor; + curr_w *= dpi_factor * pixel_ratio; + curr_h *= dpi_factor * pixel_ratio; if(curr_w > screen->size().width()) curr_w = screen->size().width() * 0.80; @@ -113,6 +115,7 @@ void BaseForm::resizeForm(QWidget *widget) this->setMinimumSize(min_size); this->resize(curr_w, curr_h); + this->adjustSize(); } void BaseForm::closeEvent(QCloseEvent *) @@ -133,8 +136,8 @@ void BaseForm::setMainWidget(BaseObjectWidget *widget) resizeForm(widget); setButtonConfiguration(Messagebox::OK_CANCEL_BUTTONS); + connect(cancel_btn, SIGNAL(clicked(bool)), widget, SLOT(cancelConfiguration())); connect(cancel_btn, SIGNAL(clicked(bool)), this, SLOT(reject())); - //connect(this, SIGNAL(rejected()), widget, SLOT(cancelConfiguration())); connect(apply_ok_btn, SIGNAL(clicked(bool)), widget, SLOT(applyConfiguration())); connect(widget, SIGNAL(s_closeRequested()), this, SLOT(accept())); } diff --git a/libpgmodeler_ui/src/baseobjectwidget.cpp b/libpgmodeler_ui/src/baseobjectwidget.cpp index a1f300b212..69af6dd646 100644 --- a/libpgmodeler_ui/src/baseobjectwidget.cpp +++ b/libpgmodeler_ui/src/baseobjectwidget.cpp @@ -20,6 +20,7 @@ #include "permissionwidget.h" #include "customsqlwidget.h" #include "baseform.h" +#include "generalconfigwidget.h" const QColor BaseObjectWidget::PROT_LINE_BGCOLOR=QColor(255,180,180); const QColor BaseObjectWidget::PROT_LINE_FGCOLOR=QColor(80,80,80); @@ -61,12 +62,18 @@ BaseObjectWidget::BaseObjectWidget(QWidget *parent, ObjectType obj_type): QWidge tablespace_sel=new ObjectSelectorWidget(OBJ_TABLESPACE, true, this); owner_sel=new ObjectSelectorWidget(OBJ_ROLE, true, this); + alias_ht=new HintTextWidget(alias_hint, this); + alias_ht->setText(alias_edt->statusTip()); + baseobject_grid = new QGridLayout; baseobject_grid->setObjectName("objetobase_grid"); baseobject_grid->addWidget(protected_obj_frm, 0, 0, 1, 0); baseobject_grid->addWidget(name_lbl, 1, 0, 1, 1); baseobject_grid->addWidget(name_edt, 1, 1, 1, 1); baseobject_grid->addWidget(id_ico_wgt, 1, 2, 1, 3); + baseobject_grid->addWidget(logical_name_lbl, 2, 0, 1, 1); + baseobject_grid->addWidget(alias_edt, 2, 1, 1, 1); + baseobject_grid->addWidget(alias_hint_wgt, 2, 2, 1, 3); baseobject_grid->addWidget(schema_lbl, 4, 0, 1, 1); baseobject_grid->addWidget(schema_sel, 4, 1, 1, 4); baseobject_grid->addWidget(collation_lbl, 5, 0, 1, 1); @@ -156,14 +163,18 @@ void BaseObjectWidget::setRequiredField(QWidget *widget) } else if(edt || txt || sel) { - QPalette pal; - pal.setColor(QPalette::Base, bgcolor); - pal.setColor(QPalette::Text, QColor(0,0,0)); - if(sel) + { widget=sel->obj_name_txt; - - widget->setPalette(pal); + widget->setStyleSheet(QString("ObjectSelectorWidget > QPlainTextEdit { background-color: %1; }").arg(bgcolor.name())); + } + else + { + QPalette pal; + pal.setColor(QPalette::Base, bgcolor); + pal.setColor(QPalette::Text, QColor(0,0,0)); + widget->setPalette(pal); + } } str_aux=(!widget->toolTip().isEmpty() ? QString("\n") : QString()); @@ -212,7 +223,7 @@ void BaseObjectWidget::configureTabOrder(vector widgets) int idx=0, cnt=0; widgets.insert(widgets.begin(), - { name_edt, schema_sel , collation_sel, owner_sel, tablespace_sel, + { name_edt, alias_edt, alias_ht, schema_sel , collation_sel, owner_sel, tablespace_sel, comment_edt, append_sql_tb, edt_perms_tb, disable_sql_chk }); for(auto &wgt : widgets) @@ -284,6 +295,9 @@ void BaseObjectWidget::setAttributes(DatabaseModel *model, OperationList *op_lis if(!model || (uses_op_list && !op_list)) throw Exception(ERR_ASG_NOT_ALOC_OBJECT,__PRETTY_FUNCTION__,__FILE__,__LINE__); + if(op_list) + operation_count = op_list->getCurrentSize(); + this->model=model; if(parent_obj) @@ -344,17 +358,16 @@ void BaseObjectWidget::setAttributes(DatabaseModel *model, OperationList *op_lis if(object) { - //bool prot = false; - obj_id_lbl->setVisible(true); obj_id_lbl->setText(QString("ID: %1").arg(object->getObjectId())); - if(handled_obj_type!=BASE_OBJECT) + if(handled_obj_type != BASE_OBJECT) name_edt->setText(object->getName()); else name_edt->setText(object->getSignature()); comment_edt->setPlainText(object->getComment()); + alias_edt->setText(object->getAlias()); /* When creating a new table or relationship the object is pre allocated and the flag new_object is set. In order to avoid the selectors to have empty values, we check if the flag is false which means @@ -432,7 +445,11 @@ void BaseObjectWidget::configureFormLayout(QGridLayout *grid, ObjectType obj_typ obj_type!=OBJ_TEXTBOX && obj_type!=OBJ_TAG && obj_type!=OBJ_PARAMETER); - edt_perms_tb->setVisible(Permission::objectAcceptsPermission(obj_type)); + alias_edt->setVisible(BaseObject::acceptsAlias(obj_type)); + alias_hint_wgt->setVisible(BaseObject::acceptsAlias(obj_type)); + logical_name_lbl->setVisible(BaseObject::acceptsAlias(obj_type)); + + edt_perms_tb->setVisible(Permission::acceptsPermission(obj_type)); append_sql_tb->setVisible(BaseObject::acceptsCustomSQL(obj_type)); schema_lbl->setVisible(BaseObject::acceptsSchema(obj_type)); @@ -649,17 +666,23 @@ void BaseObjectWidget::editPermissions(void) permission_wgt->setAttributes(this->model, parent_obj, this->object); parent_form.setMainWidget(permission_wgt); parent_form.setButtonConfiguration(Messagebox::OK_BUTTON); + + GeneralConfigWidget::restoreWidgetGeometry(&parent_form, permission_wgt->metaObject()->className()); parent_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&parent_form, permission_wgt->metaObject()->className()); } void BaseObjectWidget::editCustomSQL(void) { BaseForm parent_form(this); - CustomSQLWidget *customsql_wgt=new CustomSQLWidget; + CustomSQLWidget *customsql_wgt=new CustomSQLWidget; + + customsql_wgt->setAttributes(this->model, this->object); + parent_form.setMainWidget(customsql_wgt); - customsql_wgt->setAttributes(this->model, this->object); - parent_form.setMainWidget(customsql_wgt); + GeneralConfigWidget::restoreWidgetGeometry(&parent_form, customsql_wgt->metaObject()->className()); parent_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&parent_form, customsql_wgt->metaObject()->className()); } void BaseObjectWidget::applyConfiguration(void) @@ -736,6 +759,9 @@ void BaseObjectWidget::applyConfiguration(void) object->setName(name_edt->text().trimmed().toUtf8()); } + if(alias_edt->isVisible()) + object->setAlias(alias_edt->text().trimmed()); + //Sets the object's comment if(comment_edt->isVisible()) object->setComment(comment_edt->toPlainText().toUtf8()); @@ -902,8 +928,8 @@ void BaseObjectWidget::cancelConfiguration(void) //If the object is not a new one, restore its previous state if(op_list && - ((!new_object && obj_type!=OBJ_DATABASE && obj_type!=OBJ_PERMISSION) || - (new_object && (obj_type==OBJ_TABLE || obj_type==OBJ_VIEW || obj_type==OBJ_RELATIONSHIP)))) + ((!new_object && obj_type!=OBJ_DATABASE && obj_type!=OBJ_PERMISSION && operation_count != op_list->getCurrentSize()) || + (new_object && (obj_type==OBJ_TABLE || obj_type==OBJ_VIEW || obj_type==OBJ_RELATIONSHIP)))) { try { diff --git a/libpgmodeler_ui/src/baseobjectwidget.h b/libpgmodeler_ui/src/baseobjectwidget.h index 4f31363919..9bcef52b06 100644 --- a/libpgmodeler_ui/src/baseobjectwidget.h +++ b/libpgmodeler_ui/src/baseobjectwidget.h @@ -33,6 +33,7 @@ #include "ui_baseobjectwidget.h" #include "pgsqltypewidget.h" #include "pgmodeleruins.h" +#include "hinttextwidget.h" /* Declaring the PgSQLType class as a Qt metatype in order to permit that instances of the class be used as data of QVariant and QMetaType */ @@ -54,6 +55,8 @@ class BaseObjectWidget: public QWidget, public Ui::BaseObjectWidget { QHBoxLayout *misc_btns_lt; + HintTextWidget *alias_ht; + //! \brief Store the kind of object being handled by the widget (configured in the constructor) ObjectType handled_obj_type; diff --git a/libpgmodeler_ui/src/codecompletionwidget.cpp b/libpgmodeler_ui/src/codecompletionwidget.cpp index 5324a4f59e..78c93b338b 100644 --- a/libpgmodeler_ui/src/codecompletionwidget.cpp +++ b/libpgmodeler_ui/src/codecompletionwidget.cpp @@ -35,7 +35,7 @@ CodeCompletionWidget::CodeCompletionWidget(QPlainTextEdit *code_field_txt, bool name_list=new QListWidget(completion_wgt); name_list->setSpacing(2); name_list->setIconSize(QSize(16,16)); - name_list->setSortingEnabled(true); + name_list->setSortingEnabled(false); persistent_chk=new QCheckBox(completion_wgt); persistent_chk->setText(trUtf8("Make &persistent")); @@ -49,9 +49,7 @@ CodeCompletionWidget::CodeCompletionWidget(QPlainTextEdit *code_field_txt, bool vbox->setSpacing(6); completion_wgt->setLayout(vbox); - QFont font=name_list->font(); - font.setPointSizeF(8); - name_list->setFont(font); + PgModelerUiNS::configureWidgetFont(name_list, PgModelerUiNS::MEDIUM_FONT_FACTOR); this->code_field_txt=code_field_txt; auto_triggered=false; @@ -258,6 +256,12 @@ void CodeCompletionWidget::insertCustomItems(const QStringList &names, const QSt } } +void CodeCompletionWidget::insertCustomItems(const QStringList &names, const QString &tooltip, ObjectType obj_type) +{ + for(auto &name : names) + insertCustomItem(name, tooltip, QPixmap(PgModelerUiNS::getIconPath(obj_type))); +} + void CodeCompletionWidget::clearCustomItems(void) { custom_items.clear(); diff --git a/libpgmodeler_ui/src/codecompletionwidget.h b/libpgmodeler_ui/src/codecompletionwidget.h index 347104e912..d8faf7a3d5 100644 --- a/libpgmodeler_ui/src/codecompletionwidget.h +++ b/libpgmodeler_ui/src/codecompletionwidget.h @@ -112,11 +112,14 @@ class CodeCompletionWidget: public QWidget highlighter uses an different configuration */ void configureCompletion(DatabaseModel *db_model, SyntaxHighlighter *syntax_hl=nullptr, const QString &keywords_grp=QString("keywords")); - //! \brief Inserts a custom named item on the list with a custom icon. Custom item will be always appear at the beggining of the list + //! \brief Inserts a custom named item on the list with a custom icon. Custom item will always appear at the beggining of the list void insertCustomItem(const QString &name, const QString &tooltip, const QPixmap &icon); - //! \brief Inserts several custom named item on the list with a custom icon. Custom item will be always appear at the beggining of the list + //! \brief Inserts several custom named item on the list with a custom icon. Custom item will always appear at the beggining of the list void insertCustomItems(const QStringList &names, const QStringList &tooltips, const QPixmap &icon); + +//! \brief Inserts several custom named items on the list with an icon related to the obj_type. Custom item will always appear at the beggining of the list + void insertCustomItems(const QStringList &names, const QString &tooltip, ObjectType obj_type); //! \brief Clear the custom added items void clearCustomItems(void); diff --git a/libpgmodeler_ui/src/columnwidget.cpp b/libpgmodeler_ui/src/columnwidget.cpp index 6eb8f8467e..f2eca51012 100644 --- a/libpgmodeler_ui/src/columnwidget.cpp +++ b/libpgmodeler_ui/src/columnwidget.cpp @@ -17,6 +17,9 @@ */ #include "columnwidget.h" +#include "sequencewidget.h" +#include "baseform.h" +#include "generalconfigwidget.h" ColumnWidget::ColumnWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_COLUMN) { @@ -26,6 +29,7 @@ ColumnWidget::ColumnWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_COLUMN QStringList list; Ui_ColumnWidget::setupUi(this); + edit_seq_btn->setVisible(false); IdentityType::getTypes(list); identity_type_cmb->addItems(list); @@ -44,7 +48,7 @@ ColumnWidget::ColumnWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_COLUMN column_grid->addWidget(default_value_grp,1,0,1,1); column_grid->addItem(spacer,column_grid->count(),0); - dynamic_cast(default_value_grp->layout())->addWidget(sequence_sel, 1, 1, 1, 2); + dynamic_cast(default_value_grp->layout())->addWidget(sequence_sel, 1, 1, 1, 6); configureFormLayout(column_grid, OBJ_COLUMN); configureTabOrder({ data_type }); @@ -59,6 +63,7 @@ ColumnWidget::ColumnWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_COLUMN def_value_txt->setEnabled(false); identity_type_cmb->setEnabled(false); notnull_chk->setEnabled(true); + edit_seq_btn->setVisible(false); }); connect(expression_rb, &QRadioButton::clicked, @@ -67,6 +72,7 @@ ColumnWidget::ColumnWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_COLUMN def_value_txt->setEnabled(true); identity_type_cmb->setEnabled(false); notnull_chk->setEnabled(true); + edit_seq_btn->setVisible(false); }); connect(identity_rb, &QRadioButton::clicked, @@ -76,8 +82,11 @@ ColumnWidget::ColumnWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_COLUMN identity_type_cmb->setEnabled(true); notnull_chk->setChecked(true); notnull_chk->setEnabled(false); + edit_seq_btn->setVisible(true); }); + connect(edit_seq_btn, SIGNAL(clicked(bool)), this, SLOT(editSequenceAttributes())); + setMinimumSize(540, 480); } catch(Exception &e) @@ -96,6 +105,9 @@ void ColumnWidget::setAttributes(DatabaseModel *model, OperationList *op_list, B BaseObjectWidget::setAttributes(model, op_list, column, parent_obj); sequence_sel->setModel(model); + ident_col_seq.setValues(QString(), QString(), QString(), QString(), QString()); + ident_col_seq.setCycle(false); + if(column) { type=column->getType(); @@ -104,13 +116,13 @@ void ColumnWidget::setAttributes(DatabaseModel *model, OperationList *op_list, B if(column->getSequence()) { - sequence_rb->setChecked(true); + sequence_rb->click(); sequence_sel->setEnabled(true); sequence_sel->setSelectedObject(column->getSequence()); } else if(column->getIdentityType() != BaseType::null) { - identity_rb->setChecked(true); + identity_rb->click(); identity_type_cmb->setEnabled(true); identity_type_cmb->setCurrentText(~column->getIdentityType()); notnull_chk->setEnabled(false); @@ -122,6 +134,37 @@ void ColumnWidget::setAttributes(DatabaseModel *model, OperationList *op_list, B UserTypeConfig::DOMAIN_TYPE | UserTypeConfig::EXTENSION_TYPE, true,false); } +void ColumnWidget::editSequenceAttributes(void) +{ + Column *col = dynamic_cast(this->object); + Schema *schema = nullptr; + BaseForm editing_form(this); + SequenceWidget *seq_wgt=new SequenceWidget; + BaseTable *table = col ? col->getParentTable() : nullptr; + + if(table) + schema = dynamic_cast(table->getSchema()); + else + schema = this->model->getSchema("public"); + + ident_col_seq.setName(QString("%1_%2_seq").arg(table ? table->getName() : QString()).arg(col ? col->getName() : QString("new_column"))); + ident_col_seq.setName(PgModelerNS::generateUniqueName(&ident_col_seq, *model->getObjectList(OBJ_SEQUENCE), false)); + ident_col_seq.setSchema(schema); + + if(col) + { + ident_col_seq.setDefaultValues(col->getType()); + ident_col_seq.setValues(col->getIdSeqMinValue(), col->getIdSeqMaxValue(), col->getIdSeqIncrement(), col->getIdSeqStart(), col->getIdSeqCache()); + ident_col_seq.setCycle(col->isIdSeqCycle()); + } + + seq_wgt->setAttributesReadonly(this->model, nullptr, nullptr, &ident_col_seq, col); + editing_form.setMainWidget(seq_wgt); + GeneralConfigWidget::restoreWidgetGeometry(&editing_form, seq_wgt->metaObject()->className()); + editing_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&editing_form, seq_wgt->metaObject()->className()); +} + void ColumnWidget::applyConfiguration(void) { try @@ -141,6 +184,9 @@ void ColumnWidget::applyConfiguration(void) else column->setIdentityType(IdentityType(identity_type_cmb->currentText())); + column->setIdSeqAttributes(ident_col_seq.getMinValue(), ident_col_seq.getMaxValue(), ident_col_seq.getIncrement(), + ident_col_seq.getStart(), ident_col_seq.getCache(), ident_col_seq.isCycle()); + if(table) { pk = dynamic_cast
(table)->getPrimaryKey(); diff --git a/libpgmodeler_ui/src/columnwidget.h b/libpgmodeler_ui/src/columnwidget.h index 42bf2dfa5c..c1b8780a0d 100644 --- a/libpgmodeler_ui/src/columnwidget.h +++ b/libpgmodeler_ui/src/columnwidget.h @@ -36,12 +36,14 @@ class ColumnWidget: public BaseObjectWidget, public Ui::ColumnWidget { SyntaxHighlighter *hl_default_value; PgSQLTypeWidget *data_type; ObjectSelectorWidget *sequence_sel; + Sequence ident_col_seq; public: ColumnWidget(QWidget * parent = 0); void setAttributes(DatabaseModel *model, OperationList *op_list, BaseObject *parent_obj, Column *column); private slots: + void editSequenceAttributes(void); public slots: void applyConfiguration(void); diff --git a/libpgmodeler_ui/src/configurationform.cpp b/libpgmodeler_ui/src/configurationform.cpp index b832b17f4d..d6bd1ad561 100644 --- a/libpgmodeler_ui/src/configurationform.cpp +++ b/libpgmodeler_ui/src/configurationform.cpp @@ -97,7 +97,6 @@ void ConfigurationForm::applyConfiguration(void) general_conf->applyConfiguration(); relationships_conf->applyConfiguration(); - QDialog::accept(); } diff --git a/libpgmodeler_ui/src/connectionsconfigwidget.cpp b/libpgmodeler_ui/src/connectionsconfigwidget.cpp index 6af970c210..6a764e5dda 100644 --- a/libpgmodeler_ui/src/connectionsconfigwidget.cpp +++ b/libpgmodeler_ui/src/connectionsconfigwidget.cpp @@ -451,7 +451,7 @@ void ConnectionsConfigWidget::restoreDefaults(void) try { //Restore the default connection config file - BaseConfigWidget::restoreDefaults(GlobalAttributes::CONNECTIONS_CONF); + BaseConfigWidget::restoreDefaults(GlobalAttributes::CONNECTIONS_CONF, false); //Remove all connections while(connections_cmb->count() > 0) diff --git a/libpgmodeler_ui/src/constraintwidget.cpp b/libpgmodeler_ui/src/constraintwidget.cpp index 4bb4eca7c1..6b8b06736b 100644 --- a/libpgmodeler_ui/src/constraintwidget.cpp +++ b/libpgmodeler_ui/src/constraintwidget.cpp @@ -309,9 +309,6 @@ void ConstraintWidget::selectConstraintType(void) no_inherit_lbl->setVisible(constr_type==ConstraintType::check); warn_frm->setVisible(constr_type==ConstraintType::check); - /*fill_factor_lbl->setVisible(constr_type==ConstraintType::unique || - constr_type==ConstraintType::primary_key || - constr_type==ConstraintType::exclude); */ fill_factor_chk->setVisible(constr_type==ConstraintType::unique || constr_type==ConstraintType::primary_key || constr_type==ConstraintType::exclude); diff --git a/libpgmodeler_ui/src/csvloadwidget.cpp b/libpgmodeler_ui/src/csvloadwidget.cpp index 28f794e1a8..164ed909df 100644 --- a/libpgmodeler_ui/src/csvloadwidget.cpp +++ b/libpgmodeler_ui/src/csvloadwidget.cpp @@ -147,11 +147,7 @@ void CsvLoadWidget::loadCsvFile(void) if(!csv_buffer.isEmpty()) { - QString separator; - QStringList separators={ QString(";"), QString(","), QString(" "), QString("\t") }; - separators += (separator_edt->text().isEmpty() ? QString(";") : separator_edt->text()); - separator = separators[separator_cmb->currentIndex()]; - csv_rows = loadCsvFromBuffer(csv_buffer, separator, + csv_rows = loadCsvFromBuffer(csv_buffer, getSeparator(), txt_delim_chk->isChecked() ? txt_delim_edt->text() : QString(), col_names_chk->isChecked(), csv_columns); } @@ -160,6 +156,13 @@ void CsvLoadWidget::loadCsvFile(void) emit s_csvFileLoaded(); } +QString CsvLoadWidget::getSeparator(void) +{ + QStringList separators={ QString(";"), QString(","), QString(" "), QString("\t") }; + separators += (separator_edt->text().isEmpty() ? QString(";") : separator_edt->text()); + return(separators[separator_cmb->currentIndex()]); +} + QString CsvLoadWidget::getCsvBuffer(QString separator, QString line_break) { QString buffer; @@ -185,3 +188,17 @@ bool CsvLoadWidget::isColumnsInFirstRow(void) { return(col_names_chk->isChecked()); } + +void CsvLoadWidget::loadCsvBuffer(const QString csv_buffer, const QString &separator, const QString &text_delim, bool cols_in_first_row) +{ + csv_columns.clear(); + csv_rows.clear(); + csv_rows = loadCsvFromBuffer(csv_buffer, separator, text_delim, cols_in_first_row, csv_columns); +} + +void CsvLoadWidget::loadCsvBuffer(const QString csv_buffer) +{ + loadCsvBuffer(csv_buffer, getSeparator(), + txt_delim_chk->isChecked() ? txt_delim_edt->text() : QString(), + col_names_chk->isChecked()); +} diff --git a/libpgmodeler_ui/src/csvloadwidget.h b/libpgmodeler_ui/src/csvloadwidget.h index be030eb609..ec5f875858 100644 --- a/libpgmodeler_ui/src/csvloadwidget.h +++ b/libpgmodeler_ui/src/csvloadwidget.h @@ -55,6 +55,15 @@ class CsvLoadWidget : public QWidget, Ui::CsvLoadWidget { bool isColumnsInFirstRow(void); + /*! \brief Loads a csv document from a buffer and stores the result in the internal csv_columns and csv_rows attributes for later usage. + * The separator and text delimiter chars can be specified overriding the ones configured in the widget */ + void loadCsvBuffer(const QString csv_buffer, const QString &separator, const QString &text_delim, bool cols_in_first_row); + + //! \brief Loads a csv document from a buffer and stores the result in the internal csv_columns and csv_rows attributes for later usage. + void loadCsvBuffer(const QString csv_buffer); + + QString getSeparator(void); + /*! \brief Loads a csv document from a buffer. The user can specify the value separator, text delimiter and an object which will store the column names. * In that case, the column names are only extracted from the first row if the cols_in_first_row is true */ static QList loadCsvFromBuffer(const QString &csv_buffer, const QString &separator, const QString &text_delim, bool cols_in_first_row, QStringList &csv_cols); diff --git a/libpgmodeler_ui/src/databaseexplorerwidget.cpp b/libpgmodeler_ui/src/databaseexplorerwidget.cpp index 1f47174fe2..e662c12a38 100644 --- a/libpgmodeler_ui/src/databaseexplorerwidget.cpp +++ b/libpgmodeler_ui/src/databaseexplorerwidget.cpp @@ -93,7 +93,13 @@ const attribs_map DatabaseExplorerWidget::attribs_i18n { {SERVER_VERSION, QT_TR_NOOP("Server version")}, {IDENT_FILE, QT_TR_NOOP("Ident file")}, {PASSWORD_ENCRYPTION, QT_TR_NOOP("Password encryption")}, {CONNECTION, QT_TR_NOOP("Connection ID")}, {SERVER_PID, QT_TR_NOOP("Server PID")}, {SERVER_PROTOCOL, QT_TR_NOOP("Server protocol")}, {REFERRERS, QT_TR_NOOP("Referrers")}, {IDENTITY_TYPE, QT_TR_NOOP("Identity")}, {COMMAND, QT_TR_NOOP("Command")}, - {USING_EXP, QT_TR_NOOP("USING expr.")}, {CHECK_EXP, QT_TR_NOOP("CHECK expr.")}, {ROLES, QT_TR_NOOP("Roles")} + {USING_EXP, QT_TR_NOOP("USING expr.")}, {CHECK_EXP, QT_TR_NOOP("CHECK expr.")}, {ROLES, QT_TR_NOOP("Roles")}, + {RLS_ENABLED, QT_TR_NOOP("RLS enabled")}, {RLS_FORCED, QT_TR_NOOP("RLS forced")}, {INDEX_SCAN, QT_TR_NOOP("Index scans")}, + {INDEX_SCAN_READ, QT_TR_NOOP("Index scans tuples")}, {LAST_ANALYZE, QT_TR_NOOP("Last analyze")}, {LAST_AUTOVACUUM, QT_TR_NOOP("Last autovacuum")}, + {LAST_VACUUM, QT_TR_NOOP("Last vacuum")}, {TUPLES_DEL, QT_TR_NOOP("Tuples deleted")}, {TUPLES_UPD, QT_TR_NOOP("Tuples updated")}, + {TUPLES_INS, QT_TR_NOOP("Tuples inserted")}, {SEQ_SCAN, QT_TR_NOOP("Sequential scans")}, {SEQ_SCAN_READ, QT_TR_NOOP("Sequential scans tuples")}, + {VACUUM_COUNT, QT_TR_NOOP("Vacuum count")}, {AUTOVACUUM_COUNT, QT_TR_NOOP("Autovacuum count")}, {ANALYZE_COUNT, QT_TR_NOOP("Analyze count")}, + {AUTOANALYZE_COUNT, QT_TR_NOOP("Autoanalyze count")} }; DatabaseExplorerWidget::DatabaseExplorerWidget(QWidget *parent): QWidget(parent) @@ -509,7 +515,9 @@ void DatabaseExplorerWidget::formatOperatorAttribs(attribs_map &attribs) void DatabaseExplorerWidget::formatTableAttribs(attribs_map &attribs) { formatBooleanAttribs(attribs, { ParsersAttributes::OIDS, - ParsersAttributes::UNLOGGED }); + ParsersAttributes::UNLOGGED, + ParsersAttributes::RLS_ENABLED, + ParsersAttributes::RLS_FORCED}); formatOidAttribs(attribs, { ParsersAttributes::PARENTS }, OBJ_TABLE, true); } @@ -943,9 +951,10 @@ void DatabaseExplorerWidget::listObjects(void) root->addChild(curr_root); objects_trw->addTopLevelItem(root); root->setExpanded(true); + root->setSelected(true); + objects_trw->setCurrentItem(root); QApplication::restoreOverrideCursor(); - objects_trw->blockSignals(false); import_helper.closeConnection(); @@ -1247,54 +1256,70 @@ void DatabaseExplorerWidget::dropObject(QTreeWidgetItem *item, bool cascade) } } -void DatabaseExplorerWidget::truncateTable(QTreeWidgetItem *item, bool cascade) +bool DatabaseExplorerWidget::truncateTable(const QString &sch_name, const QString &obj_name, bool cascade, Connection connection) { - Messagebox msg_box; - try { - if(item && static_cast(item->data(DatabaseImportForm::OBJECT_ID, Qt::UserRole).toUInt()) > 0) - { - QString msg, obj_name, sch_name; + Messagebox msg_box; + QString msg; - obj_name=item->data(DatabaseImportForm::OBJECT_NAME, Qt::UserRole).toString(); - sch_name=BaseObject::formatName(item->data(DatabaseImportForm::OBJECT_SCHEMA, Qt::UserRole).toString()); + if(!cascade) + msg=trUtf8("Do you really want to truncate the table %1.%2?").arg(sch_name).arg(obj_name); + else + msg=trUtf8("Do you really want to truncate in cascade mode the table %1.%2? This action will truncate all the tables that depends on it?").arg(sch_name).arg(obj_name); - if(!cascade) - msg=trUtf8("Do you really want to truncate the table %1?").arg(obj_name); - else - msg=trUtf8("Do you really want to cascade truncate the table %1? This action will truncate all the tables that depends on it?").arg(obj_name); + msg_box.setCustomOptionText(trUtf8("Also restart sequences")); + msg_box.show(msg, Messagebox::CONFIRM_ICON, Messagebox::YES_NO_BUTTONS); - msg_box.show(msg, Messagebox::CONFIRM_ICON, Messagebox::YES_NO_BUTTONS); + if(msg_box.result()==QDialog::Accepted) + { + attribs_map attribs; + QString truc_cmd; + Connection conn; + SchemaParser schparser; - if(msg_box.result()==QDialog::Accepted) - { - attribs_map attribs; - QString truc_cmd; - Connection conn; + attribs[ParsersAttributes::SQL_OBJECT]=BaseObject::getSQLName(OBJ_TABLE); + attribs[ParsersAttributes::SIGNATURE]=QString("%1.%2").arg(BaseObject::formatName(sch_name)).arg(BaseObject::formatName(obj_name)); + attribs[ParsersAttributes::CASCADE]=(cascade ? ParsersAttributes::_TRUE_ : ""); + attribs[ParsersAttributes::RESTART_SEQ]=(msg_box.isCustomOptionChecked() ? ParsersAttributes::_TRUE_ : ""); - attribs[ParsersAttributes::SQL_OBJECT]=BaseObject::getSQLName(OBJ_TABLE); - attribs[ParsersAttributes::SIGNATURE]=sch_name + QString(".\"%1\"").arg(obj_name); - attribs[ParsersAttributes::CASCADE]=(cascade ? ParsersAttributes::_TRUE_ : ""); + //Generate the truncate command + schparser.ignoreEmptyAttributes(true); + schparser.ignoreUnkownAttributes(true); + truc_cmd=schparser.getCodeDefinition(GlobalAttributes::SCHEMAS_ROOT_DIR + GlobalAttributes::DIR_SEPARATOR + + GlobalAttributes::ALTER_SCHEMA_DIR + GlobalAttributes::DIR_SEPARATOR + + ParsersAttributes::TRUNCATE + GlobalAttributes::SCHEMA_EXT, + attribs); + //Executes the truncate cmd + conn = connection; + conn.connect(); + conn.executeDDLCommand(truc_cmd); + } - //Generate the truncate command - schparser.ignoreEmptyAttributes(true); - schparser.ignoreUnkownAttributes(true); - truc_cmd=schparser.getCodeDefinition(GlobalAttributes::SCHEMAS_ROOT_DIR + GlobalAttributes::DIR_SEPARATOR + - GlobalAttributes::ALTER_SCHEMA_DIR + GlobalAttributes::DIR_SEPARATOR + - ParsersAttributes::TRUNCATE + GlobalAttributes::SCHEMA_EXT, - attribs); + return(msg_box.result()==QDialog::Accepted); + } + catch(Exception &e) + { + throw Exception(e.getErrorMessage(), e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__); + } +} - //Executes the truncate cmd - conn=connection; - conn.connect(); - conn.executeDDLCommand(truc_cmd); - } +void DatabaseExplorerWidget::truncateTable(QTreeWidgetItem *item, bool cascade) +{ + try + { + if(item && static_cast(item->data(DatabaseImportForm::OBJECT_ID, Qt::UserRole).toUInt()) > 0) + { + QString obj_name, sch_name; + obj_name=item->data(DatabaseImportForm::OBJECT_NAME, Qt::UserRole).toString(); + sch_name=BaseObject::formatName(item->data(DatabaseImportForm::OBJECT_SCHEMA, Qt::UserRole).toString()); + truncateTable(sch_name, obj_name, cascade, connection); } } catch(Exception &e) { + Messagebox msg_box; msg_box.show(e); } } @@ -1722,7 +1747,7 @@ void DatabaseExplorerWidget::loadObjectSource(void) attribs_map attribs=item->data(DatabaseImportForm::OBJECT_OTHER_DATA, Qt::UserRole).value(); bool is_column=false; unsigned oid=item->data(DatabaseImportForm::OBJECT_ID, Qt::UserRole).toUInt(), - db_oid=objects_trw->topLevelItem(0)->data(DatabaseImportForm::OBJECT_ID, Qt::UserRole).toUInt(), + db_oid=objects_trw->topLevelItem(0)->child(0)->data(DatabaseImportForm::OBJECT_ID, Qt::UserRole).toUInt(), sys_oid=0; int sbar_value=(objects_trw->verticalScrollBar() ? objects_trw->verticalScrollBar()->value() : 0); @@ -1754,7 +1779,9 @@ void DatabaseExplorerWidget::loadObjectSource(void) import_hlp.setImportOptions(toggle_disp_menu.actions().at(0)->isChecked(), toggle_disp_menu.actions().at(1)->isChecked(), true, false, false, false, false); + import_hlp.setSelectedOIDs(&dbmodel, {{OBJ_DATABASE, {db_oid}}, {obj_type,{oid}}}, {}); + sys_oid=import_hlp.getLastSystemOID(); //Currently pgModeler does not support the visualization of base types and built-in ones @@ -1886,13 +1913,6 @@ QString DatabaseExplorerWidget::getObjectSource(BaseObject *object, DatabaseMode void DatabaseExplorerWidget::openDataGrid(const QString &schema, const QString &table, bool hide_views) { -#ifdef DEMO_VERSION -#warning "DEMO VERSION: data manipulation feature disabled warning." - Messagebox msg_box; - msg_box.show(trUtf8("Warning"), - trUtf8("You're running a demonstration version! The data manipulation feature is available only in the full version!"), - Messagebox::ALERT_ICON, Messagebox::OK_BUTTON); -#else DataManipulationForm *data_manip=new DataManipulationForm; Connection conn=Connection(this->connection.getConnectionParams()); @@ -1904,7 +1924,6 @@ void DatabaseExplorerWidget::openDataGrid(const QString &schema, const QString & PgModelerUiNS::resizeDialog(data_manip); data_manip->show(); -#endif } void DatabaseExplorerWidget::dropDatabase(void) diff --git a/libpgmodeler_ui/src/databaseexplorerwidget.h b/libpgmodeler_ui/src/databaseexplorerwidget.h index cd58b1c9f4..b9ae5037b7 100644 --- a/libpgmodeler_ui/src/databaseexplorerwidget.h +++ b/libpgmodeler_ui/src/databaseexplorerwidget.h @@ -155,6 +155,9 @@ class DatabaseExplorerWidget: public QWidget, public Ui::DatabaseExplorerWidget //! \brief Clears the object's properties table void clearObjectProperties(void); + //! \brief Truncates a named table (in cascade mode or not) using the provided connection + static bool truncateTable(const QString &sch_name, const QString &obj_name, bool cascade, Connection connection); + public slots: //! \brief Lists all objects for the current selected database void listObjects(void); diff --git a/libpgmodeler_ui/src/databaseimporthelper.cpp b/libpgmodeler_ui/src/databaseimporthelper.cpp index 8743cae066..931053c2ca 100644 --- a/libpgmodeler_ui/src/databaseimporthelper.cpp +++ b/libpgmodeler_ui/src/databaseimporthelper.cpp @@ -1473,7 +1473,11 @@ void DatabaseImportHelper::createSequence(attribs_map &attribs) //Disable the sequence's SQL when the owner column is identity if(col && col->isIdentity()) + { + col->setIdSeqAttributes(seq->getMinValue(), seq->getMaxValue(), seq->getIncrement(), + seq->getStart(), seq->getCache(), seq->isCycle()); seq->setSQLDisabled(true); + } } catch(Exception &e) { @@ -1670,8 +1674,8 @@ void DatabaseImportHelper::createTable(attribs_map &attribs) { /* Building the type name prepending the schema name in order to search it on the user defined types list at PgSQLType class */ - type_name=getObjectName(types[type_oid][ParsersAttributes::SCHEMA], true); - type_name+=QString(".") + types[type_oid][ParsersAttributes::NAME]; + type_name=BaseObject::formatName(getObjectName(types[type_oid][ParsersAttributes::SCHEMA], true), false); + type_name+=QString(".") + BaseObject::formatName(types[type_oid][ParsersAttributes::NAME], false); is_type_registered=PgSQLType::isRegistered(type_name, dbmodel); } else @@ -1695,6 +1699,7 @@ void DatabaseImportHelper::createTable(attribs_map &attribs) type_def=getDependencyObject(itr->second[ParsersAttributes::TYPE_OID], OBJ_DOMAIN); } + col.setIdentityType(BaseType::null); col.setType(PgSQLType::parseString(type_name)); col.setNotNull(!itr->second[ParsersAttributes::NOT_NULL].isEmpty()); col.setComment(itr->second[ParsersAttributes::COMMENT]); @@ -2131,7 +2136,7 @@ void DatabaseImportHelper::createPermission(attribs_map &attribs) Permission *perm=nullptr; QString sig; - if(Permission::objectAcceptsPermission(obj_type)) + if(Permission::acceptsPermission(obj_type)) { QStringList perm_list; vector privs, gop_privs; diff --git a/libpgmodeler_ui/src/datamanipulationform.cpp b/libpgmodeler_ui/src/datamanipulationform.cpp index 64ab8b381e..356f4979f8 100644 --- a/libpgmodeler_ui/src/datamanipulationform.cpp +++ b/libpgmodeler_ui/src/datamanipulationform.cpp @@ -23,6 +23,8 @@ #include "plaintextitemdelegate.h" #include "baseform.h" #include "bulkdataeditwidget.h" +#include "databaseexplorerwidget.h" +#include "generalconfigwidget.h" const QColor DataManipulationForm::ROW_COLORS[3]={ QColor(QString("#C0FFC0")), QColor(QString("#FFFFC0")), QColor(QString("#FFC0C0")) }; const unsigned DataManipulationForm::NO_OPERATION=0; @@ -67,6 +69,10 @@ DataManipulationForm::DataManipulationForm(QWidget * parent, Qt::WindowFlags f): paste_tb->setEnabled(true); }); + truncate_tb->setMenu(&truncate_menu); + truncate_menu.addAction(QIcon(PgModelerUiNS::getIconPath("truncate")), trUtf8("Truncate"), this, SLOT(truncateTable()))->setData(QVariant::fromValue(false)); + truncate_menu.addAction(QIcon(PgModelerUiNS::getIconPath("trunccascade")), trUtf8("Truncate cascade"), this, SLOT(truncateTable()))->setData(QVariant::fromValue(true)); + copy_tb->setMenu(©_menu); refresh_tb->setToolTip(refresh_tb->toolTip() + QString(" (%1)").arg(refresh_tb->shortcut().toString())); save_tb->setToolTip(save_tb->toolTip() + QString(" (%1)").arg(save_tb->shortcut().toString())); @@ -96,7 +102,7 @@ DataManipulationForm::DataManipulationForm(QWidget * parent, Qt::WindowFlags f): paste_tb->setEnabled(false); }); - connect(csv_load_tb, SIGNAL(toggled(bool)), csv_load_parent, SLOT(setVisible(bool))); + connect(csv_load_tb, SIGNAL(toggled(bool)), csv_load_parent, SLOT(setVisible(bool))); connect(close_btn, SIGNAL(clicked()), this, SLOT(reject())); connect(schema_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(listTables())); connect(hide_views_chk, SIGNAL(toggled(bool)), this, SLOT(listTables())); @@ -116,11 +122,15 @@ DataManipulationForm::DataManipulationForm(QWidget * parent, Qt::WindowFlags f): connect(duplicate_tb, SIGNAL(clicked()), this, SLOT(duplicateRows())); connect(undo_tb, SIGNAL(clicked()), this, SLOT(undoOperations())); connect(save_tb, SIGNAL(clicked()), this, SLOT(saveChanges())); - connect(bulkedit_tb, SIGNAL(clicked()), this, SLOT(bulkDataEdit())); connect(ord_columns_lst, SIGNAL(currentRowChanged(int)), this, SLOT(enableColumnControlButtons())); connect(move_down_tb, SIGNAL(clicked()), this, SLOT(swapColumns())); connect(move_up_tb, SIGNAL(clicked()), this, SLOT(swapColumns())); connect(filter_tb, SIGNAL(toggled(bool)), v_splitter, SLOT(setVisible(bool))); + connect(truncate_tb, SIGNAL(clicked(bool)), this, SLOT(truncateTable())); + + connect(bulkedit_tb, &QToolButton::clicked, [&](){ + PgModelerUiNS::bulkDataEdit(results_tbw); + }); connect(filter_tb, &QToolButton::toggled, [&](bool checked){ @@ -164,7 +174,7 @@ DataManipulationForm::DataManipulationForm(QWidget * parent, Qt::WindowFlags f): act = item_menu.addAction(delete_tb->icon(), trUtf8("Delete row(s)"), this, SLOT(markDeleteOnRows()), delete_tb->shortcut()); act->setEnabled(delete_tb->isEnabled()); - act = item_menu.addAction(bulkedit_tb->icon(), trUtf8("Edit cell(s)"), this, SLOT(bulkDataEdit()), bulkedit_tb->shortcut()); + act = item_menu.addAction(bulkedit_tb->icon(), trUtf8("Edit cell(s)"), bulkedit_tb, SLOT(click()), bulkedit_tb->shortcut()); act->setEnabled(bulkedit_tb->isEnabled()); } @@ -224,7 +234,13 @@ void DataManipulationForm::setAttributes(Connection conn, const QString curr_sch void DataManipulationForm::setHasCsvClipboard(bool value) { - has_csv_clipboard = value; + has_csv_clipboard = value; +} + +void DataManipulationForm::reject(void) +{ + GeneralConfigWidget::saveWidgetGeometry(this); + QDialog::reject(); } void DataManipulationForm::listTables(void) @@ -374,6 +390,13 @@ void DataManipulationForm::retrieveData(void) paste_tb->setEnabled(!qApp->clipboard()->text().isEmpty() && table_cmb->currentData().toUInt() == OBJ_TABLE && !col_names.isEmpty()); + + truncate_tb->setEnabled(table_cmb->currentData().toUInt() == OBJ_TABLE && + res.getTupleCount() > 0 && + !col_names.isEmpty()); + + code_compl_wgt->clearCustomItems(); + code_compl_wgt->insertCustomItems(col_names, trUtf8("Column"), OBJ_COLUMN); } catch(Exception &e) { @@ -394,6 +417,8 @@ void DataManipulationForm::disableControlButtons(void) add_tb->setEnabled(false); duplicate_tb->setEnabled(false); export_tb->setEnabled(false); + paste_tb->setEnabled(false); + truncate_tb->setEnabled(false); csv_load_tb->setEnabled(false); csv_load_tb->setChecked(false); clearChangedRows(); @@ -530,7 +555,7 @@ void DataManipulationForm::loadDataFromCsv(bool load_from_clipboard) addRow(); row_id=results_tbw->rowCount() - 1; - for(int i = 0; i < values.count(); i++) + for(int i = 0; i < values.count() && i < cols.count(); i++) { if((!load_from_clipboard && csv_load_wgt->isColumnsInFirstRow()) || (load_from_clipboard && !cols.isEmpty())) @@ -1124,31 +1149,6 @@ void DataManipulationForm::browseReferrerTable(void) browseTable(qobject_cast(sender())->data().toString(), true); } -void DataManipulationForm::bulkDataEdit(void) -{ - BaseForm base_frm; - BulkDataEditWidget *bulkedit_wgt = new BulkDataEditWidget; - - base_frm.setMainWidget(bulkedit_wgt); - base_frm.setButtonConfiguration(Messagebox::OK_CANCEL_BUTTONS); - - if(base_frm.exec() == QDialog::Accepted) - { - QList sel_ranges=results_tbw->selectedRanges(); - - for(auto range : sel_ranges) - { - for(int row = range.topRow(); row <= range.bottomRow(); row++) - { - for(int col = range.leftColumn(); col <= range.rightColumn(); col++) - { - results_tbw->item(row, col)->setText(bulkedit_wgt->value_edt->toPlainText()); - } - } - } - } -} - void DataManipulationForm::browseReferencedTable(void) { browseTable(qobject_cast(sender())->data().toString(), false); @@ -1219,6 +1219,13 @@ void DataManipulationForm::insertRowOnTabPress(int curr_row, int curr_col, int p void DataManipulationForm::saveChanges(void) { +#ifdef DEMO_VERSION +#warning "DEMO VERSION: data manipulation save feature disabled warning." + Messagebox msg_box; + msg_box.show(trUtf8("Warning"), + trUtf8("You're running a demonstration version! The save feature of the data manipulation form is available only in the full version!"), + Messagebox::ALERT_ICON, Messagebox::OK_BUTTON); +#else int row=0; Connection conn=Connection(tmpl_conn_params); @@ -1281,6 +1288,7 @@ void DataManipulationForm::saveChanges(void) .arg(op_names[op_type]).arg(tab_name).arg(row + 1).arg(e.getErrorMessage()), ERR_ROW_DATA_NOT_MANIPULATED,__PRETTY_FUNCTION__,__FILE__,__LINE__, &e); } +#endif } QString DataManipulationForm::getDMLCommand(int row) @@ -1394,3 +1402,50 @@ QString DataManipulationForm::getDMLCommand(int row) return(fmt_cmd); } + +void DataManipulationForm::resizeEvent(QResizeEvent *event) +{ + Qt::ToolButtonStyle style = Qt::ToolButtonIconOnly; + QToolButton *btn = nullptr; + + if(event->size().width() > this->baseSize().width()) + style = Qt::ToolButtonTextBesideIcon; + + if(refresh_tb->toolButtonStyle() != style) + { + for(auto obj : bnts_parent_wgt->children()) + { + btn = qobject_cast(obj); + + if(btn) + btn->setToolButtonStyle(style); + } + } +} + +void DataManipulationForm::closeEvent(QCloseEvent *) +{ + GeneralConfigWidget::saveWidgetGeometry(this); +} + +void DataManipulationForm::showEvent(QShowEvent *) +{ + GeneralConfigWidget::restoreWidgetGeometry(this); +} + +void DataManipulationForm::truncateTable(void) +{ + try + { + QAction *act = dynamic_cast(sender()); + + if(DatabaseExplorerWidget::truncateTable(schema_cmb->currentText(), table_cmb->currentText(), + act->data().toBool(), Connection(tmpl_conn_params))) + retrieveData(); + } + catch(Exception &e) + { + Messagebox msg_box; + msg_box.show(e); + } +} diff --git a/libpgmodeler_ui/src/datamanipulationform.h b/libpgmodeler_ui/src/datamanipulationform.h index 30f91b75ec..a19ff6f7d2 100644 --- a/libpgmodeler_ui/src/datamanipulationform.h +++ b/libpgmodeler_ui/src/datamanipulationform.h @@ -49,7 +49,7 @@ class DataManipulationForm: public QDialog, public Ui::DataManipulationForm { CodeCompletionWidget *code_compl_wgt; - QMenu fks_menu, copy_menu; + QMenu fks_menu, copy_menu, truncate_menu; //! \brief Store the template connection params to be used by catalogs and command execution connections attribs_map tmpl_conn_params; @@ -102,6 +102,10 @@ class DataManipulationForm: public QDialog, public Ui::DataManipulationForm { //! brief Browse a referenced or referencing table by the provided foreign key name void browseTable(const QString &fk_name, bool browse_ref_tab); + void resizeEvent(QResizeEvent *event); + void closeEvent(QCloseEvent *); + void showEvent(QShowEvent *); + public: DataManipulationForm(QWidget * parent = 0, Qt::WindowFlags f = 0); @@ -111,6 +115,8 @@ class DataManipulationForm: public QDialog, public Ui::DataManipulationForm { static void setHasCsvClipboard(bool value); private slots: + void reject(void); + //! \brief List the tables based upon the current schema void listTables(void); @@ -171,14 +177,14 @@ class DataManipulationForm: public QDialog, public Ui::DataManipulationForm { //! \brief Add new rows to the grid based upon the CSV loaded void loadDataFromCsv(bool load_from_clipboard = false); - //! brief Browse the referenced table data using the selected row in the results grid + //! \brief Browse the referenced table data using the selected row in the results grid void browseReferencedTable(void); - //! brief Browse the referencing table data using the selected row in the results grid + //! \brief Browse the referencing table data using the selected row in the results grid void browseReferrerTable(void); - //! brief Changes the values of the grid selection at once - void bulkDataEdit(void); + //! \brief Truncates the browsed table + void truncateTable(void); }; #endif diff --git a/libpgmodeler_ui/src/generalconfigwidget.cpp b/libpgmodeler_ui/src/generalconfigwidget.cpp index 80bd4c378a..885b931a94 100644 --- a/libpgmodeler_ui/src/generalconfigwidget.cpp +++ b/libpgmodeler_ui/src/generalconfigwidget.cpp @@ -27,6 +27,7 @@ #include "sqlexecutionwidget.h" map GeneralConfigWidget::config_params; +map GeneralConfigWidget::widgets_geom; GeneralConfigWidget::GeneralConfigWidget(QWidget * parent) : BaseConfigWidget(parent) { @@ -86,10 +87,10 @@ GeneralConfigWidget::GeneralConfigWidget(QWidget * parent) : BaseConfigWidget(pa connect(tab_width_chk, SIGNAL(toggled(bool)), tab_width_spb, SLOT(setEnabled(bool))); connect(tab_width_chk, SIGNAL(toggled(bool)), this, SLOT(updateFontPreview())); - connect(max_result_rows_chk, SIGNAL(toggled(bool)), max_result_rows_spb, SLOT(setEnabled(bool))); - connect(font_preview_txt, SIGNAL(cursorPositionChanged()), this, SLOT(updateFontPreview())); connect(select_editor_btn, SIGNAL(clicked(bool)), this, SLOT(selectSourceEditor())); + connect(save_restore_geometry_chk, SIGNAL(toggled(bool)), reset_sizes_tb, SLOT(setEnabled(bool))); + connect(reset_sizes_tb, SIGNAL(clicked(bool)), this, SLOT(resetDialogsSizes())); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::GRID_SIZE]=QString(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::OP_LIST_SIZE]=QString(); @@ -129,7 +130,7 @@ GeneralConfigWidget::GeneralConfigWidget(QWidget * parent) : BaseConfigWidget(pa config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SOURCE_EDITOR_APP]=QString(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::UI_LANGUAGE]=QString(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::USE_CURVED_LINES]=QString(); - config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::MAX_RESULT_ROWS]=QString(); + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes:: SAVE_RESTORE_GEOMETRY]=QString(); simp_obj_creation_ht=new HintTextWidget(simp_obj_creation_hint, this); simp_obj_creation_ht->setText(simple_obj_creation_chk->statusTip()); @@ -182,9 +183,6 @@ GeneralConfigWidget::GeneralConfigWidget(QWidget * parent) : BaseConfigWidget(pa use_curved_lines_ht=new HintTextWidget(use_curved_lines_hint, this); use_curved_lines_ht->setText(use_curved_lines_chk->statusTip()); - max_result_rows_ht=new HintTextWidget(max_result_rows_hint, this); - max_result_rows_ht->setText(max_result_rows_spb->statusTip()); - selectPaperSize(); QList chk_boxes=this->findChildren(); @@ -265,7 +263,7 @@ void GeneralConfigWidget::loadConfiguration(void) QStringList margin, custom_size; vector key_attribs; unsigned interv=0; - int tab_width=0; + int tab_width=0, x=0, y=0, w=0, h=0; for(QWidget *wgt : child_wgts) wgt->blockSignals(true); @@ -308,11 +306,6 @@ void GeneralConfigWidget::loadConfiguration(void) min_obj_opacity_spb->setValue(config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::MIN_OBJECT_OPACITY].toUInt()); - int value = config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::MAX_RESULT_ROWS].toInt(); - max_result_rows_chk->setChecked(value > 0); - max_result_rows_spb->setEnabled(value > 0); - max_result_rows_spb->setValue(value); - margin=config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::PAPER_MARGIN].split(','); custom_size=config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::PAPER_CUSTOM_SIZE].split(','); @@ -339,12 +332,29 @@ void GeneralConfigWidget::loadConfiguration(void) source_editor_edt->setText(config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SOURCE_EDITOR_APP]); source_editor_args_edt->setText(config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SOURCE_EDITOR_ARGS]); + save_restore_geometry_chk->setChecked(config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SAVE_RESTORE_GEOMETRY]==ParsersAttributes::_TRUE_); + reset_sizes_tb->setEnabled(save_restore_geometry_chk->isChecked()); + int ui_idx = ui_language_cmb->findData(config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::UI_LANGUAGE]); ui_language_cmb->setCurrentIndex(ui_idx >= 0 ? ui_idx : 0); for(QWidget *wgt : child_wgts) wgt->blockSignals(false); + widgets_geom.clear(); + for(auto itr : config_params) + { + if(itr.second.count(ParsersAttributes::X_POS)) + { + x = itr.second[ParsersAttributes::X_POS].toInt(); + y = itr.second[ParsersAttributes::Y_POS].toInt(); + w = itr.second[ParsersAttributes::WIDTH].toInt(); + h = itr.second[ParsersAttributes::HEIGHT].toInt(); + widgets_geom[itr.first].geometry = QRect(QPoint(x,y), QSize(w, h)); + widgets_geom[itr.first].maximized = itr.second[ParsersAttributes::MAXIMIZED] == ParsersAttributes::_TRUE_; + } + } + updateFontPreview(); this->applyConfiguration(); } @@ -361,22 +371,22 @@ void GeneralConfigWidget::addConfigurationParam(const QString ¶m, const attr void GeneralConfigWidget::removeConfigurationParam(const QRegExp ¶m_reg) { - map::iterator itr, itr_end; + map::iterator itr, itr_end; - itr=config_params.begin(); - itr_end=config_params.end(); + itr=config_params.begin(); + itr_end=config_params.end(); - while(itr!=itr_end) + while(itr!=itr_end) + { + if(param_reg.exactMatch(itr->first)) { - if(param_reg.exactMatch(itr->first)) - { - config_params.erase(itr); - itr=config_params.begin(); - itr_end=config_params.end(); - } - - itr++; + config_params.erase(itr); + itr=config_params.begin(); + itr_end=config_params.end(); } + + itr++; + } } map GeneralConfigWidget::getConfigurationParams(void) @@ -386,17 +396,57 @@ map GeneralConfigWidget::getConfigurationParams(void) QString GeneralConfigWidget::getConfigurationParam(const QString §ion_id, const QString ¶m_name) { - if(config_params.count(section_id) && - config_params[section_id].count(param_name)) - return(config_params[section_id][param_name]); - else - return(QString()); + if(config_params.count(section_id) && + config_params[section_id].count(param_name)) + return(config_params[section_id][param_name]); + else + return(QString()); +} + +void GeneralConfigWidget::saveWidgetGeometry(QWidget *widget, const QString &custom_wgt_name) +{ + if(!widget || + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SAVE_RESTORE_GEOMETRY] != ParsersAttributes::_TRUE_) + return; + + QString dlg_name = custom_wgt_name.isEmpty() ? widget->metaObject()->className() : custom_wgt_name; + + widgets_geom[dlg_name.toLower()].geometry = widget->geometry(); + widgets_geom[dlg_name.toLower()].maximized = widget->isMaximized(); +} + +bool GeneralConfigWidget::restoreWidgetGeometry(QWidget *widget, const QString &custom_wgt_name) +{ + if(!widget || + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SAVE_RESTORE_GEOMETRY] != ParsersAttributes::_TRUE_) + return(false); + + QString dlg_name = custom_wgt_name.isEmpty() ? widget->metaObject()->className() : custom_wgt_name; + dlg_name = dlg_name.toLower(); + + if(widgets_geom.count(dlg_name) && + (widgets_geom[dlg_name].maximized || + (widgets_geom[dlg_name].geometry.width() > 0 && widgets_geom[dlg_name].geometry.height() > 0))) + { + if(widgets_geom[dlg_name].maximized) + { + widget->move(widgets_geom[dlg_name].geometry.topLeft()); + widget->setWindowState(Qt::WindowMaximized); + } + else + widget->setGeometry(widgets_geom[dlg_name].geometry); + + return(true); + } + + return(false); } void GeneralConfigWidget::saveConfiguration(void) { try { + attribs_map attribs; map::iterator itr, itr_end; QString file_sch, root_dir, widget_sch; bool show_grid=false, show_delim=false, align_grid=false; @@ -433,7 +483,6 @@ void GeneralConfigWidget::saveConfiguration(void) config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::MIN_OBJECT_OPACITY]=QString::number(min_obj_opacity_spb->value()); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::USE_PLACEHOLDERS]=(use_placeholders_chk->isChecked() ? ParsersAttributes::_TRUE_ : QString()); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::HISTORY_MAX_LENGTH]=QString::number(history_max_length_spb->value()); - config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::MAX_RESULT_ROWS]=QString::number(max_result_rows_chk->isChecked() ? max_result_rows_spb->value() : 0); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::USE_CURVED_LINES]=(use_curved_lines_chk->isChecked() ? ParsersAttributes::_TRUE_ : QString()); ObjectsScene::getGridOptions(show_grid, align_grid, show_delim); @@ -471,6 +520,9 @@ void GeneralConfigWidget::saveConfiguration(void) config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SOURCE_EDITOR_ARGS]=source_editor_args_edt->text(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::UI_LANGUAGE]=ui_language_cmb->currentData().toString(); + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::COMPACT_VIEW]=(BaseObjectView::isCompactViewEnabled() ? ParsersAttributes::_TRUE_ : QString()); + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::SAVE_RESTORE_GEOMETRY]=(save_restore_geometry_chk->isChecked() ? ParsersAttributes::_TRUE_ : QString()); + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::_FILE_]=QString(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::RECENT_MODELS]=QString(); @@ -478,6 +530,7 @@ void GeneralConfigWidget::saveConfiguration(void) itr_end=config_params.end(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::DOCK_WIDGETS]=QString(); + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::WIDGETS_GEOMETRY]=QString(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::RECENT_MODELS]=QString(); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::_FILE_]=QString(); @@ -496,18 +549,38 @@ void GeneralConfigWidget::saveConfiguration(void) schparser.convertCharsToXMLEntities(schparser.getCodeDefinition(file_sch, itr->second)); } else if(itr->first==ParsersAttributes::VALIDATOR || - itr->first==ParsersAttributes::OBJECT_FINDER || - itr->first==ParsersAttributes::SQL_TOOL) + itr->first==ParsersAttributes::OBJECT_FINDER || + itr->first==ParsersAttributes::SQL_TOOL) { schparser.ignoreUnkownAttributes(true); + schparser.ignoreEmptyAttributes(true); config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::DOCK_WIDGETS]+= - schparser.getCodeDefinition(widget_sch, itr->second); + schparser.getCodeDefinition(widget_sch, itr->second); schparser.ignoreUnkownAttributes(false); + schparser.ignoreEmptyAttributes(false); } itr++; } + if(save_restore_geometry_chk->isChecked()) + { + for(auto &itr : widgets_geom) + { + attribs[ParsersAttributes::ID] = itr.first; + attribs[ParsersAttributes::X_POS] = QString::number(itr.second.geometry.left()); + attribs[ParsersAttributes::Y_POS] = QString::number(itr.second.geometry.top()); + attribs[ParsersAttributes::WIDTH] = QString::number(itr.second.geometry.width()); + attribs[ParsersAttributes::HEIGHT] = QString::number(itr.second.geometry.height()); + attribs[ParsersAttributes::MAXIMIZED] = itr.second.maximized ? ParsersAttributes::_TRUE_ : QString(); + + schparser.ignoreUnkownAttributes(true); + config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::WIDGETS_GEOMETRY]+= + schparser.getCodeDefinition(widget_sch, attribs); + schparser.ignoreUnkownAttributes(false); + } + } + BaseConfigWidget::saveConfiguration(GlobalAttributes::GENERAL_CONF, config_params); } catch(Exception &e) @@ -525,6 +598,9 @@ void GeneralConfigWidget::applyConfiguration(void) if(fnt_size < 5.0f) fnt_size=5.0f; + if(!save_restore_geometry_chk->isChecked()) + widgets_geom.clear(); + unity_cmb->setCurrentIndex(UNIT_POINT); ObjectsScene::setPaperConfiguration(static_cast(paper_cmb->itemData(paper_cmb->currentIndex()).toInt()), (portrait_rb->isChecked() ? QPrinter::Portrait : QPrinter::Landscape), @@ -552,7 +628,6 @@ void GeneralConfigWidget::applyConfiguration(void) MainWindow::setConfirmValidation(confirm_validation_chk->isChecked()); BaseObjectView::setPlaceholderEnabled(use_placeholders_chk->isChecked()); SQLExecutionWidget::setSQLHistoryMaxLength(history_max_length_spb->value()); - SQLExecutionWidget::setMaxResultRows(max_result_rows_chk->isChecked()? max_result_rows_spb->value() : 0); fnt.setFamily(config_params[ParsersAttributes::CONFIGURATION][ParsersAttributes::CODE_FONT]); fnt.setPointSize(fnt_size); @@ -570,9 +645,10 @@ void GeneralConfigWidget::restoreDefaults(void) { try { - BaseConfigWidget::restoreDefaults(GlobalAttributes::GENERAL_CONF); - BaseConfigWidget::restoreDefaults(GlobalAttributes::XML_HIGHLIGHT_CONF); - BaseConfigWidget::restoreDefaults(GlobalAttributes::SQL_HIGHLIGHT_CONF); + BaseConfigWidget::restoreDefaults(GlobalAttributes::GENERAL_CONF, false); + BaseConfigWidget::restoreDefaults(GlobalAttributes::XML_HIGHLIGHT_CONF, true); + BaseConfigWidget::restoreDefaults(GlobalAttributes::SQL_HIGHLIGHT_CONF, true); + BaseConfigWidget::restoreDefaults(GlobalAttributes::UI_STYLE_CONF, true); this->loadConfiguration(); this->applyConfiguration(); setConfigurationChanged(true); @@ -654,3 +730,13 @@ void GeneralConfigWidget::selectSourceEditor(void) if(sel_editor_dlg.result()==QDialog::Accepted) source_editor_edt->setText(sel_editor_dlg.selectedFiles().at(0)); } + +void GeneralConfigWidget::resetDialogsSizes(void) +{ + Messagebox msg_box; + msg_box.show(trUtf8("This action will reset all dialogs to their default size and positions on the screen! Do you really want to proceed?"), + Messagebox::CONFIRM_ICON, Messagebox::YES_NO_BUTTONS); + + if(msg_box.result() == QDialog::Accepted) + widgets_geom.clear(); +} diff --git a/libpgmodeler_ui/src/generalconfigwidget.h b/libpgmodeler_ui/src/generalconfigwidget.h index 48fbc01281..4d888cd892 100644 --- a/libpgmodeler_ui/src/generalconfigwidget.h +++ b/libpgmodeler_ui/src/generalconfigwidget.h @@ -1,4 +1,4 @@ -/* +/* # PostgreSQL Database Modeler (pgModeler) # # Copyright 2006-2018 - Raphael Araújo e Silva @@ -36,10 +36,22 @@ class GeneralConfigWidget: public BaseConfigWidget, public Ui::GeneralConfigWidg private: Q_OBJECT + /* This simple struct is used to store the widgets geometry and maximized state + * in order to save this info to configuration file being possible to restore + * it when reloading the application */ + struct WidgetState + { + QRect geometry; + bool maximized; + WidgetState() { maximized = false; } + }; + QWidgetList child_wgts; NumberedTextEditor *font_preview_txt; + static map widgets_geom; + static map config_params; static const unsigned UNIT_MILIMETERS=0, @@ -69,6 +81,9 @@ class GeneralConfigWidget: public BaseConfigWidget, public Ui::GeneralConfigWidg Section id can be , , or */ static QString getConfigurationParam(const QString §ion_id, const QString ¶m_name); + static void saveWidgetGeometry(QWidget *widget, const QString &custom_wgt_name = QString()); + static bool restoreWidgetGeometry(QWidget *widget, const QString &custom_wgt_name = QString()); + public slots: void applyConfiguration(void); void restoreDefaults(void); @@ -78,6 +93,7 @@ class GeneralConfigWidget: public BaseConfigWidget, public Ui::GeneralConfigWidg private slots: void convertMarginUnity(void); void updateFontPreview(void); + void resetDialogsSizes(void); }; #endif diff --git a/libpgmodeler_ui/src/hinttextwidget.cpp b/libpgmodeler_ui/src/hinttextwidget.cpp index 2ff0e363ba..ad689fd2d8 100644 --- a/libpgmodeler_ui/src/hinttextwidget.cpp +++ b/libpgmodeler_ui/src/hinttextwidget.cpp @@ -140,3 +140,9 @@ bool HintTextWidget::eventFilter(QObject *object, QEvent *event) return(QWidget::eventFilter(object, event)); } + +void HintTextWidget::showEvent(QShowEvent *) +{ + this->activateWindow(); + this->raise(); +} diff --git a/libpgmodeler_ui/src/hinttextwidget.h b/libpgmodeler_ui/src/hinttextwidget.h index d49c5bf8b8..0bdd09e51e 100644 --- a/libpgmodeler_ui/src/hinttextwidget.h +++ b/libpgmodeler_ui/src/hinttextwidget.h @@ -41,6 +41,8 @@ class HintTextWidget: public QWidget, public Ui::HintTextWidget { bool eventFilter(QObject *object, QEvent *event); + void showEvent(QShowEvent *); + public: const static unsigned SMALL_ICON=16, MEDIUM_ICON=24, diff --git a/libpgmodeler_ui/src/htmlitemdelegate.cpp b/libpgmodeler_ui/src/htmlitemdelegate.cpp index 7374ab0063..1a196bec24 100644 --- a/libpgmodeler_ui/src/htmlitemdelegate.cpp +++ b/libpgmodeler_ui/src/htmlitemdelegate.cpp @@ -45,7 +45,7 @@ void HtmlItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti text.replace(QString("\n"), QString("
")); rect=QRect(QPoint(option.rect.left() + option.decorationSize.width() + 5, - option.rect.top()), option.rect.size()); + option.rect.top()), option.rect.size()); //Painting the correct background color according to the item state if((option.state & QStyle::State_Selected) == QStyle::State_Selected) @@ -63,7 +63,8 @@ void HtmlItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti //Set the text to a html document instance and draw it to the painter doc.setHtml(text); - painter->translate(rect.topLeft()); + int dy = abs(option.rect.height() - option.decorationSize.height()) / 2; + painter->translate(rect.topLeft() - QPoint(0, dy)); doc.drawContents(painter); } diff --git a/libpgmodeler_ui/src/linenumberswidget.cpp b/libpgmodeler_ui/src/linenumberswidget.cpp index 11db826fd8..eb8ffb76b6 100644 --- a/libpgmodeler_ui/src/linenumberswidget.cpp +++ b/libpgmodeler_ui/src/linenumberswidget.cpp @@ -19,14 +19,23 @@ #include "linenumberswidget.h" #include #include +#include "exception.h" QColor LineNumbersWidget::font_color=Qt::lightGray; QColor LineNumbersWidget::bg_color=Qt::black; LineNumbersWidget::LineNumbersWidget(QPlainTextEdit * parent) : QWidget(parent) { - first_line=line_count=0; + if(!parent) + throw Exception(ERR_ASG_NOT_ALOC_OBJECT ,__PRETTY_FUNCTION__,__FILE__,__LINE__); + + parent_edt = qobject_cast(parent); + first_line=line_count=start_sel_pos=0; dy=0; + has_selection = false; + start_sel_line = -1; + + connect(parent_edt, SIGNAL(selectionChanged()), this, SLOT(update())); } void LineNumbersWidget::drawLineNumbers(unsigned first_line, unsigned line_count, int dy) @@ -51,8 +60,20 @@ void LineNumbersWidget::setColors(const QColor &font_color, const QColor &bg_col void LineNumbersWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); - int y=dy, height=fontMetrics().height(); + int y = dy, height = 0; unsigned last_line=first_line + line_count; + QFont font = painter.font(); + unsigned fs_line = 0, ls_line = 0; + QTextCursor cursor = parent_edt->textCursor(); + + if(cursor.hasSelection()) + { + QTextCursor start = cursor, end = cursor; + start.setPosition(cursor.selectionStart(), QTextCursor::MoveAnchor); + fs_line = start.blockNumber(); + end.setPosition(cursor.selectionEnd(), QTextCursor::KeepAnchor); + ls_line = end.blockNumber(); + } //Repaint the widget to clear previous drawn numbers painter.fillRect(event->rect(), bg_color); @@ -61,15 +82,77 @@ void LineNumbersWidget::paintEvent(QPaintEvent *event) //Draw line numbers for(unsigned lin=first_line; lin < last_line; lin++) { - painter.drawText(0, y, this->width(), fontMetrics().height(), - Qt::AlignHCenter, QString::number(lin)); + font.setBold(cursor.hasSelection() && lin-1 >= fs_line && lin-1 <= ls_line); + height = QFontMetrics(font).height(); + painter.setFont(font); + + if(font.bold()) + { + painter.setBrush(bg_color.dark(150)); + painter.setPen(Qt::transparent); + painter.drawRect(QRect(-1, y, this->width() + 1, height)); + painter.setPen(font_color.light(180)); + } + else + painter.setPen(font_color); + + painter.drawText(0, y, this->width(), height, Qt::AlignHCenter, QString::number(lin)); y+=height; } } -QColor LineNumbersWidget::getBackgroundColor(void) +void LineNumbersWidget::mousePressEvent(QMouseEvent *event) { - return(LineNumbersWidget::bg_color); + if(event->buttons() == Qt::LeftButton && !has_selection) + { + QTextCursor cursor = parent_edt->cursorForPosition(QPoint(0, event->pos().y())); + + has_selection = true; + cursor.select(QTextCursor::LineUnderCursor); + parent_edt->setTextCursor(cursor); + start_sel_line = cursor.blockNumber(); + start_sel_pos = cursor.position(); + } +} + +void LineNumbersWidget::mouseMoveEvent(QMouseEvent *event) +{ + if(event->buttons() == Qt::LeftButton && has_selection) + { + QTextCursor cursor = parent_edt->cursorForPosition(QPoint(0, event->pos().y())), + curr_cursor = parent_edt->textCursor(); + + //If the user wants selects lines below the first + if(start_sel_line < cursor.blockNumber()) + { + cursor.movePosition(QTextCursor::EndOfLine); + curr_cursor.setPosition(cursor.position(), QTextCursor::KeepAnchor); + parent_edt->setTextCursor(curr_cursor); + } + //If the user wants selects lines above the first + else if(start_sel_line > cursor.blockNumber()) + { + curr_cursor.setPosition(start_sel_pos); + curr_cursor.movePosition(QTextCursor::EndOfLine); + curr_cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, curr_cursor.position() - cursor.position()); + parent_edt->setTextCursor(curr_cursor); + } + else + { + cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + parent_edt->setTextCursor(cursor); + } + + this->update(); + } } +void LineNumbersWidget::mouseReleaseEvent(QMouseEvent *) +{ + has_selection = false; +} +QColor LineNumbersWidget::getBackgroundColor(void) +{ + return(LineNumbersWidget::bg_color); +} diff --git a/libpgmodeler_ui/src/linenumberswidget.h b/libpgmodeler_ui/src/linenumberswidget.h index ac83e76c25..420f63b2c6 100644 --- a/libpgmodeler_ui/src/linenumberswidget.h +++ b/libpgmodeler_ui/src/linenumberswidget.h @@ -32,6 +32,10 @@ class LineNumbersWidget : public QWidget { private: Q_OBJECT + QPlainTextEdit *parent_edt; + + bool has_selection; + //! \brief The first line number that must be drawn unsigned first_line, @@ -41,6 +45,8 @@ class LineNumbersWidget : public QWidget { //! \brief The y axis increment to start drawn the line number int dy; + int start_sel_line, start_sel_pos; + //! \brief Font color for drawn line numbers static QColor font_color, @@ -49,9 +55,12 @@ class LineNumbersWidget : public QWidget { protected: void paintEvent(QPaintEvent *event); + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *); public: - explicit LineNumbersWidget(QPlainTextEdit *parent = 0); + explicit LineNumbersWidget(QPlainTextEdit *parent); /*! \brief Draw the lines starting from 'first_line' and stoping at fisrt_line + line_count -1. The dy param. defines an initial Y translation before drawn lines */ diff --git a/libpgmodeler_ui/src/mainwindow.cpp b/libpgmodeler_ui/src/mainwindow.cpp index d7ce6e8b05..dbba31fce8 100644 --- a/libpgmodeler_ui/src/mainwindow.cpp +++ b/libpgmodeler_ui/src/mainwindow.cpp @@ -73,7 +73,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par grid->addWidget(sql_tool_wgt, 0, 0); views_stw->widget(MANAGE_VIEW)->setLayout(grid); - configuration_form=new ConfigurationForm(nullptr, Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); + configuration_form=new ConfigurationForm(nullptr, Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); PgModelerUiNS::resizeDialog(configuration_form); configuration_form->loadConfiguration(); @@ -83,6 +83,8 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par action_plugins->setEnabled(!plugins_menu->isEmpty()); action_plugins->setMenu(plugins_menu); + action_other_actions->setMenu(&more_actions_menu); + confs=GeneralConfigWidget::getConfigurationParams(); itr=confs.begin(); itr_end=confs.end(); @@ -118,6 +120,8 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par //Enables the action to restore session when there are registered session files action_restore_session->setEnabled(!prev_session_files.isEmpty()); central_wgt->last_session_tb->setEnabled(action_restore_session->isEnabled()); + + } catch(Exception &e) { @@ -138,6 +142,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par control_tb->addAction(action_bug_report); control_tb->addAction(action_donate); + control_tb->addAction(action_support); control_tb->addAction(action_about); control_tb->addAction(action_update_found); @@ -166,6 +171,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par connect(central_wgt->new_tb, SIGNAL(clicked()), this, SLOT(addModel())); connect(central_wgt->open_tb, SIGNAL(clicked()), this, SLOT(loadModel())); connect(central_wgt->last_session_tb, SIGNAL(clicked()), this, SLOT(restoreLastSession())); + connect(central_wgt->support_tb, SIGNAL(clicked()), this, SLOT(openSupport())); #ifndef NO_UPDATE_CHECK connect(update_notifier_wgt, SIGNAL(s_updateAvailable(bool)), action_update_found, SLOT(setVisible(bool))); @@ -203,12 +209,18 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par connect(action_redo,SIGNAL(triggered(bool)),oper_list_wgt,SLOT(redoOperation(void))); connect(model_nav_wgt, SIGNAL(s_modelCloseRequested(int)), this, SLOT(closeModel(int))); - connect(model_nav_wgt, SIGNAL(s_currentModelChanged(int)), this, SLOT(setCurrentModel())); + connect(model_nav_wgt, SIGNAL(s_currentModelChanged(int)), this, SLOT(setCurrentModel())); connect(action_print, SIGNAL(triggered(bool)), this, SLOT(printModel(void))); - connect(action_configuration, SIGNAL(triggered(bool)), configuration_form, SLOT(show())); + + connect(action_configuration, &QAction::triggered, [&](){ + GeneralConfigWidget::restoreWidgetGeometry(configuration_form); + configuration_form->exec(); + GeneralConfigWidget::saveWidgetGeometry(configuration_form); + }); connect(oper_list_wgt, SIGNAL(s_operationExecuted(void)), overview_wgt, SLOT(updateOverview(void))); + connect(configuration_form, SIGNAL(finished(int)), this, SLOT(applyConfigurations(void))); connect(configuration_form, SIGNAL(rejected()), this, SLOT(updateConnections())); connect(&model_save_timer, SIGNAL(timeout(void)), this, SLOT(saveAllModels(void))); @@ -227,6 +239,8 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par connect(model_valid_wgt, &ModelValidationWidget::s_connectionsUpdateRequest, [&](){ updateConnections(true); }); connect(sql_tool_wgt, &SQLToolWidget::s_connectionsUpdateRequest, [&](){ updateConnections(true); }); + connect(action_compact_view, SIGNAL(toggled(bool)), this, SLOT(toggleCompactView())); + window_title=this->windowTitle() + QString(" ") + GlobalAttributes::PGMODELER_VERSION; #ifdef DEMO_VERSION @@ -335,6 +349,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par QList actions=general_tb->actions(); QToolButton *btn=nullptr; + QFont font; for(auto &act : actions) { @@ -342,7 +357,10 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par if(btn) { - PgModelerUiNS::configureWidgetFont(btn, PgModelerUiNS::SMALL_FONT_FACTOR); + PgModelerUiNS::configureWidgetFont(btn, static_cast(PgModelerUiNS::MEDIUM_FONT_FACTOR)); + font = btn->font(); + font.setBold(true); + btn->setFont(font); btn->setGraphicsEffect(createDropShadow(btn)); } } @@ -386,6 +404,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par action_show_grid->setChecked(confs[ParsersAttributes::CONFIGURATION][ParsersAttributes::SHOW_CANVAS_GRID]==ParsersAttributes::_TRUE_); action_alin_objs_grade->setChecked(confs[ParsersAttributes::CONFIGURATION][ParsersAttributes::ALIGN_OBJS_TO_GRID]==ParsersAttributes::_TRUE_); action_show_delimiters->setChecked(confs[ParsersAttributes::CONFIGURATION][ParsersAttributes::SHOW_PAGE_DELIMITERS]==ParsersAttributes::_TRUE_); + action_compact_view->setChecked(confs[ParsersAttributes::CONFIGURATION][ParsersAttributes::COMPACT_VIEW]==ParsersAttributes::_TRUE_); ObjectsScene::setGridOptions(action_show_grid->isChecked(), action_alin_objs_grade->isChecked(), @@ -407,6 +426,10 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(par action_update_found->setVisible(false); QTimer::singleShot(1000, this, SLOT(restoreTemporaryModels())); + //If there's no previuos geometry registered for the mainwindow display it maximized + if(!GeneralConfigWidget::restoreWidgetGeometry(this)) + this->setWindowState(Qt::WindowMaximized); + #ifdef NO_UPDATE_CHECK #warning "NO UPDATE CHECK: Update checking is disabled." #else @@ -495,6 +518,8 @@ void MainWindow::restoreLastSession(void) { try { + qApp->setOverrideCursor(Qt::WaitCursor); + while(!prev_session_files.isEmpty()) { this->addModel(prev_session_files.front()); @@ -503,9 +528,11 @@ void MainWindow::restoreLastSession(void) action_restore_session->setEnabled(false); central_wgt->last_session_tb->setEnabled(false); + qApp->restoreOverrideCursor(); } catch(Exception &e) { + qApp->restoreOverrideCursor(); Messagebox msg_box; msg_box.show(e); } @@ -541,7 +568,10 @@ void MainWindow::fixModel(const QString &filename) } PgModelerUiNS::resizeDialog(&model_fix_form); + GeneralConfigWidget::restoreWidgetGeometry(&model_fix_form); model_fix_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&model_fix_form); + disconnect(&model_fix_form, nullptr, this, nullptr); } @@ -568,6 +598,8 @@ void MainWindow::closeEvent(QCloseEvent *event) GeneralConfigWidget *conf_wgt=nullptr; map confs; + GeneralConfigWidget::saveWidgetGeometry(this); + //Stops the saving timers as well the temp. model saving thread before close pgmodeler model_save_timer.stop(); tmpmodel_save_timer.stop(); @@ -619,7 +651,9 @@ void MainWindow::closeEvent(QCloseEvent *event) conf_wgt=dynamic_cast(configuration_form->getConfigurationWidget(ConfigurationForm::GENERAL_CONF_WGT)); confs=conf_wgt->getConfigurationParams(); + attribs[ParsersAttributes::COMPACT_VIEW]=action_compact_view->isChecked() ? ParsersAttributes::_TRUE_ : QString(); attribs[ParsersAttributes::SHOW_MAIN_MENU]=main_menu_mb->isVisible() ? ParsersAttributes::_TRUE_ : QString(); + conf_wgt->addConfigurationParam(ParsersAttributes::CONFIGURATION, attribs); attribs.clear(); @@ -720,6 +754,7 @@ void MainWindow::saveTemporaryModels(void) if(count > 0) { + QApplication::setOverrideCursor(Qt::WaitCursor); canvas_info_parent->setVisible(false); bg_saving_wgt->setVisible(true); bg_saving_pb->setValue(0); @@ -739,14 +774,15 @@ void MainWindow::saveTemporaryModels(void) bg_saving_pb->setValue(100); bg_saving_wgt->setVisible(false); canvas_info_parent->setVisible(true); + QApplication::restoreOverrideCursor(); } - tmpmodel_thread.quit(); + tmpmodel_thread.quit(); } catch(Exception &e) { + QApplication::restoreOverrideCursor(); Messagebox msg_box; - tmpmodel_thread.quit(); msg_box.show(e); } @@ -789,12 +825,15 @@ void MainWindow::loadModelFromAction(void) try { + qApp->setOverrideCursor(Qt::WaitCursor); addModel(filename); recent_models.push_back(act->data().toString()); updateRecentModelsMenu(); + qApp->restoreOverrideCursor(); } catch(Exception &e) { + qApp->restoreOverrideCursor(); if(QFileInfo(filename).exists()) showFixMessage(e, filename); else @@ -846,7 +885,6 @@ void MainWindow::addModel(const QString &filename) //Creating the system objects (public schema and languages C, SQL and pgpgsql) model_tab->db_model->createSystemObjects(filename.isEmpty()); - model_tab->db_model->setInvalidated(false); if(!filename.isEmpty()) { @@ -854,11 +892,12 @@ void MainWindow::addModel(const QString &filename) { model_tab->loadModel(filename); models_tbw->setTabToolTip(models_tbw->currentIndex(), filename); + //Get the "public" schema and set as system object public_sch=dynamic_cast(model_tab->db_model->getObject(QString("public"), OBJ_SCHEMA)); if(public_sch) public_sch->setSystemObject(true); - models_tbw->setVisible(true); + model_tab->db_model->setInvalidated(false); model_tab->restoreLastCanvasPosition(); } catch(Exception &e) @@ -880,6 +919,7 @@ void MainWindow::addModel(const QString &filename) model_nav_wgt->addModel(model_tab); models_tbw->setUpdatesEnabled(true); + models_tbw->setVisible(true); setCurrentModel(); if(start_timers) @@ -894,8 +934,6 @@ void MainWindow::addModel(const QString &filename) if(action_alin_objs_grade->isChecked()) current_model->scene->alignObjectsToGrid(); - - models_tbw->update(); } catch(Exception &e) { @@ -966,10 +1004,10 @@ void MainWindow::setCurrentModel(void) removeModelActions(); - edit_menu->clear(); - edit_menu->addAction(action_undo); - edit_menu->addAction(action_redo); - edit_menu->addSeparator(); + edit_menu->clear(); + edit_menu->addAction(action_undo); + edit_menu->addAction(action_redo); + edit_menu->addSeparator(); //Avoids the tree state saving in order to restore the current model tree state model_objs_wgt->saveTreeState(false); @@ -978,7 +1016,7 @@ void MainWindow::setCurrentModel(void) if(current_model) model_objs_wgt->saveTreeState(model_tree_states[current_model]); - models_tbw->setCurrentIndex(model_nav_wgt->getCurrentIndex()); + models_tbw->setCurrentIndex(model_nav_wgt->getCurrentIndex()); current_model=dynamic_cast(models_tbw->currentWidget()); action_arrange_objects->setEnabled(current_model != nullptr); @@ -986,11 +1024,14 @@ void MainWindow::setCurrentModel(void) { QToolButton *tool_btn=nullptr; QList btns; + QFont font; current_model->setFocus(Qt::OtherFocusReason); current_model->cancelObjectAddition(); - general_tb->addAction(current_model->action_new_object); + general_tb->addSeparator(); + + general_tb->addAction(current_model->action_new_object); tool_btn=qobject_cast(general_tb->widgetForAction(current_model->action_new_object)); tool_btn->setPopupMode(QToolButton::InstantPopup); btns.push_back(tool_btn); @@ -1008,39 +1049,39 @@ void MainWindow::setCurrentModel(void) tool_btn=qobject_cast(general_tb->widgetForAction(current_model->action_source_code)); btns.push_back(tool_btn); - general_tb->addAction(current_model->action_select_all); - tool_btn=qobject_cast(general_tb->widgetForAction(current_model->action_select_all)); + more_actions_menu.clear(); + more_actions_menu.addAction(current_model->action_select_all); + more_actions_menu.addAction(current_model->action_fade); + more_actions_menu.addAction(current_model->action_extended_attribs); + more_actions_menu.addAction(current_model->action_edit_creation_order); + general_tb->addAction(action_other_actions); + tool_btn = qobject_cast(general_tb->widgetForAction(action_other_actions)); tool_btn->setPopupMode(QToolButton::InstantPopup); btns.push_back(tool_btn); - general_tb->addAction(current_model->action_fade); - tool_btn=qobject_cast(general_tb->widgetForAction(current_model->action_fade)); - tool_btn->setPopupMode(QToolButton::InstantPopup); - btns.push_back(tool_btn); - - general_tb->addAction(current_model->action_edit_creation_order); - tool_btn=qobject_cast(general_tb->widgetForAction(current_model->action_edit_creation_order)); - btns.push_back(tool_btn); - for(QToolButton *btn : btns) { - PgModelerUiNS::configureWidgetFont(btn, PgModelerUiNS::SMALL_FONT_FACTOR); + PgModelerUiNS::configureWidgetFont(btn, static_cast(PgModelerUiNS::MEDIUM_FONT_FACTOR)); + font = btn->font(); + font.setBold(true); + btn->setFont(font); btn->setGraphicsEffect(createDropShadow(tool_btn)); - } + } - edit_menu->addAction(current_model->action_copy); - edit_menu->addAction(current_model->action_cut); - edit_menu->addAction(current_model->action_duplicate); - edit_menu->addAction(current_model->action_paste); - edit_menu->addAction(current_model->action_remove); - edit_menu->addAction(current_model->action_cascade_del); + edit_menu->addAction(current_model->action_copy); + edit_menu->addAction(current_model->action_cut); + edit_menu->addAction(current_model->action_duplicate); + edit_menu->addAction(current_model->action_paste); + edit_menu->addAction(current_model->action_remove); + edit_menu->addAction(current_model->action_cascade_del); if(current_model->getFilename().isEmpty()) this->setWindowTitle(window_title); else this->setWindowTitle(window_title + QString(" - ") + QDir::toNativeSeparators(current_model->getFilename())); - connect(current_model, SIGNAL(s_manipulationCanceled(void)),this, SLOT(updateDockWidgets(void)), Qt::UniqueConnection); + //connect(current_model, SIGNAL(s_manipulationCanceled(void)),this, SLOT(updateDockWidgets(void)), Qt::UniqueConnection); + connect(current_model, SIGNAL(s_manipulationCanceled(void)),oper_list_wgt, SLOT(updateOperationList(void)), Qt::UniqueConnection); connect(current_model, SIGNAL(s_objectsMoved(void)),oper_list_wgt, SLOT(updateOperationList(void)), Qt::UniqueConnection); connect(current_model, SIGNAL(s_objectModified(void)),this, SLOT(updateDockWidgets(void)), Qt::UniqueConnection); connect(current_model, SIGNAL(s_objectCreated(void)),this, SLOT(updateDockWidgets(void)), Qt::UniqueConnection); @@ -1230,7 +1271,7 @@ void MainWindow::updateModelTabName(void) void MainWindow::applyConfigurations(void) { - if(!sender() || + if(!sender() || (sender()==configuration_form && configuration_form->result()==QDialog::Accepted)) { GeneralConfigWidget *conf_wgt=nullptr; @@ -1402,8 +1443,12 @@ void MainWindow::exportModel(void) { stopTimers(true); connect(&model_export_form, &ModelExportForm::s_connectionsUpdateRequest, [&](){ updateConnections(true); }); + PgModelerUiNS::resizeDialog(&model_export_form); + GeneralConfigWidget::restoreWidgetGeometry(&model_export_form); model_export_form.exec(current_model); + GeneralConfigWidget::saveWidgetGeometry(&model_export_form); + stopTimers(false); } } @@ -1417,7 +1462,9 @@ void MainWindow::importDatabase(void) connect(&db_import_form, &DatabaseImportForm::s_connectionsUpdateRequest, [&](){ updateConnections(true); }); db_import_form.setModelWidget(current_model); PgModelerUiNS::resizeDialog(&db_import_form); + GeneralConfigWidget::restoreWidgetGeometry(&db_import_form); db_import_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&db_import_form); stopTimers(false); if(db_import_form.result()==QDialog::Accepted && db_import_form.getModelWidget()) @@ -1458,8 +1505,11 @@ void MainWindow::diffModelDatabase(void) stopTimers(true); connect(&modeldb_diff_frm, &ModelDatabaseDiffForm::s_connectionsUpdateRequest, [&](){ updateConnections(true); }); + PgModelerUiNS::resizeDialog(&modeldb_diff_frm); + GeneralConfigWidget::restoreWidgetGeometry(&modeldb_diff_frm); modeldb_diff_frm.exec(); + GeneralConfigWidget::saveWidgetGeometry(&modeldb_diff_frm); stopTimers(false); } } @@ -1554,16 +1604,20 @@ void MainWindow::loadModels(const QStringList &list) try { + qApp->setOverrideCursor(Qt::WaitCursor); + for(i=0; i < list.count(); i++) { addModel(list[i]); recent_models.push_front(list[i]); } - updateRecentModelsMenu(); + updateRecentModelsMenu(); + qApp->restoreOverrideCursor(); } catch(Exception &e) { + qApp->restoreOverrideCursor(); showFixMessage(e, list[i]); } } @@ -1602,7 +1656,6 @@ void MainWindow::updateToolsState(bool model_closed) action_save_model->setEnabled(enabled); action_save_all->setEnabled(enabled); action_export->setEnabled(enabled); - //action_diff->setEnabled(enabled); action_close_model->setEnabled(enabled); action_show_grid->setEnabled(enabled); action_show_delimiters->setEnabled(enabled); @@ -1614,6 +1667,7 @@ void MainWindow::updateToolsState(bool model_closed) action_alin_objs_grade->setEnabled(enabled); action_undo->setEnabled(enabled); action_redo->setEnabled(enabled); + action_compact_view->setEnabled(enabled); action_handle_metadata->setEnabled(enabled); @@ -1638,7 +1692,7 @@ void MainWindow::updateDockWidgets(void) model_valid_wgt->setModel(current_model); if(current_model && obj_finder_wgt->result_tbw->rowCount() > 0) - obj_finder_wgt->findObjects(); + obj_finder_wgt->findObjects(); } void MainWindow::executePlugin(void) @@ -1830,8 +1884,8 @@ void MainWindow::showDemoVersionWarning(void) Messagebox msg_box; msg_box.show(trUtf8("Warning"), trUtf8("You're running a demonstration version! Note that you'll be able to create only %1 instances \ - of each type of object and some key features will be disabled or limited!

You can purchase a full binary copy or get the source code at pgmodeler.com.br.\ - NOTE: pgModeler is an open source software, but purchasing binary copies or providing some donations will support the project and cover all development costs.

\ + of each type of object and some key features will be disabled or limited!

You can purchase a full binary copy or get the source code at https://pgmodeler.io.\ + NOTE: pgModeler is an open source software, but purchasing binary copies or providing some donations will support the project and keep the development alive and at full speed!

\ HINT: in order to test all features it's recommended to use the demo.dbm model located in Sample models at Welcome view.



").arg(GlobalAttributes::MAX_OBJECT_COUNT), Messagebox::ALERT_ICON, Messagebox::OK_BUTTON); #endif @@ -1922,7 +1976,9 @@ void MainWindow::reportBug(void) { BugReportForm bugrep_frm; PgModelerUiNS::resizeDialog(&bugrep_frm); + GeneralConfigWidget::restoreWidgetGeometry(&bugrep_frm); bugrep_frm.exec(); + GeneralConfigWidget::saveWidgetGeometry(&bugrep_frm); } void MainWindow::removeOperations(void) @@ -1941,7 +1997,11 @@ void MainWindow::handleObjectsMetadata(void) objs_meta_frm.setModelWidget(current_model); objs_meta_frm.setModelWidgets(model_nav_wgt->getModelWidgets()); connect(&objs_meta_frm, SIGNAL(s_metadataHandled()), model_objs_wgt, SLOT(updateObjectsView())); + + PgModelerUiNS::resizeDialog(&objs_meta_frm); + GeneralConfigWidget::restoreWidgetGeometry(&objs_meta_frm); objs_meta_frm.exec(); + GeneralConfigWidget::saveWidgetGeometry(&objs_meta_frm); } void MainWindow::arrangeObjects(void) @@ -1966,3 +2026,20 @@ void MainWindow::arrangeObjects(void) QApplication::restoreOverrideCursor(); } } + +void MainWindow::toggleCompactView(void) +{ + ModelWidget *model_wgt = nullptr; + + BaseObjectView::setCompactViewEnabled(action_compact_view->isChecked()); + QApplication::setOverrideCursor(Qt::WaitCursor); + + for(int idx = 0; idx < models_tbw->count(); idx++) + { + model_wgt = dynamic_cast(models_tbw->widget(idx)); + model_wgt->toggleAllExtendedAttributes(action_compact_view->isChecked()); + model_wgt->getDatabaseModel()->setObjectsModified({ OBJ_TABLE, OBJ_VIEW, OBJ_RELATIONSHIP, BASE_RELATIONSHIP, OBJ_SCHEMA}); + } + + QApplication::restoreOverrideCursor(); +} diff --git a/libpgmodeler_ui/src/mainwindow.h b/libpgmodeler_ui/src/mainwindow.h index 6acf2f6ded..65a9d0bb45 100644 --- a/libpgmodeler_ui/src/mainwindow.h +++ b/libpgmodeler_ui/src/mainwindow.h @@ -143,7 +143,9 @@ class MainWindow: public QMainWindow, public Ui::MainWindow { sample_mdls_menu, - arrange_menu; + arrange_menu, + + more_actions_menu; //! \brief QMainWindow::closeEvent() overload: Saves the configurations before close the application void closeEvent(QCloseEvent *event); @@ -291,6 +293,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow { void handleObjectsMetadata(void); void restoreTemporaryModels(void); void arrangeObjects(void); + void toggleCompactView(void); }; #endif diff --git a/libpgmodeler_ui/src/messagebox.cpp b/libpgmodeler_ui/src/messagebox.cpp index efa66df897..4120492e6a 100644 --- a/libpgmodeler_ui/src/messagebox.cpp +++ b/libpgmodeler_ui/src/messagebox.cpp @@ -31,8 +31,10 @@ Messagebox::Messagebox(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) connect(show_errors_tb,SIGNAL(clicked()),this,SLOT(showExceptionList())); connect(show_errors_tb,SIGNAL(toggled(bool)),show_raw_info_tb,SLOT(setVisible(bool))); connect(show_raw_info_tb,SIGNAL(toggled(bool)),this,SLOT(showExceptionList(void))); - show_errors_tb->setVisible(false); + show_raw_info_tb->setVisible(false); + error_show_btns_wgt->setVisible(false); + custom_option_chk->setVisible(false); } void Messagebox::handleYesOkClick(void) @@ -62,6 +64,17 @@ bool Messagebox::isCancelled(void) return(cancelled); } +void Messagebox::setCustomOptionText(const QString &text) +{ + custom_option_chk->setVisible(!text.isEmpty()); + custom_option_chk->setText(text); +} + +bool Messagebox::isCustomOptionChecked(void) +{ + return(custom_option_chk->isChecked()); +} + void Messagebox::showExceptionList(void) { if(show_errors_tb->isChecked()) @@ -188,7 +201,7 @@ void Messagebox::show(const QString &title, const QString &msg, unsigned icon_ty this->setWindowTitle(aux_title); this->objs_group_wgt->setCurrentIndex(0); this->show_errors_tb->setChecked(false); - this->show_errors_tb->setVisible((exceptions_trw->topLevelItemCount() > 0)); + error_show_btns_wgt->setVisible((exceptions_trw->topLevelItemCount() > 0)); showExceptionList(); this->resize(this->minimumWidth(), this->minimumHeight()); diff --git a/libpgmodeler_ui/src/messagebox.h b/libpgmodeler_ui/src/messagebox.h index d549e1fb15..69228e1c36 100644 --- a/libpgmodeler_ui/src/messagebox.h +++ b/libpgmodeler_ui/src/messagebox.h @@ -67,6 +67,9 @@ class Messagebox: public QDialog, public Ui::Messagebox { bool isCancelled(void); + void setCustomOptionText(const QString &text); + bool isCustomOptionChecked(void); + private slots: void handleYesOkClick(void); void handleNoCancelClick(void); diff --git a/libpgmodeler_ui/src/metadatahandlingform.cpp b/libpgmodeler_ui/src/metadatahandlingform.cpp index 2bb8f8f70c..e462cff642 100644 --- a/libpgmodeler_ui/src/metadatahandlingform.cpp +++ b/libpgmodeler_ui/src/metadatahandlingform.cpp @@ -70,6 +70,9 @@ MetadataHandlingForm::MetadataHandlingForm(QWidget *parent, Qt::WindowFlags f) : generic_sql_objs_ht=new HintTextWidget(generic_sql_objs_hint, this); generic_sql_objs_ht->setText(generic_sql_objs_chk->statusTip()); + objs_aliases_ht=new HintTextWidget(objs_aliases_hint, this); + objs_aliases_ht->setText(objs_aliases_chk->statusTip()); + htmlitem_deleg=new HtmlItemDelegate(this); output_trw->setItemDelegateForColumn(0, htmlitem_deleg); @@ -88,6 +91,8 @@ MetadataHandlingForm::MetadataHandlingForm(QWidget *parent, Qt::WindowFlags f) : connect(restore_rb, SIGNAL(toggled(bool)), this, SLOT(enableMetadataHandling())); connect(extract_restore_rb, SIGNAL(toggled(bool)), this, SLOT(enableMetadataHandling())); connect(extract_only_rb, SIGNAL(toggled(bool)), this, SLOT(enableMetadataHandling())); + connect(select_all_btn, SIGNAL(clicked(bool)), this, SLOT(selectAllOptions())); + connect(clear_all_btn, SIGNAL(clicked(bool)), this, SLOT(selectAllOptions())); } void MetadataHandlingForm::enableMetadataHandling(void) @@ -103,6 +108,20 @@ void MetadataHandlingForm::enableMetadataHandling(void) (restore_rb->isChecked() && !backup_file_edt->text().isEmpty())))); } +void MetadataHandlingForm::selectAllOptions(void) +{ + bool check = sender() == select_all_btn; + QCheckBox *checkbox = nullptr; + + for(auto &obj : options_grp->children()) + { + checkbox = dynamic_cast(obj); + + if(checkbox) + checkbox->setChecked(check); + } +} + void MetadataHandlingForm::setModelWidget(ModelWidget *model_wgt) { this->model_wgt=model_wgt; @@ -158,8 +177,9 @@ void MetadataHandlingForm::handleObjectsMetada(void) options+=(objs_fadedout_chk->isChecked() ? DatabaseModel::META_OBJS_FADEDOUT : 0); options+=(objs_extattribs_chk->isChecked() ? DatabaseModel::META_OBJS_EXTATTRIBS : 0); options+=(generic_sql_objs_chk->isChecked() ? DatabaseModel::META_GENERIC_SQL_OBJS : 0); + options+=(objs_aliases_chk->isChecked() ? DatabaseModel::META_OBJS_ALIASES : 0); - connect(model_wgt->getDatabaseModel(), SIGNAL(s_objectLoaded(int,QString,unsigned)), this, SLOT(updateProgress(int,QString,unsigned))); + connect(model_wgt->getDatabaseModel(), SIGNAL(s_objectLoaded(int,QString,unsigned)), this, SLOT(updateProgress(int,QString,unsigned)), Qt::UniqueConnection); if(extract_restore_rb->isChecked() || extract_only_rb->isChecked()) { @@ -179,7 +199,7 @@ void MetadataHandlingForm::handleObjectsMetada(void) tmp_file.close(); } - connect(extract_model, SIGNAL(s_objectLoaded(int,QString,unsigned)), this, SLOT(updateProgress(int,QString,unsigned))); + connect(extract_model, SIGNAL(s_objectLoaded(int,QString,unsigned)), this, SLOT(updateProgress(int,QString,unsigned)), Qt::UniqueConnection); root_item=PgModelerUiNS::createOutputTreeItem(output_trw, PgModelerUiNS::formatMessage(trUtf8("Extracting metadata to file `%1'").arg(metadata_file)), diff --git a/libpgmodeler_ui/src/metadatahandlingform.h b/libpgmodeler_ui/src/metadatahandlingform.h index 32a6e17f64..5d9c807a45 100644 --- a/libpgmodeler_ui/src/metadatahandlingform.h +++ b/libpgmodeler_ui/src/metadatahandlingform.h @@ -42,7 +42,7 @@ class MetadataHandlingForm: public QDialog, public Ui::MetadataHandlingForm { HintTextWidget *db_metadata_ht, *objs_positioning_ht, *objs_protection_ht, *objs_sql_disabled_ht, *custom_sql_ht, *textbox_objs_ht, *tag_objs_ht, *custom_colors_ht, *extract_restore_ht, *restore_ht, *objs_fadedout_ht, *objs_extattribs_ht, - *generic_sql_objs_ht, *extract_only_ht; + *generic_sql_objs_ht, *extract_only_ht, *objs_aliases_ht; void showEvent(QShowEvent *); void selectFile(bool is_output); @@ -54,8 +54,9 @@ class MetadataHandlingForm: public QDialog, public Ui::MetadataHandlingForm { private slots: void updateProgress(int progress, QString msg, unsigned type_id); - void handleObjectsMetada(void); + void handleObjectsMetada(void); void enableMetadataHandling(void); + void selectAllOptions(void); signals: void s_metadataHandled(void); diff --git a/libpgmodeler_ui/src/modelobjectswidget.cpp b/libpgmodeler_ui/src/modelobjectswidget.cpp index b7aa3839f4..9986c4cd2f 100644 --- a/libpgmodeler_ui/src/modelobjectswidget.cpp +++ b/libpgmodeler_ui/src/modelobjectswidget.cpp @@ -129,7 +129,9 @@ void ModelObjectsWidget::editObject(void) Permission *perm=dynamic_cast(obj); if(perm) - model_wgt->showObjectForm(OBJ_PERMISSION,perm->getObject()); + model_wgt->showObjectForm(OBJ_PERMISSION,perm->getObject()); + else + model_wgt->editObject(); } else model_wgt->editObject(); @@ -429,11 +431,11 @@ void ModelObjectsWidget::filterObjects(void) void ModelObjectsWidget::updateObjectsView(void) { - updateDatabaseTree(); - updateObjectsList(); + updateDatabaseTree(); + updateObjectsList(); - if(!filter_edt->text().isEmpty()) - filterObjects(); + if(!filter_edt->text().isEmpty()) + filterObjects(); } void ModelObjectsWidget::updateObjectsList(void) @@ -669,7 +671,7 @@ void ModelObjectsWidget::updatePermissionTree(QTreeWidgetItem *root, BaseObject try { if(db_model && visible_objs_map[OBJ_PERMISSION] && - Permission::objectAcceptsPermission(object->getObjectType())) + Permission::acceptsPermission(object->getObjectType())) { vector perms; QTreeWidgetItem *item=new QTreeWidgetItem(root); @@ -716,6 +718,7 @@ void ModelObjectsWidget::updateDatabaseTree(void) if(save_tree_state) saveTreeState(tree_state); + objectstree_tw->setUpdatesEnabled(false); objectstree_tw->clear(); if(visible_objs_map[OBJ_DATABASE]) @@ -768,6 +771,7 @@ void ModelObjectsWidget::updateDatabaseTree(void) } } + objectstree_tw->setUpdatesEnabled(true); objectstree_tw->expandItem(root); if(save_tree_state) @@ -790,7 +794,7 @@ BaseObject *ModelObjectsWidget::getSelectedObject(void) void ModelObjectsWidget::enableObjectCreation(bool value) { - enable_obj_creation=value; + enable_obj_creation=value; } void ModelObjectsWidget::close(void) @@ -952,6 +956,8 @@ void ModelObjectsWidget::restoreTreeState(vector &tree_items) { QTreeWidgetItem *item=nullptr, *parent_item=nullptr; + objectslist_tbw->setUpdatesEnabled(false); + while(!tree_items.empty()) { item=getTreeItem(tree_items.back()); @@ -969,6 +975,8 @@ void ModelObjectsWidget::restoreTreeState(vector &tree_items) tree_items.pop_back(); } + + objectslist_tbw->setUpdatesEnabled(true); } QTreeWidgetItem *ModelObjectsWidget::getTreeItem(BaseObject *object) diff --git a/libpgmodeler_ui/src/modelobjectswidget.h b/libpgmodeler_ui/src/modelobjectswidget.h index 2c71b20ca7..e4616a6b3e 100644 --- a/libpgmodeler_ui/src/modelobjectswidget.h +++ b/libpgmodeler_ui/src/modelobjectswidget.h @@ -38,7 +38,7 @@ class ModelObjectsWidget: public QWidget, public Ui::ModelObjectsWidget { /*! \brief Indicates if the widget must be used as a simplified view (without the most interactions). The purpose to use it as simplified view is to be serve as a object pick commonly used on the object selectors. See ObjectSelectorWidget for details. */ - bool simplified_view, + bool simplified_view, /*! \brief Indicates if the object tree state must be saved, this means, that the current item expansion is memorized and can be restored at any moment via restoreTreeState() method */ diff --git a/libpgmodeler_ui/src/modelvalidationhelper.cpp b/libpgmodeler_ui/src/modelvalidationhelper.cpp index f53c0ff65a..cd0d404ee9 100644 --- a/libpgmodeler_ui/src/modelvalidationhelper.cpp +++ b/libpgmodeler_ui/src/modelvalidationhelper.cpp @@ -46,7 +46,8 @@ ModelValidationHelper::~ModelValidationHelper(void) void ModelValidationHelper::generateValidationInfo(unsigned val_type, BaseObject *object, vector refs) { if(!refs.empty() || - (val_type==ValidationInfo::BROKEN_REL_CONFIG && + val_type==ValidationInfo::MISSING_EXTENSION || + (val_type==ValidationInfo::BROKEN_REL_CONFIG && std::find(inv_rels.begin(), inv_rels.end(), object)==inv_rels.end())) { //Configures a validation info @@ -71,7 +72,7 @@ void ModelValidationHelper::resolveConflict(ValidationInfo &info) //Resolving broken references by swaping the object ids if(info.getValidationType()==ValidationInfo::BROKEN_REFERENCE || - info.getValidationType()==ValidationInfo::SP_OBJ_BROKEN_REFERENCE) + info.getValidationType()==ValidationInfo::SP_OBJ_BROKEN_REFERENCE) { BaseObject *info_obj=info.getObject(), *aux_obj=nullptr; unsigned obj_id=info_obj->getObjectId(); @@ -190,6 +191,13 @@ void ModelValidationHelper::resolveConflict(ValidationInfo &info) refs.pop_back(); } } + //Resolving the absence of postgis extension + else if(info.getValidationType()==ValidationInfo::MISSING_EXTENSION && !db_model->getExtension(QString("postgis"))) + { + Extension *extension = new Extension(); + extension->setName(QString("postgis")); + db_model->addExtension(extension); + } } catch(Exception &e) { @@ -274,13 +282,14 @@ void ModelValidationHelper::validateModel(void) map > dup_objects; map >::iterator mitr; QString name, signal_msg=QString("`%1' (%2)"); + bool postgis_exists = db_model->getObjectIndex(QString("postgis"), OBJ_EXTENSION) >= 0; warn_count=error_count=progress=0; val_infos.clear(); valid_canceled=false; /* Step 1: Validating broken references. This situation happens when a object references another - whose id is smaller than the id of the first one. */ + which id is smaller than the id of the first one. */ for(i=0; i < count && !valid_canceled; i++) { obj_list=db_model->getObjectList(types[i]); @@ -508,8 +517,31 @@ void ModelValidationHelper::validateModel(void) i++; mitr++; } + // Step 3: Checking if columns of any table is using GiS data types and the postgis extension is not created. + if(!postgis_exists) + { + obj_list=db_model->getObjectList(OBJ_TABLE); + itr=obj_list->begin(); + i=0; + + while(itr!=obj_list->end() && !valid_canceled) + { + table = dynamic_cast
(*itr); + itr++; + + for(auto &obj : *table->getObjectList(OBJ_COLUMN)) + { + col = dynamic_cast(obj); + + if(col->getType().isGiSType()) + generateValidationInfo(ValidationInfo::MISSING_EXTENSION, col, {}); + } - /* Step 3: Checking if there are some invalidated relationship. In some cases, specially with identifier and generalization relationships, + progress=30 + ((i/static_cast(obj_list->size()))*20); + } + } + + /* Step 4: Checking if there are some invalidated relationship. In some cases, specially with identifier and generalization relationships, the columns aren't correctly propagated due to creation order and special behavior of those objects. Thus, in order to keep all columns synchonized it is need to make this step and change the relationship creation order if needed. This step is executed only when there is no validation infos generated because for each broken relationship there is the need to do a revalidation of all relationships */ @@ -520,7 +552,7 @@ void ModelValidationHelper::validateModel(void) while(itr!=obj_list->end() && !valid_canceled) { - progress=30 + ((i/static_cast(obj_list->size()))*20); + progress=40 + ((i/static_cast(obj_list->size()))*20); if(dynamic_cast(*itr)->isInvalidated()) generateValidationInfo(ValidationInfo::BROKEN_REL_CONFIG, *itr, {}); @@ -529,7 +561,6 @@ void ModelValidationHelper::validateModel(void) } } - if(!valid_canceled && !fix_mode) { //Step 3 (optional): Validating the SQL code onto a local DBMS. @@ -575,8 +606,9 @@ void ModelValidationHelper::applyFixes(void) { if(!validate_rels) validate_rels=(val_infos[i].getValidationType()==ValidationInfo::BROKEN_REFERENCE || - val_infos[i].getValidationType()==ValidationInfo::SP_OBJ_BROKEN_REFERENCE || - val_infos[i].getValidationType()==ValidationInfo::NO_UNIQUE_NAME); + val_infos[i].getValidationType()==ValidationInfo::SP_OBJ_BROKEN_REFERENCE || + val_infos[i].getValidationType()==ValidationInfo::NO_UNIQUE_NAME || + val_infos[i].getValidationType()==ValidationInfo::MISSING_EXTENSION); /* Checking if a broken relatinship is found, when this is the case all the pending validation info will not be analyzed until no broken relationship is found */ diff --git a/libpgmodeler_ui/src/modelvalidationwidget.cpp b/libpgmodeler_ui/src/modelvalidationwidget.cpp index 9319a73cff..15f4faf45c 100644 --- a/libpgmodeler_ui/src/modelvalidationwidget.cpp +++ b/libpgmodeler_ui/src/modelvalidationwidget.cpp @@ -266,6 +266,16 @@ void ModelValidationWidget::updateValidation(ValidationInfo val_info) .arg(val_info.getObject()->getObjectId())); else if(val_info.getValidationType()==ValidationInfo::SQL_VALIDATION_ERR) label->setText(trUtf8("SQL validation failed due to error(s) below. NOTE: These errors does not invalidates the model but may affect operations like export and diff.")); + else if(val_info.getValidationType() == ValidationInfo::MISSING_EXTENSION) + { + Column *col = dynamic_cast(val_info.getObject()); + + label->setText(trUtf8("The column %1 on %2 (%3) is referencing the geospatial data type %4 but the postgis extension is not present in the model!") + .arg(col->getName()) + .arg(col->getParentTable()->getSignature(true)) + .arg(BaseObject::getTypeName(OBJ_TABLE)) + .arg(~col->getType())); + } else label->setText(val_info.getErrors().at(0)); @@ -274,7 +284,6 @@ void ModelValidationWidget::updateValidation(ValidationInfo val_info) val_info.getValidationType()==ValidationInfo::VALIDATION_ABORTED) { QStringList errors=val_info.getErrors(); - QFont fnt; item->setIcon(0, QPixmap(PgModelerUiNS::getIconPath("msgbox_alerta"))); validation_prog_pb->setValue(validation_prog_pb->maximum()); reenableValidation(); @@ -289,9 +298,6 @@ void ModelValidationWidget::updateValidation(ValidationInfo val_info) label1->setTextInteractionFlags(Qt::TextSelectableByMouse); label1->setText(errors.back()); label1->setTextInteractionFlags(Qt::TextSelectableByMouse); - fnt=label1->font(); - fnt.setPointSizeF(8.0f); - label1->setFont(fnt); output_trw->setItemWidget(item1, 0, label1); errors.pop_back(); } @@ -306,6 +312,11 @@ void ModelValidationWidget::updateValidation(ValidationInfo val_info) PgModelerUiNS::createOutputTreeItem(output_trw, trUtf8("HINT: try to swap the relationship by another ones that somehow are linked to it through generated columns or constraints to solve this issue. Note that other objects may be lost in the swap process."), QPixmap(PgModelerUiNS::getIconPath("msgbox_alerta")), item); } + else if(val_info.getValidationType()==ValidationInfo::MISSING_EXTENSION) + { + PgModelerUiNS::createOutputTreeItem(output_trw, trUtf8("HINT: Create the extension in the model or let it be created by applying the needed fixes."), + QPixmap(PgModelerUiNS::getIconPath("msgbox_alerta")), item); + } else { //Listing the referrer object on output pane @@ -560,5 +571,8 @@ void ModelValidationWidget::swapObjectsIds(void) SwapObjectsIdsWidget *swap_ids_wgt=new SwapObjectsIdsWidget; swap_ids_wgt->setModel(model_wgt->getDatabaseModel()); parent_form.setMainWidget(swap_ids_wgt); + + GeneralConfigWidget::restoreWidgetGeometry(&parent_form, this->metaObject()->className()); parent_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&parent_form, this->metaObject()->className()); } diff --git a/libpgmodeler_ui/src/modelwidget.cpp b/libpgmodeler_ui/src/modelwidget.cpp index 000c455c1d..c959ab3bdd 100644 --- a/libpgmodeler_ui/src/modelwidget.cpp +++ b/libpgmodeler_ui/src/modelwidget.cpp @@ -56,6 +56,8 @@ #include "swapobjectsidswidget.h" #include "genericsqlwidget.h" #include "policywidget.h" +#include "tabledatawidget.h" +#include "generalconfigwidget.h" vector ModelWidget::copied_objects; vector ModelWidget::cutted_objects; @@ -209,6 +211,8 @@ ModelWidget::ModelWidget(QWidget *parent) : QWidget(parent) zoom_info_lbl->setVisible(false); zoom_info_timer.setInterval(3000); + action_edit_data=new QAction(QIcon(PgModelerUiNS::getIconPath("editdata")), trUtf8("Edit data"), this); + action_source_code=new QAction(QIcon(PgModelerUiNS::getIconPath("codigosql")), trUtf8("Source"), this); action_source_code->setShortcut(QKeySequence(trUtf8("Alt+S"))); action_source_code->setToolTip(trUtf8("Show object source code")); @@ -223,11 +227,11 @@ ModelWidget::ModelWidget(QWidget *parent) : QWidget(parent) action_remove=new QAction(QIcon(PgModelerUiNS::getIconPath("excluir")), trUtf8("Delete"), this); action_remove->setShortcut(QKeySequence(trUtf8("Del"))); - action_remove->setMenuRole(QAction::NoRole); + action_remove->setMenuRole(QAction::NoRole); action_cascade_del=new QAction(QIcon(PgModelerUiNS::getIconPath("delcascade")), trUtf8("Del. cascade"), this); action_cascade_del->setShortcut(QKeySequence(trUtf8("Shift+Del"))); - action_cascade_del->setMenuRole(QAction::NoRole); + action_cascade_del->setMenuRole(QAction::NoRole); action_select_all=new QAction(QIcon(PgModelerUiNS::getIconPath("seltodos")), trUtf8("Select all"), this); action_select_all->setToolTip(trUtf8("Selects all the graphical objects in the model")); @@ -237,15 +241,15 @@ ModelWidget::ModelWidget(QWidget *parent) : QWidget(parent) action_copy=new QAction(QIcon(PgModelerUiNS::getIconPath("copiar")), trUtf8("Copy"), this); action_copy->setShortcut(QKeySequence(trUtf8("Ctrl+C"))); - action_copy->setMenuRole(QAction::NoRole); + action_copy->setMenuRole(QAction::NoRole); action_paste=new QAction(QIcon(PgModelerUiNS::getIconPath("colar")), trUtf8("Paste"), this); action_paste->setShortcut(QKeySequence(trUtf8("Ctrl+V"))); - action_paste->setMenuRole(QAction::NoRole); + action_paste->setMenuRole(QAction::NoRole); action_cut=new QAction(QIcon(PgModelerUiNS::getIconPath("recortar")), trUtf8("Cut"), this); action_cut->setShortcut(QKeySequence(trUtf8("Ctrl+X"))); - action_cut->setMenuRole(QAction::NoRole); + action_cut->setMenuRole(QAction::NoRole); action_deps_refs=new QAction(QIcon(PgModelerUiNS::getIconPath("depsrefs")), trUtf8("Deps && Referrers"), this); @@ -293,7 +297,7 @@ ModelWidget::ModelWidget(QWidget *parent) : QWidget(parent) action_duplicate=new QAction(QIcon(PgModelerUiNS::getIconPath("duplicate")), trUtf8("Duplicate"), this); action_duplicate->setShortcut(QKeySequence(trUtf8("Ctrl+D"))); - action_duplicate->setMenuRole(QAction::NoRole); + action_duplicate->setMenuRole(QAction::NoRole); action_extended_attribs=new QAction(QIcon(PgModelerUiNS::getIconPath("toggleattribs")), trUtf8("Extended attributes"), this); action_show_ext_attribs=new QAction(trUtf8("Show"), this); @@ -409,6 +413,7 @@ ModelWidget::ModelWidget(QWidget *parent) : QWidget(parent) connect(action, SIGNAL(triggered(bool)), this, SLOT(selectAllObjects())); } + connect(action_edit_data, SIGNAL(triggered(bool)), this, SLOT(editTableData())); connect(&zoom_info_timer, SIGNAL(timeout()), zoom_info_lbl, SLOT(hide())); connect(action_source_code, SIGNAL(triggered(bool)), this, SLOT(showSourceCode(void))); connect(action_edit, SIGNAL(triggered(bool)),this,SLOT(editObject(void))); @@ -433,24 +438,18 @@ ModelWidget::ModelWidget(QWidget *parent) : QWidget(parent) connect(action_remove_rel_points, SIGNAL(triggered(bool)), this, SLOT(removeRelationshipPoints(void))); connect(action_enable_sql, SIGNAL(triggered(bool)), this, SLOT(toggleObjectSQL(void))); connect(action_disable_sql, SIGNAL(triggered(bool)), this, SLOT(toggleObjectSQL(void))); - connect(action_remove, &QAction::triggered, [&](){ removeObjects(false); }); connect(action_cascade_del, &QAction::triggered, [&](){ removeObjects(true); }); - connect(action_fade_in, SIGNAL(triggered(bool)), this, SLOT(fadeObjectsIn())); connect(action_fade_out, SIGNAL(triggered(bool)), this, SLOT(fadeObjectsOut())); connect(action_fade_rels_in, SIGNAL(triggered(bool)), this, SLOT(fadeObjectsIn())); connect(action_fade_rels_out, SIGNAL(triggered(bool)), this, SLOT(fadeObjectsOut())); - connect(action_show_ext_attribs, SIGNAL(triggered(bool)), this, SLOT(toggleExtendedAttributes())); connect(action_hide_ext_attribs, SIGNAL(triggered(bool)), this, SLOT(toggleExtendedAttributes())); - connect(action_show_schemas_rects, SIGNAL(triggered(bool)), this, SLOT(toggleSchemasRectangles())); connect(action_hide_schemas_rects, SIGNAL(triggered(bool)), this, SLOT(toggleSchemasRectangles())); - connect(db_model, SIGNAL(s_objectAdded(BaseObject*)), this, SLOT(handleObjectAddition(BaseObject *))); connect(db_model, SIGNAL(s_objectRemoved(BaseObject*)), this, SLOT(handleObjectRemoval(BaseObject *))); - connect(scene, SIGNAL(s_objectsMoved(bool)), this, SLOT(handleObjectsMovement(bool))); connect(scene, SIGNAL(s_objectModified(BaseGraphicObject*)), this, SLOT(handleObjectModification(BaseGraphicObject*))); connect(scene, SIGNAL(s_objectDoubleClicked(BaseGraphicObject*)), this, SLOT(handleObjectDoubleClick(BaseGraphicObject*))); @@ -458,9 +457,7 @@ ModelWidget::ModelWidget(QWidget *parent) : QWidget(parent) connect(scene, SIGNAL(s_popupMenuRequested(void)), this, SLOT(showObjectMenu(void))); connect(scene, SIGNAL(s_objectSelected(BaseGraphicObject*,bool)), this, SLOT(configureObjectSelection(void))); connect(scene, SIGNAL(s_objectsSelectedInRange(void)), this, SLOT(configureObjectSelection(void))); - connect(scene, &ObjectsScene::s_extAttributesToggled, [&](){ modified = true; }); - connect(scene, SIGNAL(s_popupMenuRequested(BaseObject*)), new_obj_overlay_wgt, SLOT(hide())); connect(scene, SIGNAL(s_popupMenuRequested(void)), new_obj_overlay_wgt, SLOT(hide())); connect(scene, SIGNAL(s_objectSelected(BaseGraphicObject*,bool)), new_obj_overlay_wgt, SLOT(hide())); @@ -1607,6 +1604,7 @@ int ModelWidget::openEditingForm(QWidget *widget, unsigned button_conf) { BaseForm editing_form(this); BaseObjectWidget *base_obj_wgt=qobject_cast(widget); + int res = 0; if(base_obj_wgt) editing_form.setMainWidget(base_obj_wgt); @@ -1614,7 +1612,12 @@ int ModelWidget::openEditingForm(QWidget *widget, unsigned button_conf) editing_form.setMainWidget(widget); editing_form.setButtonConfiguration(button_conf); - return(editing_form.exec()); + + GeneralConfigWidget::restoreWidgetGeometry(&editing_form, widget->metaObject()->className()); + res = editing_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&editing_form, widget->metaObject()->className()); + + return(res); } template @@ -1796,7 +1799,7 @@ void ModelWidget::showObjectForm(ObjectType obj_type, BaseObject *object, BaseOb emit s_objectManipulated(); } else - emit s_manipulationCanceled(); + emit s_manipulationCanceled(); this->setFocus(); } @@ -2006,11 +2009,13 @@ void ModelWidget::setTag(void) { op_id=op_list->registerObject(obj, Operation::OBJECT_MODIFIED, -1); tab->setTag(dynamic_cast(tag)); - tab->setModified(true); } } op_list->finishOperationChain(); + db_model->setObjectsModified(selected_objects); + scene->clearSelection(); + emit s_objectModified(); } catch(Exception &e) @@ -2210,9 +2215,9 @@ void ModelWidget::copyObjects(bool duplicate_mode) vector deps; BaseObject *object=nullptr; TableObject *tab_obj=nullptr; - Table *table=nullptr; + BaseTable *table=nullptr; Constraint *constr=nullptr; - ObjectType types[]={ OBJ_TRIGGER, OBJ_INDEX, OBJ_CONSTRAINT }; + ObjectType types[]={ OBJ_TRIGGER, OBJ_RULE, OBJ_INDEX, OBJ_CONSTRAINT, OBJ_POLICY }; unsigned i, type_id, count; Messagebox msg_box; @@ -2254,11 +2259,11 @@ void ModelWidget::copyObjects(bool duplicate_mode) /* Copying the special objects (which references columns added by relationship) in order to be correclty created when pasted */ - if(object->getObjectType()==OBJ_TABLE) + if(object->getObjectType()==OBJ_TABLE || object->getObjectType() == OBJ_VIEW) { - table=dynamic_cast
(object); + table=dynamic_cast(object); - for(type_id=0; type_id < 3; type_id++) + for(type_id=0; type_id < 4; type_id++) { count=table->getObjectCount(types[type_id]); @@ -2271,14 +2276,16 @@ void ModelWidget::copyObjects(bool duplicate_mode) columns added by relationship. Case the object is a constraint, it cannot be a primary key because this type of constraint is treated separetely by relationships */ if(!tab_obj->isAddedByRelationship() && - ((constr && + (!constr || + (((constr && (constr->getConstraintType()==ConstraintType::foreign_key || (constr->getConstraintType()==ConstraintType::unique && - constr->isReferRelationshipAddedColumn()))) || - (types[type_id]==OBJ_TRIGGER && dynamic_cast(tab_obj)->isReferRelationshipAddedColumn()) || - (types[type_id]==OBJ_INDEX && dynamic_cast(tab_obj)->isReferRelationshipAddedColumn()))) + constr->isReferRelationshipAddedColumn()))))))) deps.push_back(tab_obj); } + + if(object->getObjectType() == OBJ_VIEW && type_id >= 2) + break; } } } @@ -2374,7 +2381,7 @@ void ModelWidget::pasteObjects(void) aux_object=db_model->getObject(aux_name, obj_type); else { - if(sel_view && (obj_type==OBJ_TRIGGER || obj_type==OBJ_RULE)) + if(sel_view && (obj_type==OBJ_TRIGGER || obj_type==OBJ_RULE || obj_type==OBJ_INDEX)) aux_object=sel_view->getObject(aux_name, obj_type); else if(sel_table) aux_object=sel_table->getObject(aux_name, obj_type); @@ -2420,7 +2427,12 @@ void ModelWidget::pasteObjects(void) else { if(tab_obj) - tab_obj->setName(PgModelerNS::generateUniqueName(tab_obj, (*sel_table->getObjectList(tab_obj->getObjectType())), false, QString("_cp"), true)); + { + if(sel_table) + tab_obj->setName(PgModelerNS::generateUniqueName(tab_obj, (*sel_table->getObjectList(tab_obj->getObjectType())), false, QString("_cp"), true)); + else + tab_obj->setName(PgModelerNS::generateUniqueName(tab_obj, (*sel_view->getObjectList(tab_obj->getObjectType())), false, QString("_cp"), true)); + } else object->setName(PgModelerNS::generateUniqueName(object, (*db_model->getObjectList(object->getObjectType())), false, QString("_cp"), true)); @@ -2467,11 +2479,12 @@ void ModelWidget::pasteObjects(void) parent=sel_view; /* Only generates the XML for a table object when the selected receiver object - is a table or is a view and the current object is a trigger or rule (because + is a table or is a view and the current object is a trigger, index, or rule (because view's only accepts this two types) */ if(sel_table || (sel_view && (tab_obj->getObjectType()==OBJ_TRIGGER || - tab_obj->getObjectType()==OBJ_RULE))) + tab_obj->getObjectType()==OBJ_RULE || + tab_obj->getObjectType()==OBJ_INDEX))) { //Backups the original parent table orig_parent_tab=tab_obj->getParentTable(); @@ -2549,17 +2562,11 @@ void ModelWidget::pasteObjects(void) //Special case for table objects if(tab_obj) { - if(sel_table && - (tab_obj->getObjectType()==OBJ_COLUMN || tab_obj->getObjectType()==OBJ_RULE)) + if(sel_table && tab_obj->getObjectType()==OBJ_COLUMN) { sel_table->addObject(tab_obj); sel_table->setModified(true); } - else if(sel_view && tab_obj->getObjectType()==OBJ_RULE) - { - sel_view->addObject(tab_obj); - sel_view->setModified(true); - } //Updates the fk relationships if the constraint is a foreign-key if(constr && constr->getConstraintType()==ConstraintType::foreign_key) @@ -2639,7 +2646,11 @@ void ModelWidget::duplicateObject(void) table = dynamic_cast(object)->getParentTable(); PgModelerNS::copyObject(&dup_object, object, obj_type); - dup_object->setName(PgModelerNS::generateUniqueName(dup_object, *dynamic_cast
(table)->getObjectList(obj_type), false, QString("_cp"))); + + if(table->getObjectType() == OBJ_TABLE) + dup_object->setName(PgModelerNS::generateUniqueName(dup_object, *dynamic_cast
(table)->getObjectList(obj_type), false, QString("_cp"))); + else + dup_object->setName(PgModelerNS::generateUniqueName(dup_object, *dynamic_cast(table)->getObjectList(obj_type), false, QString("_cp"))); op_id=op_list->registerObject(dup_object, Operation::OBJECT_CREATED, -1, table); table->addObject(dup_object); @@ -2677,7 +2688,7 @@ void ModelWidget::removeObjects(bool cascade) ObjectType obj_type=BASE_OBJECT, parent_type=BASE_OBJECT; BaseObject *object=nullptr, *aux_obj=nullptr; vector sel_objs, aux_sel_objs; - vector constrs; + map> objs_map; map>::reverse_iterator ritr, ritr_end; QAction *obj_sender=dynamic_cast(sender()); @@ -2778,37 +2789,6 @@ void ModelWidget::removeObjects(bool cascade) //If the object is as FK relationship remove the foreign keys that generates it if(obj_type==BASE_RELATIONSHIP) { - /*rel=dynamic_cast(object); - if(rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_FK) - { - aux_table=dynamic_cast
(rel->getTable(BaseRelationship::DST_TABLE)); - dynamic_cast
(rel->getTable(BaseRelationship::SRC_TABLE))->getForeignKeys(constrs,false, aux_table); - - if(!rel->isSelfRelationship()) - { - aux_table=dynamic_cast
(rel->getTable(BaseRelationship::SRC_TABLE)); - dynamic_cast
(rel->getTable(BaseRelationship::DST_TABLE))->getForeignKeys(constrs,false, aux_table); - } - - //Adds the fks to the map of objects to be removed - while(!constrs.empty()) - { - tab_obj=constrs.back(); - obj_id=tab_obj->getObjectId(); - - if(objs_map.count(obj_id)==0) - { - objs_map[tab_obj->getObjectId()]=std::make_tuple(tab_obj, - tab_obj->getName(true), - tab_obj->getObjectType(), - tab_obj->getParentTable()->getName(true), - tab_obj->getParentTable()->getObjectType()); - - } - constrs.pop_back(); - } - }*/ - rel = dynamic_cast(object); if(rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_FK) @@ -2822,7 +2802,7 @@ void ModelWidget::removeObjects(bool cascade) tab_obj->getName(true), tab_obj->getObjectType(), tab_obj->getParentTable()->getName(true), - tab_obj->getParentTable()->getObjectType()); + OBJ_TABLE); } } @@ -2836,10 +2816,10 @@ void ModelWidget::removeObjects(bool cascade) parent_type=(tab_obj ? tab_obj->getParentTable()->getObjectType() : OBJ_DATABASE); objs_map[object->getObjectId()]=std::make_tuple(object, - obj_name, - obj_type, - parent_name, - parent_type); + obj_name, + obj_type, + parent_name, + parent_type); } } @@ -3134,9 +3114,9 @@ void ModelWidget::configureSubmenu(BaseObject *object) menus[i]->clear(); //Configuring actions "Move to schema", "Change Owner" and "Set tag" - if((i==0 && accepts_schema) || - (i==1 && accepts_owner) || - (i==2 && tab_or_view)) + if((types[i] == OBJ_SCHEMA && accepts_schema) || + (types[i] == OBJ_ROLE && accepts_owner) || + (types[i]==OBJ_TAG && tab_or_view)) { obj_list=db_model->getObjects(types[i]); @@ -3147,6 +3127,12 @@ void ModelWidget::configureSubmenu(BaseObject *object) } else { + if(types[i] == OBJ_TAG) + { + menus[i]->addAction(trUtf8("None"), this, SLOT(setTag())); + menus[i]->addSeparator(); + } + while(!obj_list.empty()) { act=new QAction(obj_list.back()->getName(), menus[i]); @@ -3204,14 +3190,15 @@ void ModelWidget::configureSubmenu(BaseObject *object) if(tab_or_view) quick_actions_menu.addAction(action_set_tag); - //Display the "Edit permissions" action a single object is selected and it accepts permissions - if(object && Permission::objectAcceptsPermission(obj_type)) + if(object && Permission::acceptsPermission(obj_type)) { quick_actions_menu.addAction(action_edit_perms); action_edit_perms->setData(QVariant::fromValue(object)); } - //Display the "Edit permissions" action a single object is selected and it accepts permissions + if(object && obj_type == OBJ_TABLE) + quick_actions_menu.addAction(action_edit_data); + if(object && BaseObject::acceptsCustomSQL(obj_type)) { action_append_sql->setData(QVariant::fromValue(object)); @@ -3324,7 +3311,10 @@ void ModelWidget::configureFadeMenu(void) } if(obj_type == OBJ_TABLE || obj_type == OBJ_VIEW) + { fade_menu.addAction(action_fade_rels); + action_fade_rels->setText(trUtf8("Table && Relationships")); + } } } } @@ -3332,10 +3322,14 @@ void ModelWidget::configureFadeMenu(void) void ModelWidget::fadeObjects(const vector &objects, bool fade_in) { BaseObjectView *obj_view = nullptr; + Schema *schema = nullptr; for(auto obj : objects) { - if(!BaseGraphicObject::isGraphicObject(obj->getObjectType())) + schema = dynamic_cast(obj); + + if(!BaseGraphicObject::isGraphicObject(obj->getObjectType()) || + (schema && !schema->isRectVisible())) continue; obj_view = dynamic_cast(dynamic_cast(obj)->getReceiverObject()); @@ -3362,7 +3356,6 @@ void ModelWidget::fadeObjects(QAction *action, bool fade_in) return; vector list; - //BaseObjectView *obj_view = nullptr; //If the database object is selected or there is no object select if(selected_objects.empty() || (selected_objects.size() == 1 && selected_objects[0]->getObjectType() == OBJ_DATABASE)) @@ -3408,7 +3401,16 @@ void ModelWidget::fadeObjects(QAction *action, bool fade_in) vector rel_list = db_model->getRelationships(dynamic_cast(selected_objects[0])); for(auto rel : rel_list) + { list.push_back(rel); + list.push_back(rel->getTable(BaseRelationship::SRC_TABLE)); + list.push_back(rel->getTable(BaseRelationship::DST_TABLE)); + } + + vector::iterator end; + std::sort(list.begin(), list.end()); + end=std::unique(list.begin(), list.end()); + list.erase(end, list.end()); } else //Applying fade to the selected objects @@ -3416,23 +3418,6 @@ void ModelWidget::fadeObjects(QAction *action, bool fade_in) } } - /*for(auto obj : list) - { - obj_view = dynamic_cast(dynamic_cast(obj)->getReceiverObject()); - - if(obj_view) - { - dynamic_cast(obj)->setFadedOut(!fade_in); - - obj_view->setOpacity(fade_in ? 1 : min_object_opacity); - - //If the minimum opacity is zero the object hidden - obj_view->setVisible(fade_in || (!fade_in && min_object_opacity > 0)); - - this->modified = true; - } - } */ - fadeObjects(list, fade_in); scene->clearSelection(); } @@ -3447,6 +3432,26 @@ void ModelWidget::fadeObjectsOut(void) fadeObjects(qobject_cast(sender()), false); } +void ModelWidget::toggleAllExtendedAttributes(bool value) +{ + BaseTable *base_tab = nullptr; + vector objects; + + this->scene->clearSelection(); + objects.assign(db_model->getObjectList(OBJ_TABLE)->begin(), db_model->getObjectList(OBJ_TABLE)->end()); + objects.insert(objects.end(), db_model->getObjectList(OBJ_VIEW)->begin(), db_model->getObjectList(OBJ_VIEW)->end()); + + for(auto obj : objects) + { + base_tab = dynamic_cast(obj); + + if(base_tab) + base_tab->setExtAttribsHidden(value); + } + + this->setModified(true); +} + void ModelWidget::toggleExtendedAttributes(void) { bool hide = sender() == action_hide_ext_attribs; @@ -4363,6 +4368,16 @@ void ModelWidget::jumpToTable(void) viewport->centerOn(tab_view); } +void ModelWidget::editTableData(void) +{ + TableDataWidget *tab_data_wgt=new TableDataWidget; + + tab_data_wgt->setAttributes(db_model, dynamic_cast
(selected_objects.at(0))); + openEditingForm(tab_data_wgt); + this->setModified(true); + emit s_objectManipulated(); +} + void ModelWidget::rearrangeTablesHierarchically(void) { vector objects; diff --git a/libpgmodeler_ui/src/modelwidget.h b/libpgmodeler_ui/src/modelwidget.h index 375ff61fc5..ac387379f2 100644 --- a/libpgmodeler_ui/src/modelwidget.h +++ b/libpgmodeler_ui/src/modelwidget.h @@ -243,7 +243,8 @@ class ModelWidget: public QWidget { *action_jump_to_table, *action_schemas_rects, *action_show_schemas_rects, - *action_hide_schemas_rects; + *action_hide_schemas_rects, + *action_edit_data; //! \brief Actions used to create new objects on the model map actions_new_objects; @@ -273,6 +274,8 @@ class ModelWidget: public QWidget { void fadeObjects(const vector &objects, bool fade_in); + void toggleAllExtendedAttributes(bool value); + public: static constexpr double MINIMUM_ZOOM=0.050000, MAXIMUM_ZOOM=5.000001, @@ -476,6 +479,8 @@ class ModelWidget: public QWidget { void jumpToTable(void); + void editTableData(void); + public slots: void loadModel(const QString &filename); void saveModel(const QString &filename); diff --git a/libpgmodeler_ui/src/newobjectoverlaywidget.cpp b/libpgmodeler_ui/src/newobjectoverlaywidget.cpp index 9435231c64..8a94788195 100644 --- a/libpgmodeler_ui/src/newobjectoverlaywidget.cpp +++ b/libpgmodeler_ui/src/newobjectoverlaywidget.cpp @@ -113,18 +113,19 @@ void NewObjectOverlayWidget::setSelectedObjects(vector &sel_objs) else if(sel_objs.empty()) obj_type=OBJ_DATABASE; - db_objs_btns_wgt->setVisible(obj_type==OBJ_DATABASE); - sch_objs_btns_wgt->setVisible(obj_type==OBJ_DATABASE || obj_type==OBJ_SCHEMA); + db_objs_grp->setVisible(obj_type==OBJ_DATABASE); + sch_objs_grp->setVisible(obj_type==OBJ_DATABASE || obj_type==OBJ_SCHEMA); - tab_objs_btns_wgt->setVisible(obj_type==OBJ_TABLE || obj_type==OBJ_VIEW || obj_type==OBJ_RELATIONSHIP); + tab_objs_grp->setVisible(obj_type==OBJ_TABLE || obj_type==OBJ_VIEW || obj_type==OBJ_RELATIONSHIP); column_tb->setDisabled(obj_type==OBJ_VIEW); constraint_tb->setDisabled(obj_type==OBJ_VIEW); index_tb->setVisible(obj_type==OBJ_TABLE || obj_type==OBJ_VIEW); rule_tb->setVisible(obj_type==OBJ_TABLE || obj_type==OBJ_VIEW); trigger_tb->setVisible(obj_type==OBJ_TABLE || obj_type==OBJ_VIEW); + policy_tb->setVisible(obj_type==OBJ_TABLE || obj_type==OBJ_VIEW); tab_perms_tb->setVisible(obj_type==OBJ_TABLE || obj_type==OBJ_VIEW); - rel_btns_wgt->setVisible((sel_objs.size()==1 && sel_objs.at(0)->getObjectType()==OBJ_TABLE) || - (sel_objs.size()==2 && sel_objs.at(0)->getObjectType()==OBJ_TABLE && sel_objs.at(1)->getObjectType()==OBJ_TABLE)); + rels_grp->setVisible((sel_objs.size()==1 && sel_objs.at(0)->getObjectType()==OBJ_TABLE) || + (sel_objs.size()==2 && sel_objs.at(0)->getObjectType()==OBJ_TABLE && sel_objs.at(1)->getObjectType()==OBJ_TABLE)); overlay_frm->adjustSize(); this->adjustSize(); diff --git a/libpgmodeler_ui/src/objectdepsrefswidget.cpp b/libpgmodeler_ui/src/objectdepsrefswidget.cpp index dd9e022078..01e834b5a0 100644 --- a/libpgmodeler_ui/src/objectdepsrefswidget.cpp +++ b/libpgmodeler_ui/src/objectdepsrefswidget.cpp @@ -84,12 +84,12 @@ void ObjectDepsRefsWidget::updateObjectTables(void) objs.erase(std::find(objs.begin(), objs.end(), this->object)); ObjectFinderWidget::updateObjectTable(dependences_tbw, objs); + objs.clear(); if(!inc_ind_refs_chk->isChecked()) model->getObjectReferences(object, objs); else model->__getObjectReferences(object, objs); - objs.clear(); ObjectFinderWidget::updateObjectTable(references_tbw, objs); references_tbw->resizeColumnsToContents(); diff --git a/libpgmodeler_ui/src/objectfinderwidget.cpp b/libpgmodeler_ui/src/objectfinderwidget.cpp index 5c2c22877a..8608f64dfd 100644 --- a/libpgmodeler_ui/src/objectfinderwidget.cpp +++ b/libpgmodeler_ui/src/objectfinderwidget.cpp @@ -216,7 +216,6 @@ void ObjectFinderWidget::findObjects(void) if(model_wgt) { vector types; - clearResult(); //Getting the selected object types @@ -270,9 +269,13 @@ void ObjectFinderWidget::selectObject(void) if(graph_obj) { BaseObjectView *obj=dynamic_cast(graph_obj->getReceiverObject()); - model_wgt->scene->clearSelection(); - model_wgt->viewport->centerOn(obj); - obj->setSelected(true); + + if(obj) + { + model_wgt->scene->clearSelection(); + model_wgt->viewport->centerOn(obj); + obj->setSelected(true); + } } } //Showing the popup menu for the selected object in the result set @@ -320,10 +323,9 @@ void ObjectFinderWidget::updateObjectTable(QTableWidget *tab_wgt, vectorrowCount() > 0) - tab_wgt->removeRow(0); - + tab_wgt->setUpdatesEnabled(false); tab_wgt->setSortingEnabled(false); for(lin_idx=0, i=0; i < objs.size(); i++) @@ -333,26 +335,30 @@ void ObjectFinderWidget::updateObjectTable(QTableWidget *tab_wgt, vectorinsertRow(lin_idx); + new_row = false; + + if(static_cast(lin_idx) >= tab_wgt->rowCount()) + { + tab_wgt->insertRow(lin_idx); + new_row = true; + } //First column: Object id - tab_item=new QTableWidgetItem; - //tab_item->setFont(fnt); + tab_item=(new_row ? new QTableWidgetItem : tab_wgt->item(lin_idx, 0)); tab_item->setText(QString::number(objs[i]->getObjectId())); tab_item->setData(Qt::UserRole, QVariant::fromValue(reinterpret_cast(objs[i]))); - tab_wgt->setItem(lin_idx, 0, tab_item); - + if(new_row) tab_wgt->setItem(lin_idx, 0, tab_item); //Second column: Object name if(tab_wgt->columnCount() > 1) { - tab_item=new QTableWidgetItem; + tab_item=(new_row ? new QTableWidgetItem : tab_wgt->item(lin_idx, 1)); tab_item->setData(Qt::UserRole, QVariant::fromValue(reinterpret_cast(objs[i]))); fnt=tab_item->font(); tab_item->setText(objs[i]->getName()); tab_item->setIcon(QPixmap(PgModelerUiNS::getIconPath(BaseObject::getSchemaName(objs[i]->getObjectType()) + str_aux))); - tab_wgt->setItem(lin_idx, 1, tab_item); + if(new_row) tab_wgt->setItem(lin_idx, 1, tab_item); if(objs[i]->isProtected() || objs[i]->isSystemObject()) { @@ -365,6 +371,12 @@ void ObjectFinderWidget::updateObjectTable(QTableWidget *tab_wgt, vectorsetForeground(BaseObjectView::getFontStyle(ParsersAttributes::INH_COLUMN).foreground()); } + else + { + fnt.setItalic(false); + tab_item->setForeground(BaseObjectView::getFontStyle(ParsersAttributes::COLUMN).foreground()); + } + fnt.setStrikeOut(objs[i]->isSQLDisabled() && !objs[i]->isSystemObject()); tab_item->setFont(fnt); @@ -375,16 +387,16 @@ void ObjectFinderWidget::updateObjectTable(QTableWidget *tab_wgt, vectorcolumnCount() > 2) { fnt.setItalic(true); - tab_item=new QTableWidgetItem; + tab_item=(new_row ? new QTableWidgetItem : tab_wgt->item(lin_idx, 2)); tab_item->setFont(fnt); tab_item->setText(objs[i]->getTypeName()); - tab_wgt->setItem(lin_idx, 2, tab_item); + if(new_row) tab_wgt->setItem(lin_idx, 2, tab_item); } //Fourth column: Parent object name if(tab_wgt->columnCount() > 3) { - tab_item=new QTableWidgetItem; + tab_item=(new_row ? new QTableWidgetItem : tab_wgt->item(lin_idx, 3)); if(dynamic_cast(objs[i])) parent_obj=dynamic_cast(objs[i])->getParentTable(); @@ -397,18 +409,22 @@ void ObjectFinderWidget::updateObjectTable(QTableWidget *tab_wgt, vectorsetText(parent_obj ? parent_obj->getName() : QString("-")); tab_item->setData(Qt::UserRole, QVariant::fromValue(reinterpret_cast(parent_obj))); - - tab_wgt->setItem(lin_idx, 3, tab_item); + if(new_row) tab_wgt->setItem(lin_idx, 3, tab_item); if(parent_obj) { if(parent_obj->isProtected() || parent_obj->isSystemObject()) { fnt.setItalic(true); - tab_item->setFont(fnt); tab_item->setForeground(BaseObjectView::getFontStyle(ParsersAttributes::PROT_COLUMN).foreground()); } + else + { + fnt.setItalic(false); + tab_item->setForeground(BaseObjectView::getFontStyle(ParsersAttributes::COLUMN).foreground()); + } + tab_item->setFont(fnt); tab_item->setIcon(QPixmap(PgModelerUiNS::getIconPath(parent_obj->getObjectType()))); } } @@ -416,16 +432,20 @@ void ObjectFinderWidget::updateObjectTable(QTableWidget *tab_wgt, vectorcolumnCount() > 4) { - tab_item=new QTableWidgetItem; + tab_item=(new_row ? new QTableWidgetItem : tab_wgt->item(lin_idx, 4)); fnt.setItalic(true); tab_item->setFont(fnt); tab_item->setText(parent_obj ? parent_obj->getTypeName() : QString("-")); - tab_wgt->setItem(lin_idx, 4, tab_item); + if(new_row) tab_wgt->setItem(lin_idx, 4, tab_item); } lin_idx++; } + if(static_cast(objs.size()) != tab_wgt->rowCount()) + tab_wgt->setRowCount(objs.size()); + + tab_wgt->setUpdatesEnabled(true); tab_wgt->setSortingEnabled(true); } } diff --git a/libpgmodeler_ui/src/operationlistwidget.cpp b/libpgmodeler_ui/src/operationlistwidget.cpp index 6cee4a8adb..31a3733579 100644 --- a/libpgmodeler_ui/src/operationlistwidget.cpp +++ b/libpgmodeler_ui/src/operationlistwidget.cpp @@ -72,6 +72,7 @@ void OperationListWidget::updateOperationList(void) QFont font=this->font(); bool value=false; + operations_tw->setUpdatesEnabled(false); op_count_lbl->setText(QString("%1").arg(model_wgt->op_list->getCurrentSize())); current_pos_lbl->setText(QString("%1").arg(model_wgt->op_list->getCurrentIndex())); redo_tb->setEnabled(model_wgt->op_list->isRedoAvailable()); @@ -139,6 +140,8 @@ void OperationListWidget::updateOperationList(void) if(value) operations_tw->scrollToItem(item1); } + + operations_tw->setUpdatesEnabled(true); } emit s_operationListUpdated(); diff --git a/libpgmodeler_ui/src/permissionwidget.cpp b/libpgmodeler_ui/src/permissionwidget.cpp index 818b9666d2..59e6591a3b 100644 --- a/libpgmodeler_ui/src/permissionwidget.cpp +++ b/libpgmodeler_ui/src/permissionwidget.cpp @@ -150,7 +150,7 @@ void PermissionWidget::setAttributes(DatabaseModel *model, BaseObject *parent_ob chk1->setChecked(false); //Enabling the checkboxes using a validation of privilege type against the curret object type. - privileges_tbw->setRowHidden(priv, !Permission::objectAcceptsPermission(object->getObjectType(), priv)); + privileges_tbw->setRowHidden(priv, !Permission::acceptsPermission(object->getObjectType(), priv)); } listPermissions(); diff --git a/libpgmodeler_ui/src/pgmodeleruins.cpp b/libpgmodeler_ui/src/pgmodeleruins.cpp index e5447f1f06..036301a402 100644 --- a/libpgmodeler_ui/src/pgmodeleruins.cpp +++ b/libpgmodeler_ui/src/pgmodeleruins.cpp @@ -5,6 +5,8 @@ #include "numberedtexteditor.h" #include #include +#include "baseform.h" +#include "bulkdataeditwidget.h" namespace PgModelerUiNS { @@ -40,10 +42,12 @@ namespace PgModelerUiNS { else { QLabel *label=new QLabel; + label->setUpdatesEnabled(false); label->setTextFormat(Qt::AutoText); label->setText(text); label->setWordWrap(true); label->setTextInteractionFlags(Qt::TextSelectableByMouse); + label->setUpdatesEnabled(true); label->setMinimumHeight(output_trw->iconSize().height() * 1.5); label->setMaximumHeight(label->heightForWidth(label->width())); output_trw->setItemWidget(item, 0, label); @@ -63,6 +67,7 @@ namespace PgModelerUiNS { throw Exception(ERR_OPR_NOT_ALOC_OBJECT,__PRETTY_FUNCTION__,__FILE__,__LINE__); QListWidgetItem *item=new QListWidgetItem; + item->setIcon(ico); output_lst->addItem(item); @@ -71,6 +76,14 @@ namespace PgModelerUiNS { else { QLabel *label=new QLabel(text); + int txt_height = 0; + + txt_height = output_lst->fontMetrics().height() * text.count(QString("
")); + + if(txt_height == 0) + txt_height = output_lst->fontMetrics().height(); + + item->setSizeHint(QSize(output_lst->width(), txt_height)); output_lst->setItemWidget(item, label); } } @@ -199,7 +212,7 @@ namespace PgModelerUiNS { switch(factor_id) { case SMALL_FONT_FACTOR: - factor=0.85f; + factor=0.80f; break; case MEDIUM_FONT_FACTOR: factor=0.90f; @@ -213,10 +226,10 @@ namespace PgModelerUiNS { break; } - configureWidgetFont(widget, factor); + __configureWidgetFont(widget, factor); } - void configureWidgetFont(QWidget *widget, float factor) + void __configureWidgetFont(QWidget *widget, float factor) { if(!widget) return; @@ -279,8 +292,10 @@ namespace PgModelerUiNS { screen_id = qApp->desktop()->screenNumber(qApp->activeWindow()); QScreen *screen=qApp->screens().at(screen_id); float dpi_factor = 0; + float pixel_ratio = 0; dpi_factor = screen->logicalDotsPerInch() / 96.0f; + pixel_ratio = screen->devicePixelRatio(); //If the dpi_factor is unchanged (1) we keep the dialog original dimension if(dpi_factor <= 1.01f) @@ -307,8 +322,8 @@ namespace PgModelerUiNS { else if(min_size.height() >= max_h) curr_h = max_h; - curr_w *= dpi_factor; - curr_h *= dpi_factor; + curr_w *= dpi_factor * pixel_ratio; + curr_h *= dpi_factor * pixel_ratio; if(curr_w > screen->size().width()) curr_w = screen->size().width() * 0.80; @@ -318,5 +333,34 @@ namespace PgModelerUiNS { widget->setMinimumSize(widget->minimumSize()); widget->resize(curr_w, curr_h); + widget->adjustSize(); + } + + void bulkDataEdit(QTableWidget *results_tbw) + { + if(!results_tbw) + return; + + BaseForm base_frm; + BulkDataEditWidget *bulkedit_wgt = new BulkDataEditWidget; + + base_frm.setMainWidget(bulkedit_wgt); + base_frm.setButtonConfiguration(Messagebox::OK_CANCEL_BUTTONS); + + if(base_frm.exec() == QDialog::Accepted) + { + QList sel_ranges=results_tbw->selectedRanges(); + + for(auto range : sel_ranges) + { + for(int row = range.topRow(); row <= range.bottomRow(); row++) + { + for(int col = range.leftColumn(); col <= range.rightColumn(); col++) + { + results_tbw->item(row, col)->setText(bulkedit_wgt->value_edt->toPlainText()); + } + } + } + } } } diff --git a/libpgmodeler_ui/src/pgmodeleruins.h b/libpgmodeler_ui/src/pgmodeleruins.h index 523b738e0b..d2d64cc4cf 100644 --- a/libpgmodeler_ui/src/pgmodeleruins.h +++ b/libpgmodeler_ui/src/pgmodeleruins.h @@ -27,6 +27,7 @@ #include #include +#include #include #include "baseobject.h" #include "numberedtexteditor.h" @@ -38,7 +39,7 @@ namespace PgModelerUiNS { HUGE_FONT_FACTOR = 3; extern void configureWidgetFont(QWidget *widget, unsigned factor_id); - extern void configureWidgetFont(QWidget *widget, float factor); + extern void __configureWidgetFont(QWidget *widget, float factor); /*! \brief Creates a NumberedTextEditor instance automatically assigning it to 'parent'. This method will create a layout if 'parent' doesn't has one. If parent has a layout @@ -77,6 +78,9 @@ namespace PgModelerUiNS { //! \brief Resizes the provided dialog considering font dpi changes as well screen size extern void resizeDialog(QDialog *dialog); + + //! brief Changes the values of the grid selection at once + extern void bulkDataEdit(QTableWidget *results_tbw); } #endif diff --git a/libpgmodeler_ui/src/policywidget.cpp b/libpgmodeler_ui/src/policywidget.cpp index 201bd48b14..6104b9a74b 100644 --- a/libpgmodeler_ui/src/policywidget.cpp +++ b/libpgmodeler_ui/src/policywidget.cpp @@ -27,14 +27,16 @@ PolicyWidget::PolicyWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_POLICY model_objs_wgt = new ModelObjectsWidget(true, this); model_objs_wgt->setObjectVisible(OBJ_ROLE, true); - check_edt = PgModelerUiNS::createNumberedTextEditor(check_wgt); - check_hl = new SyntaxHighlighter(check_edt); - check_hl->loadConfiguration(GlobalAttributes::SQL_HIGHLIGHT_CONF_PATH); - using_edt = PgModelerUiNS::createNumberedTextEditor(using_wgt); + using_edt->setTabChangesFocus(true); using_hl = new SyntaxHighlighter(using_edt); using_hl->loadConfiguration(GlobalAttributes::SQL_HIGHLIGHT_CONF_PATH); + check_edt = PgModelerUiNS::createNumberedTextEditor(check_wgt); + check_edt->setTabChangesFocus(true); + check_hl = new SyntaxHighlighter(check_edt); + check_hl->loadConfiguration(GlobalAttributes::SQL_HIGHLIGHT_CONF_PATH); + roles_tab = new ObjectsTableWidget(ObjectsTableWidget::ALL_BUTTONS ^ (ObjectsTableWidget::DUPLICATE_BUTTON | ObjectsTableWidget::UPDATE_BUTTON | @@ -58,6 +60,7 @@ PolicyWidget::PolicyWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_POLICY command_cmb->addItems(cmds); configureFormLayout(policy_grid, OBJ_POLICY); + configureTabOrder({ basics_grp, attribs_tbw }); connect(roles_tab, SIGNAL(s_rowAdded(int)), model_objs_wgt, SLOT(show())); connect(model_objs_wgt, SIGNAL(s_visibilityChanged(BaseObject*, bool)), this, SLOT(selectRole(BaseObject*, bool))); diff --git a/libpgmodeler_ui/src/referencewidget.cpp b/libpgmodeler_ui/src/referencewidget.cpp new file mode 100644 index 0000000000..121f57a969 --- /dev/null +++ b/libpgmodeler_ui/src/referencewidget.cpp @@ -0,0 +1,171 @@ +/* +# PostgreSQL Database Modeler (pgModeler) +# +# Copyright 2006-2018 - Raphael Araújo e Silva +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# The complete text of GPLv3 is at LICENSE file on source code root directory. +# Also, you can get the complete GNU General Public License at +*/ + +#include "referencewidget.h" +#include "baseobjectwidget.h" + +ReferenceWidget::ReferenceWidget(QWidget *parent) : QWidget(parent) +{ + setupUi(this); + + ref_alias_ht=new HintTextWidget(ref_alias_hint, this); + ref_alias_ht->setText(ref_alias_edt->statusTip()); + + used_in_ht=new HintTextWidget(used_in_hint, this); + used_in_ht->setText(select_from_chk->statusTip()); + + ref_object_ht=new HintTextWidget(ref_object_hint, this); + ref_object_ht->setText(trUtf8("To reference all columns of a table select only a table in the object selector, this is the same as write [schema].[table].*. In order to reference a only a single column of a table select a column object in the selector.")); + + expression_txt=new NumberedTextEditor(this, true); + expression_hl=new SyntaxHighlighter(expression_txt, false, true); + expression_hl->loadConfiguration(GlobalAttributes::SQL_HIGHLIGHT_CONF_PATH); + + ref_object_sel=new ObjectSelectorWidget({ OBJ_TABLE, OBJ_COLUMN }, true, this); + ref_object_sel->enableObjectCreation(false); + expression_cp=new CodeCompletionWidget(expression_txt, true); + + reference_grid->addWidget(ref_object_sel, 3, 1, 1, 3); + reference_grid->addWidget(expression_txt, 5, 1, 1, 4); + + selectReferenceType(); + setMinimumSize(630, 380); + + connect(view_def_chk, SIGNAL(toggled(bool)), select_from_chk, SLOT(setDisabled(bool))); + connect(view_def_chk, SIGNAL(toggled(bool)), from_where_chk, SLOT(setDisabled(bool))); + connect(view_def_chk, SIGNAL(toggled(bool)), after_where_chk, SLOT(setDisabled(bool))); + connect(view_def_chk, SIGNAL(toggled(bool)), end_expr_chk, SLOT(setDisabled(bool))); + connect(ref_type_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(selectReferenceType(void))); + + connect(ref_object_sel, &ObjectSelectorWidget::s_objectSelected, [&](){ + col_alias_edt->setEnabled(dynamic_cast(ref_object_sel->getSelectedObject())); + }); + + connect(ref_object_sel, &ObjectSelectorWidget::s_selectorCleared, [&](){ + col_alias_edt->setEnabled(false); + }); +} + +void ReferenceWidget::setAttributes(Reference ref, unsigned ref_flags, DatabaseModel *model) +{ + this->ref_flags = ref_flags; + this->reference = ref; + + expression_cp->configureCompletion(model, expression_hl); + ref_object_sel->setModel(model); + + ref_type_cmb->setCurrentIndex(ref.getReferenceType()); + ref_alias_edt->setText(ref.getReferenceAlias()); + + if(ref.getReferenceType()==Reference::REFER_COLUMN) + { + if(ref.getColumn()) + ref_object_sel->setSelectedObject(ref.getColumn()); + else + ref_object_sel->setSelectedObject(ref.getTable()); + + tab_alias_edt->setText(ref.getAlias()); + col_alias_edt->setText(ref.getColumnAlias()); + } + else + { + expression_txt->setPlainText(ref.getExpression()); + expr_alias_edt->setText(ref.getAlias()); + } + + if(ref_flags == Reference::SQL_VIEW_DEFINITION) + view_def_chk->setChecked(true); + else + { + select_from_chk->setChecked((ref_flags & Reference::SQL_REFER_SELECT) == Reference::SQL_REFER_SELECT); + from_where_chk->setChecked((ref_flags & Reference::SQL_REFER_FROM) == Reference::SQL_REFER_FROM); + after_where_chk->setChecked((ref_flags & Reference::SQL_REFER_WHERE) == Reference::SQL_REFER_WHERE); + end_expr_chk->setChecked((ref_flags & Reference::SQL_REFER_END_EXPR) == Reference::SQL_REFER_END_EXPR); + } +} + +Reference ReferenceWidget::getReference(void) +{ + return(reference); +} + +unsigned ReferenceWidget::getReferenceFlags(void) +{ + return(ref_flags); +} + +void ReferenceWidget::applyConfiguration(void) +{ + try + { + //Creating a reference to a column + if(static_cast(ref_type_cmb->currentIndex())==Reference::REFER_COLUMN) + { + Column *column = dynamic_cast(ref_object_sel->getSelectedObject()); + Table *table = (column ? dynamic_cast
(column->getParentTable()) : + dynamic_cast
(ref_object_sel->getSelectedObject())); + reference = Reference(table, column, tab_alias_edt->text(), col_alias_edt->text()); + } + //Creating a reference to an expression + else + reference = Reference(expression_txt->toPlainText(), expr_alias_edt->text().toUtf8()); + + reference.setReferenceAlias(ref_alias_edt->text()); + + /* The reference must have an SQL application (be between SELECT-FROM, FROM-WHERE or after WHERE), + if the user do not check some of these attributes raises an error */ + if(!select_from_chk->isChecked() && !from_where_chk->isChecked() && + !after_where_chk->isChecked() && !end_expr_chk->isChecked() && + !view_def_chk->isChecked()) + throw Exception(ERR_SQL_SCOPE_INV_VIEW_REF,__PRETTY_FUNCTION__,__FILE__,__LINE__); + + if(view_def_chk->isChecked()) + ref_flags = Reference::SQL_VIEW_DEFINITION; + + if(select_from_chk->isChecked()) + ref_flags |= Reference::SQL_REFER_SELECT; + + if(from_where_chk->isChecked()) + ref_flags |= Reference::SQL_REFER_FROM; + + if(after_where_chk->isChecked()) + ref_flags |= Reference::SQL_REFER_WHERE; + + if(end_expr_chk->isChecked()) + ref_flags |= Reference::SQL_REFER_WHERE; + + emit s_closeRequested(); + } + catch(Exception &e) + { + throw Exception(e.getErrorMessage(),e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e); + } +} + +void ReferenceWidget::selectReferenceType(void) +{ + //Marks if the select reference type treats a reference to an object + bool ref_obj=(ref_type_cmb->currentIndex()==static_cast(Reference::REFER_COLUMN)); + ref_object_sel->setEnabled(ref_obj); + tab_alias_edt->setEnabled(ref_obj); + col_alias_edt->setEnabled(ref_obj); + view_def_chk->setChecked(false); + expression_txt->setEnabled(!ref_obj); + expr_alias_edt->setEnabled(!ref_obj); + view_def_chk->setVisible(!ref_obj); +} diff --git a/libpgmodeler_ui/src/referencewidget.h b/libpgmodeler_ui/src/referencewidget.h new file mode 100644 index 0000000000..8ef7ccf4a6 --- /dev/null +++ b/libpgmodeler_ui/src/referencewidget.h @@ -0,0 +1,67 @@ +/* +# PostgreSQL Database Modeler (pgModeler) +# +# Copyright 2006-2018 - Raphael Araújo e Silva +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# The complete text of GPLv3 is at LICENSE file on source code root directory. +# Also, you can get the complete GNU General Public License at +*/ + +#ifndef REFERENCE_WIDGET_H +#define REFERENCE_WIDGET_H + +#include +#include "ui_referencewidget.h" +#include "numberedtexteditor.h" +#include "syntaxhighlighter.h" +#include "codecompletionwidget.h" +#include "objectselectorwidget.h" +#include "hinttextwidget.h" + +class ReferenceWidget : public QWidget, Ui::ReferenceWidget { + private: + Q_OBJECT + + HintTextWidget *ref_alias_ht, *used_in_ht, *ref_object_ht; + + NumberedTextEditor *expression_txt; + + SyntaxHighlighter *expression_hl; + + CodeCompletionWidget *expression_cp; + + ObjectSelectorWidget *ref_object_sel; + + unsigned ref_flags; + + Reference reference; + + public: + explicit ReferenceWidget(QWidget *parent = 0); + + void setAttributes(Reference ref, unsigned ref_flags, DatabaseModel *model); + + Reference getReference(void); + + unsigned getReferenceFlags(void); + + public slots: + void applyConfiguration(void); + + private slots: + void selectReferenceType(void); + + signals: + void s_closeRequested(void); +}; + +#endif diff --git a/libpgmodeler_ui/src/relationshipconfigwidget.cpp b/libpgmodeler_ui/src/relationshipconfigwidget.cpp index 8703e73d1e..e869133b14 100644 --- a/libpgmodeler_ui/src/relationshipconfigwidget.cpp +++ b/libpgmodeler_ui/src/relationshipconfigwidget.cpp @@ -191,7 +191,7 @@ void RelationshipConfigWidget::restoreDefaults(void) { try { - BaseConfigWidget::restoreDefaults(GlobalAttributes::RELATIONSHIPS_CONF); + BaseConfigWidget::restoreDefaults(GlobalAttributes::RELATIONSHIPS_CONF, false); this->loadConfiguration(); setConfigurationChanged(true); } diff --git a/libpgmodeler_ui/src/relationshipwidget.cpp b/libpgmodeler_ui/src/relationshipwidget.cpp index f96962eb41..7ca707f44d 100644 --- a/libpgmodeler_ui/src/relationshipwidget.cpp +++ b/libpgmodeler_ui/src/relationshipwidget.cpp @@ -20,7 +20,9 @@ #include "constraintwidget.h" #include "columnwidget.h" #include "tablewidget.h" -#include "configurationform.h" +#include "baseform.h" +#include "relationshipconfigwidget.h" +#include "generalconfigwidget.h" RelationshipWidget::RelationshipWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_RELATIONSHIP) { @@ -157,8 +159,12 @@ RelationshipWidget::RelationshipWidget(QWidget *parent): BaseObjectWidget(parent connect(deferrable_chk, SIGNAL(toggled(bool)), deferral_cmb, SLOT(setEnabled(bool))); connect(deferrable_chk, SIGNAL(toggled(bool)), deferral_lbl, SLOT(setEnabled(bool))); - connect(identifier_chk, SIGNAL(toggled(bool)), table1_mand_chk, SLOT(setDisabled(bool))); - connect(identifier_chk, SIGNAL(toggled(bool)), table2_mand_chk, SLOT(setDisabled(bool))); + connect(identifier_chk, &QCheckBox::toggled, [&](){ + table1_mand_chk->setDisabled(identifier_chk->isChecked()); + table2_mand_chk->setEnabled(!identifier_chk->isChecked() && + this->object && + dynamic_cast(this->object)->getRelationshipType() != BaseRelationship::RELATIONSHIP_1N); + }); connect(attributes_tab, SIGNAL(s_rowsRemoved(void)), this, SLOT(removeObjects(void))); connect(attributes_tab, SIGNAL(s_rowAdded(int)), this, SLOT(addObject(void))); @@ -329,6 +335,8 @@ void RelationshipWidget::setAttributes(DatabaseModel *model, OperationList *op_l storage_chk->setChecked(!all_chk->isChecked() && copy_op.isOptionSet(CopyOptions::STORAGE)); comments_chk->setChecked(!all_chk->isChecked() && copy_op.isOptionSet(CopyOptions::COMMENTS)); indexes_chk->setChecked(!all_chk->isChecked() && copy_op.isOptionSet(CopyOptions::INDEXES)); + identity_chk->setChecked(!all_chk->isChecked() && copy_op.isOptionSet(CopyOptions::IDENTITY)); + statistics_chk->setChecked(!all_chk->isChecked() && copy_op.isOptionSet(CopyOptions::STATISTICS)); } } } @@ -654,7 +662,11 @@ void RelationshipWidget::showAdvancedObject(int row) tab, tab->getPosition().x(), tab->getPosition().y()); editing_form.setMainWidget(table_wgt); + + GeneralConfigWidget::restoreWidgetGeometry(&editing_form, table_wgt->metaObject()->className()); editing_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&editing_form, table_wgt->metaObject()->className()); + tab->setProtected(false); } } @@ -664,11 +676,22 @@ int RelationshipWidget::openEditingForm(TableObject *object, BaseObject *parent) { BaseForm editing_form(this); WidgetClass *object_wgt=new WidgetClass; + BaseObject *parent_aux = nullptr; + int res = 0; - object_wgt->setAttributes(this->model, this->op_list, (!parent ? this->object : parent), dynamic_cast(object)); + if(this->object->getObjectType() == BASE_RELATIONSHIP) + parent_aux = dynamic_cast(this->object)->getTable(BaseRelationship::SRC_TABLE); + else + parent_aux = !parent ? this->object : parent; + + object_wgt->setAttributes(this->model, this->op_list, parent_aux, dynamic_cast(object)); editing_form.setMainWidget(object_wgt); - return(editing_form.exec()); + GeneralConfigWidget::restoreWidgetGeometry(&editing_form, object_wgt->metaObject()->className()); + res = editing_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&editing_form, object_wgt->metaObject()->className()); + + return(res); } void RelationshipWidget::addObject(void) @@ -911,6 +934,8 @@ void RelationshipWidget::selectCopyOptions(void) storage_chk->setEnabled(!all_chk->isChecked() && !defaults_rb->isChecked()); comments_chk->setEnabled(!all_chk->isChecked() && !defaults_rb->isChecked()); indexes_chk->setEnabled(!all_chk->isChecked() && !defaults_rb->isChecked()); + identity_chk->setEnabled(!all_chk->isChecked() && !defaults_rb->isChecked()); + statistics_chk->setEnabled(!all_chk->isChecked() && !defaults_rb->isChecked()); if(all_chk->isChecked() || defaults_rb->isChecked()) { @@ -922,6 +947,8 @@ void RelationshipWidget::selectCopyOptions(void) storage_chk->setChecked(false); comments_chk->setChecked(false); indexes_chk->setChecked(false); + identity_chk->setChecked(false); + statistics_chk->setChecked(false); } } @@ -998,11 +1025,11 @@ void RelationshipWidget::applyConfiguration(void) if(this->object->getObjectType()==OBJ_RELATIONSHIP) { QPlainTextEdit *pattern_fields[]={ src_col_pattern_txt, dst_col_pattern_txt, - src_fk_pattern_txt, dst_fk_pattern_txt, - pk_pattern_txt, uq_pattern_txt, pk_col_pattern_txt }; + src_fk_pattern_txt, dst_fk_pattern_txt, + pk_pattern_txt, uq_pattern_txt, pk_col_pattern_txt }; unsigned pattern_ids[]= { Relationship::SRC_COL_PATTERN, Relationship::DST_COL_PATTERN, - Relationship::SRC_FK_PATTERN, Relationship::DST_FK_PATTERN, - Relationship::PK_PATTERN, Relationship::UQ_PATTERN, Relationship::PK_COL_PATTERN }; + Relationship::SRC_FK_PATTERN, Relationship::DST_FK_PATTERN, + Relationship::PK_PATTERN, Relationship::UQ_PATTERN, Relationship::PK_COL_PATTERN }; rel=dynamic_cast(base_rel); @@ -1029,6 +1056,8 @@ void RelationshipWidget::applyConfiguration(void) copy_ops+=(comments_chk->isChecked() ? CopyOptions::COMMENTS : 0); copy_ops+=(indexes_chk->isChecked() ? CopyOptions::INDEXES : 0); copy_ops+=(storage_chk->isChecked() ? CopyOptions::STORAGE : 0); + copy_ops+=(identity_chk->isChecked() ? CopyOptions::IDENTITY : 0); + copy_ops+=(statistics_chk->isChecked() ? CopyOptions::STATISTICS : 0); } rel->setCopyOptions(CopyOptions(copy_mode, copy_ops)); diff --git a/libpgmodeler_ui/src/resultsetmodel.cpp b/libpgmodeler_ui/src/resultsetmodel.cpp new file mode 100644 index 0000000000..79c763b401 --- /dev/null +++ b/libpgmodeler_ui/src/resultsetmodel.cpp @@ -0,0 +1,179 @@ +/* +# PostgreSQL Database Modeler (pgModeler) +# +# Copyright 2006-2018 - Raphael Araújo e Silva +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# The complete text of GPLv3 is at LICENSE file on source code root directory. +# Also, you can get the complete GNU General Public License at +*/ + +#include "resultsetmodel.h" + +ResultSetModel::ResultSetModel(ResultSet &res, Catalog &catalog, QObject *parent) : QAbstractTableModel(parent) +{ + try + { + Catalog aux_cat = catalog; + vector type_ids; + vector::iterator end; + vector types; + map type_names; + int col = 0; + + col_count = res.getColumnCount(); + row_count = res.getTupleCount(); + insertColumns(0, col_count); + insertRows(0, row_count); + + for(col=0; col < col_count; col++) + { + header_data.push_back(res.getColumnName(col)); + type_ids.push_back(res.getColumnTypeId(col)); + } + + if(res.accessTuple(ResultSet::FIRST_TUPLE)) + { + do + { + //Fills the current row with the values of current tuple + for(int col=0; col < col_count; col++) + { + if(res.isColumnBinaryFormat(col)) + item_data.push_back(trUtf8("[binary data]")); + else + item_data.push_back(res.getColumnValue(col)); + } + } + while(res.accessTuple(ResultSet::NEXT_TUPLE)); + } + + aux_cat.setFilter(Catalog::LIST_ALL_OBJS); + std::sort(type_ids.begin(), type_ids.end()); + end=std::unique(type_ids.begin(), type_ids.end()); + type_ids.erase(end, type_ids.end()); + + types = aux_cat.getObjectsAttributes(OBJ_TYPE, QString(), QString(), type_ids); + col = 0; + + for(auto &tp : types) + type_names[tp[ParsersAttributes::OID].toInt()]=tp[ParsersAttributes::NAME]; + + for(col=0; col < col_count; col++) + tooltip_data.push_back(type_names[res.getColumnTypeId(col)]); + } + catch(Exception &e) + { + throw Exception(e.getErrorMessage(), e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e); + } +} + +int ResultSetModel::rowCount(const QModelIndex &) const +{ + return(row_count); +} + +int ResultSetModel::columnCount(const QModelIndex &) const +{ + return(col_count); +} + +QModelIndex ResultSetModel::index(int row, int column, const QModelIndex &parent) const +{ + return(QAbstractTableModel::index(row, column, parent)); +} + +QModelIndex ResultSetModel::parent(const QModelIndex &) const +{ + return(QModelIndex()); +} + +QVariant ResultSetModel::data(const QModelIndex &index, int role) const +{ + if(index.row() < row_count && index.column() < col_count) + { + if(role == Qt::DisplayRole) + return(item_data.at(index.row() * col_count + index.column())); + + if(role == Qt::TextAlignmentRole) + return(QVariant(Qt::AlignLeft | Qt::AlignVCenter)); + } + + return(QVariant(QVariant::Invalid)); +} + +QVariant ResultSetModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if(orientation == Qt::Horizontal) + { + if(section >= col_count) + return(QVariant(QVariant::Invalid)); + + if(role == Qt::DisplayRole) + return(header_data.at(section)); + + if(role == Qt::ToolTipRole) + return(tooltip_data.at(section)); + + if(role == Qt::TextAlignmentRole) + return(QVariant(Qt::AlignLeft | Qt::AlignVCenter)); + } + + return(QAbstractTableModel::headerData(section, orientation, role)); +} + +Qt::ItemFlags ResultSetModel::flags(const QModelIndex &) const +{ + return(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled ); +} + +void ResultSetModel::append(ResultSet &res) +{ + try + { + if(res.isValid() && !res.isEmpty()) + { + if(res.accessTuple(ResultSet::FIRST_TUPLE)) + { + do + { + for(int col=0; col < col_count; col++) + { + if(col < res.getColumnCount()) + { + if(res.isColumnBinaryFormat(col)) + item_data.push_back(trUtf8("[binary data]")); + else + item_data.push_back(res.getColumnValue(col)); + } + else + { + item_data.push_back(QString()); + } + } + } + while(res.accessTuple(ResultSet::NEXT_TUPLE)); + } + + row_count += res.getTupleCount(); + } + } + catch(Exception &e) + { + throw Exception(e.getErrorMessage(), e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e); + } +} + +bool ResultSetModel::isEmpty(void) +{ + return(row_count <= 0); +} + diff --git a/libpgmodeler_ui/src/resultsetmodel.h b/libpgmodeler_ui/src/resultsetmodel.h new file mode 100644 index 0000000000..770d50e352 --- /dev/null +++ b/libpgmodeler_ui/src/resultsetmodel.h @@ -0,0 +1,55 @@ +/* +# PostgreSQL Database Modeler (pgModeler) +# +# Copyright 2006-2018 - Raphael Araújo e Silva +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# The complete text of GPLv3 is at LICENSE file on source code root directory. +# Also, you can get the complete GNU General Public License at +*/ + +/** +\ingroup libpgmodeler_ui +\class ResultSetModel +\brief Implements a model representation of ResultSet class which can be used to show large amount of data in instances of QTableView. +*/ + +#ifndef RESULT_SET_MODEL_H +#define RESULT_SET_MODEL_H + +#include +#include "resultset.h" +#include "catalog.h" + +class ResultSetModel: public QAbstractTableModel { + private: + Q_OBJECT + + int col_count, row_count; + QStringList item_data, header_data, tooltip_data; + + void insertColumn(int, const QModelIndex &){} + void insertRow(int, const QModelIndex &){} + + public: + ResultSetModel(ResultSet &res, Catalog &catalog, QObject *parent = 0); + virtual int rowCount(const QModelIndex & = QModelIndex()) const; + virtual int columnCount(const QModelIndex &) const; + virtual QModelIndex index(int row, int column, const QModelIndex &parent) const; + virtual QModelIndex parent(const QModelIndex &) const; + virtual QVariant data(const QModelIndex &index, int role) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; + virtual Qt::ItemFlags flags(const QModelIndex &) const; + void append(ResultSet &res); + bool isEmpty(void); +}; + +#endif diff --git a/libpgmodeler_ui/src/sequencewidget.cpp b/libpgmodeler_ui/src/sequencewidget.cpp index d736855f9e..6f6b131129 100644 --- a/libpgmodeler_ui/src/sequencewidget.cpp +++ b/libpgmodeler_ui/src/sequencewidget.cpp @@ -26,13 +26,19 @@ SequenceWidget::SequenceWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_SE column_sel=nullptr; column_sel=new ObjectSelectorWidget(OBJ_COLUMN, true, this); - sequence_grid->addWidget(column_sel,3,1,1,3); + sequence_grid->addWidget(column_sel, 4, 1, 1, 3); configureFormLayout(sequence_grid, OBJ_SEQUENCE); sequence_grid->addItem(new QSpacerItem(10,0,QSizePolicy::Minimum,QSizePolicy::Expanding), sequence_grid->count(), 0); configureTabOrder(); - setMinimumSize(520, 320); + def_values_cmb->addItem(trUtf8("User defined")); + def_values_cmb->addItem(QString("smallserial")); + def_values_cmb->addItem(QString("serial")); + def_values_cmb->addItem(QString("bigserial")); + setMinimumSize(520, 350); + + connect(def_values_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(setDefaultValues())); } catch(Exception &e) { @@ -40,7 +46,31 @@ SequenceWidget::SequenceWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_SE } } +void SequenceWidget::setAttributesReadonly(DatabaseModel *model, OperationList *op_list, Schema *schema, Sequence *sequence, Column *column) +{ + setAttributes(model, sequence); + BaseObjectWidget::setAttributes(model, op_list, sequence, schema, NAN, NAN, false); + + name_edt->setReadOnly(true); + comment_edt->setEnabled(false); + schema_sel->setEnabled(false); + append_sql_tb->setEnabled(false); + edt_perms_tb->setEnabled(false); + column_sel->setSelectedObject(column); + column_sel->setEnabled(false); + disable_sql_chk->setEnabled(false); + owner_sel->setSelectedObject(column && column->getParentTable() ? + column->getParentTable()->getOwner() : nullptr); + owner_sel->setEnabled(false); +} + void SequenceWidget::setAttributes(DatabaseModel *model, OperationList *op_list, Schema *schema, Sequence *sequence) +{ + setAttributes(model, sequence); + BaseObjectWidget::setAttributes(model, op_list, sequence, schema); +} + +void SequenceWidget::setAttributes(DatabaseModel *model, Sequence *sequence) { column_sel->setModel(model); @@ -63,8 +93,6 @@ void SequenceWidget::setAttributes(DatabaseModel *model, OperationList *op_list, cache_edt->setText(QString("1")); increment_edt->setText(QString("1")); } - - BaseObjectWidget::setAttributes(model,op_list,sequence,schema); } void SequenceWidget::applyConfiguration(void) @@ -91,3 +119,32 @@ void SequenceWidget::applyConfiguration(void) } } +void SequenceWidget::setDefaultValues(void) +{ + Sequence *seq = dynamic_cast(this->object); + + if(seq && def_values_cmb->currentIndex() == 0) + { + start_edt->setText(seq->getStart()); + cache_edt->setText(seq->getCache()); + minimum_edt->setText(seq->getMinValue()); + maximum_edt->setText(seq->getMaxValue()); + increment_edt->setText(seq->getIncrement()); + } + else + { + QString min = "0", max = Sequence::MAX_POSITIVE_VALUE; + + if(def_values_cmb->currentText() == "smallserial") + max = Sequence::MAX_SMALL_POSITIVE_VALUE; + else if(def_values_cmb->currentText() == "bigserial") + max = Sequence::MAX_BIG_POSITIVE_VALUE; + + start_edt->setText("1"); + cache_edt->setText("1"); + increment_edt->setText("1"); + minimum_edt->setText(min); + maximum_edt->setText(max); + } +} + diff --git a/libpgmodeler_ui/src/sequencewidget.h b/libpgmodeler_ui/src/sequencewidget.h index 8b055c633a..47b3cadc53 100644 --- a/libpgmodeler_ui/src/sequencewidget.h +++ b/libpgmodeler_ui/src/sequencewidget.h @@ -34,13 +34,25 @@ class SequenceWidget: public BaseObjectWidget, public Ui::SequenceWidget { ObjectSelectorWidget *column_sel; + protected: + void setAttributes(DatabaseModel *model, Sequence *sequence); + + /*! \brief This auxiliary method is used in ColumnWidget to enable the user to edit the underlying sequence's attributes + * when handling an indentity column. This method disable almost all fields in the form letting only the ones related to + * sequence's values configuration enabled */ + void setAttributesReadonly(DatabaseModel *model, OperationList *op_list, Schema *schema, Sequence *sequence, Column *column); + public: SequenceWidget(QWidget * parent = 0); - void setAttributes(DatabaseModel *model, OperationList *op_list, Schema *schema, Sequence *sequence); public slots: void applyConfiguration(void); + + private slots: + void setDefaultValues(void); + + friend class ColumnWidget; }; #endif diff --git a/libpgmodeler_ui/src/snippetsconfigwidget.cpp b/libpgmodeler_ui/src/snippetsconfigwidget.cpp index c270999116..67d02a78f7 100644 --- a/libpgmodeler_ui/src/snippetsconfigwidget.cpp +++ b/libpgmodeler_ui/src/snippetsconfigwidget.cpp @@ -484,7 +484,7 @@ void SnippetsConfigWidget::restoreDefaults(void) { try { - BaseConfigWidget::restoreDefaults(GlobalAttributes::SNIPPETS_CONF); + BaseConfigWidget::restoreDefaults(GlobalAttributes::SNIPPETS_CONF, false); this->loadConfiguration(); setConfigurationChanged(true); } diff --git a/libpgmodeler_ui/src/sqlexecutionhelper.cpp b/libpgmodeler_ui/src/sqlexecutionhelper.cpp new file mode 100644 index 0000000000..8a3221624c --- /dev/null +++ b/libpgmodeler_ui/src/sqlexecutionhelper.cpp @@ -0,0 +1,95 @@ +/* +# PostgreSQL Database Modeler (pgModeler) +# +# Copyright 2006-2018 - Raphael Araújo e Silva +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# The complete text of GPLv3 is at LICENSE file on source code root directory. +# Also, you can get the complete GNU General Public License at +*/ + +#include "sqlexecutionhelper.h" + +SQLExecutionHelper::SQLExecutionHelper(void) : QObject(nullptr) +{ + cancelled = false; + result_model = nullptr; +} + +void SQLExecutionHelper::setConnection(Connection conn) +{ + connection = conn; +} + +void SQLExecutionHelper::setCommand(const QString &cmd) +{ + command = cmd; +} + +ResultSetModel *SQLExecutionHelper::getResultSetModel(void) +{ + return(result_model); +} + +bool SQLExecutionHelper::isCancelled(void) +{ + return(cancelled); +} + +QStringList SQLExecutionHelper::getNotices(void) +{ + return(notices); +} + +void SQLExecutionHelper::executeCommand(void) +{ + try + { + ResultSet res; + Catalog catalog; + Connection aux_conn = Connection(connection.getConnectionParams()); + + catalog.setConnection(aux_conn); + result_model = nullptr; + cancelled = false; + + if(!connection.isStablished()) + { + connection.setNoticeEnabled(true); + connection.connect(); + + //The connection will break the execution if it keeps idle for one hour or more + connection.setSQLExecutionTimout(3600); + } + + connection.executeDMLCommand(command, res); + notices = connection.getNotices(); + + if(!res.isEmpty()) + result_model = new ResultSetModel(res, catalog); + + emit s_executionFinished(res.getTupleCount()); + } + catch(Exception &e) + { + connection.close(); + emit s_executionAborted(e); + } +} + +void SQLExecutionHelper::cancelCommand(void) +{ + if(connection.isStablished()) + { + connection.requestCancel(); + cancelled = true; + } +} diff --git a/libpgmodeler_ui/src/sqlexecutionhelper.h b/libpgmodeler_ui/src/sqlexecutionhelper.h new file mode 100644 index 0000000000..ab3c5205a4 --- /dev/null +++ b/libpgmodeler_ui/src/sqlexecutionhelper.h @@ -0,0 +1,74 @@ +/* +# PostgreSQL Database Modeler (pgModeler) +# +# Copyright 2006-2018 - Raphael Araújo e Silva +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# The complete text of GPLv3 is at LICENSE file on source code root directory. +# Also, you can get the complete GNU General Public License at +*/ + +/** +\ingroup libpgmodeler_ui +\class SQLExecutionHelper +\brief Implements a command execution helper that permit the execution of SQL commands in a thread +*/ + +#ifndef SQL_EXECUTION_HELPER_H +#define SQL_EXECUTION_HELPER_H + +#include +#include +#include "connection.h" +#include "resultsetmodel.h" + +class SQLExecutionHelper : public QObject { + private: + Q_OBJECT + + Connection connection; + + QString command; + + ResultSetModel *result_model; + + bool cancelled; + + int affected_rows; + + QStringList notices; + + public: + SQLExecutionHelper(void); + + void setConnection(Connection conn); + + void setCommand(const QString &cmd); + + //! \brief Returns the result set model created in the execution. This object is not deleted after the execution. + ResultSetModel *getResultSetModel(void); + + bool isCancelled(void); + + //! \brief Returns the notices generated by the execution + QStringList getNotices(void); + + public slots: + void executeCommand(void); + void cancelCommand(void); + + signals: + void s_executionFinished(int rows_affected); + void s_executionCancelled(void); + void s_executionAborted(Exception e); +}; + +#endif diff --git a/libpgmodeler_ui/src/sqlexecutionwidget.cpp b/libpgmodeler_ui/src/sqlexecutionwidget.cpp index 18d8acf839..affb325e0f 100644 --- a/libpgmodeler_ui/src/sqlexecutionwidget.cpp +++ b/libpgmodeler_ui/src/sqlexecutionwidget.cpp @@ -27,7 +27,6 @@ map SQLExecutionWidget::cmd_history; int SQLExecutionWidget::cmd_history_max_len = 1000; -int SQLExecutionWidget::max_result_rows = 20000; const QString SQLExecutionWidget::COLUMN_NULL_VALUE = QString("␀"); SQLExecutionWidget::SQLExecutionWidget(QWidget * parent) : QWidget(parent) @@ -51,6 +50,7 @@ SQLExecutionWidget::SQLExecutionWidget(QWidget * parent) : QWidget(parent) layout->addWidget(find_history_wgt); find_history_parent->setLayout(layout); find_history_parent->setVisible(false); + connect(find_history_wgt->hide_tb, SIGNAL(clicked(bool)), find_history_parent, SLOT(hide())); sql_cmd_hl=new SyntaxHighlighter(sql_cmd_txt, false); sql_cmd_hl->loadConfiguration(GlobalAttributes::SQL_HIGHLIGHT_CONF_PATH); @@ -74,8 +74,10 @@ SQLExecutionWidget::SQLExecutionWidget(QWidget * parent) : QWidget(parent) hbox->setContentsMargins(0,0,0,0); hbox->addWidget(find_replace_wgt); find_wgt_parent->setVisible(false); + connect(find_replace_wgt->hide_tb, SIGNAL(clicked(bool)), find_tb, SLOT(toggle())); run_sql_tb->setToolTip(run_sql_tb->toolTip() + QString(" (%1)").arg(run_sql_tb->shortcut().toString())); + stop_tb->setToolTip(stop_tb->toolTip() + QString(" (%1)").arg(stop_tb->shortcut().toString())); export_tb->setToolTip(export_tb->toolTip() + QString(" (%1)").arg(export_tb->shortcut().toString())); file_tb->setToolTip(file_tb->toolTip() + QString(" (%1)").arg(file_tb->shortcut().toString())); output_tb->setToolTip(output_tb->toolTip() + QString(" (%1)").arg(output_tb->shortcut().toString())); @@ -103,7 +105,7 @@ SQLExecutionWidget::SQLExecutionWidget(QWidget * parent) : QWidget(parent) connect(output_tb, SIGNAL(toggled(bool)), this, SLOT(toggleOutputPane(bool))); //Signal handling with C++11 lambdas Slots - connect(results_tbw, &QTableWidget::itemPressed, + connect(results_tbw, &QTableView::pressed, [&](){ SQLExecutionWidget::copySelection(results_tbw); }); connect(export_tb, &QToolButton::clicked, @@ -125,6 +127,27 @@ SQLExecutionWidget::SQLExecutionWidget(QWidget * parent) : QWidget(parent) toggleOutputPane(false); filename_wgt->setVisible(false); v_splitter->handle(1)->installEventFilter(this); + + stop_tb->setVisible(false); + sql_exec_hlp.moveToThread(&sql_exec_thread); + + connect(&sql_exec_thread, SIGNAL(started()), &sql_exec_hlp, SLOT(executeCommand())); + connect(&sql_exec_hlp, SIGNAL(s_executionCancelled()), this, SLOT(finishExecution())); + connect(&sql_exec_hlp, SIGNAL(s_executionFinished(int)), this, SLOT(finishExecution(int))); + connect(&sql_exec_hlp, SIGNAL(s_executionAborted(Exception)), &sql_exec_thread, SLOT(quit())); + connect(&sql_exec_hlp, SIGNAL(s_executionAborted(Exception)), this, SLOT(handleExecutionAborted(Exception))); + connect(stop_tb, SIGNAL(clicked(bool)), &sql_exec_hlp, SLOT(cancelCommand()), Qt::DirectConnection); +} + +SQLExecutionWidget::~SQLExecutionWidget(void) +{ + if(sql_exec_thread.isRunning()) + { + sql_exec_hlp.cancelCommand(); + sql_exec_thread.quit(); + } + + destroyResultModel(); } bool SQLExecutionWidget::eventFilter(QObject *object, QEvent *event) @@ -160,7 +183,9 @@ bool SQLExecutionWidget::eventFilter(QObject *object, QEvent *event) void SQLExecutionWidget::setConnection(Connection conn) { - sql_cmd_conn=conn; + sql_exec_hlp.setConnection(conn); + sql_cmd_conn = conn; + db_name_lbl->setText(QString("%1@%2:%3") .arg(conn.getConnectionParam(Connection::PARAM_DB_NAME)) .arg(conn.getConnectionParam(Connection::PARAM_SERVER_IP).isEmpty() ? @@ -175,22 +200,9 @@ void SQLExecutionWidget::enableCommandButtons(void) clear_btn->setEnabled(run_sql_tb->isEnabled()); } -void SQLExecutionWidget::fillResultsTable(ResultSet &res) +void SQLExecutionWidget::fillResultsTable(void) { - try - { - Catalog catalog; - Connection aux_conn; - aux_conn.setConnectionParams(sql_cmd_conn.getConnectionParams()); - export_tb->setEnabled(res.getTupleCount() > 0); - catalog.setConnection(aux_conn); - fillResultsTable(catalog, res, results_tbw); - } - catch(Exception &e) - { - throw Exception(e.getErrorMessage(), e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e); - } } void SQLExecutionWidget::showEvent(QShowEvent *) @@ -215,6 +227,7 @@ void SQLExecutionWidget::resizeEvent(QResizeEvent *event) snippets_tb->setToolButtonStyle(style); export_tb->setToolButtonStyle(style); output_tb->setToolButtonStyle(style); + stop_tb->setToolButtonStyle(style); } } @@ -266,16 +279,13 @@ void SQLExecutionWidget::fillResultsTable(Catalog &catalog, ResultSet &res, QTab for(col=0; col < col_cnt; col++) { item=results_tbw->horizontalHeaderItem(col); - item->setToolTip(res.getColumnName(col) + QString(" [%1]").arg(type_names[res.getColumnTypeId(col)])); + item->setToolTip(type_names[res.getColumnTypeId(col)]); item->setData(Qt::UserRole, type_names[res.getColumnTypeId(col)]); } if(res.accessTuple(ResultSet::FIRST_TUPLE)) { - if(max_result_rows != 0 && res.getTupleCount() > max_result_rows) - results_tbw->setRowCount(max_result_rows); - else - results_tbw->setRowCount(res.getTupleCount()); + results_tbw->setRowCount(res.getTupleCount()); do { @@ -321,10 +331,11 @@ void SQLExecutionWidget::fillResultsTable(Catalog &catalog, ResultSet &res, QTab } } -void SQLExecutionWidget::showError(Exception &e) +void SQLExecutionWidget::handleExecutionAborted(Exception e) { QString time_str=QString("[%1]:").arg(QTime::currentTime().toString(QString("hh:mm:ss.zzz"))); + switchToExecutionMode(false); msgoutput_lst->clear(); PgModelerUiNS::createOutputListItem(msgoutput_lst, @@ -347,6 +358,71 @@ void SQLExecutionWidget::showError(Exception &e) output_tbw->setTabText(1, trUtf8("Messages (%1)").arg(msgoutput_lst->count())); output_tbw->setCurrentIndex(1); output_tbw->setTabEnabled(0, false); + + addToSQLHistory(sql_cmd_txt->toPlainText(), 0, e.getErrorMessage()); +} + +void SQLExecutionWidget::finishExecution(int rows_affected) +{ + if(sql_exec_hlp.isCancelled()) + destroyResultModel(); + else + { + bool empty = false; + ResultSetModel *res_model = sql_exec_hlp.getResultSetModel(); + + results_tbw->setSortingEnabled(false); + results_tbw->blockSignals(true); + results_tbw->setUpdatesEnabled(false); + destroyResultModel(); + results_tbw->setModel(res_model); + results_tbw->resizeColumnsToContents(); + results_tbw->setUpdatesEnabled(true); + results_tbw->blockSignals(false); + + end_exec=QDateTime::currentDateTime().toMSecsSinceEpoch(); + total_exec = end_exec - start_exec; + + addToSQLHistory(sql_cmd_txt->toPlainText(), rows_affected); + + empty = (!res_model || res_model->rowCount() == 0); + output_tbw->setTabEnabled(0, !empty); + results_parent->setVisible(!empty); + export_tb->setEnabled(!empty); + + if(!empty) + { + output_tbw->setTabText(0, trUtf8("Results (%1)").arg(res_model->rowCount())); + output_tbw->setCurrentIndex(0); + } + else + { + output_tbw->setTabText(0, trUtf8("Results")); + output_tbw->setCurrentIndex(1); + } + + msgoutput_lst->clear(); + + for(QString notice : sql_exec_hlp.getNotices()) + { + PgModelerUiNS::createOutputListItem(msgoutput_lst, + QString("[%1]: %2").arg(QTime::currentTime().toString(QString("hh:mm:ss.zzz"))).arg(notice.trimmed()), + QPixmap(PgModelerUiNS::getIconPath("msgbox_alerta")), false); + } + + PgModelerUiNS::createOutputListItem(msgoutput_lst, + PgModelerUiNS::formatMessage(trUtf8("[%1]: SQL command successfully executed in %2. %3 %4") + .arg(QTime::currentTime().toString(QString("hh:mm:ss.zzz"))) + .arg(total_exec >= 1000 ? QString("%1 s").arg(total_exec/1000) : QString("%1 ms").arg(total_exec)) + .arg(!res_model ? trUtf8("Rows affected") : trUtf8("Rows retrieved")) + .arg(rows_affected)), + QPixmap(PgModelerUiNS::getIconPath("msgbox_info"))); + + output_tbw->setTabText(1, trUtf8("Messages (%1)").arg(msgoutput_lst->count())); + } + + switchToExecutionMode(false); + sql_exec_thread.quit(); } void SQLExecutionWidget::addToSQLHistory(const QString &cmd, unsigned rows, const QString &error) @@ -358,17 +434,19 @@ void SQLExecutionWidget::addToSQLHistory(const QString &cmd, unsigned rows, cons if(!cmd_history_txt->toPlainText().isEmpty()) fmt_cmd += QString("\n"); - fmt_cmd += QString("-- Executed at [%1] -- \n").arg(QDateTime::currentDateTime().toString(QString("yyyy-MM-dd hh:mm:ss.zzz"))); + fmt_cmd += QString("-- %1 [%2] -- \n") + .arg(trUtf8("Executed at")) + .arg(QDateTime::currentDateTime().toString(QString("yyyy-MM-dd hh:mm:ss.zzz"))); fmt_cmd += cmd; fmt_cmd += QChar('\n'); if(!error.isEmpty()) { - fmt_cmd += QString("-- Query failed --\n"); + fmt_cmd += QString("-- %1 --\n").arg(trUtf8("Command failed")); fmt_cmd += QString("/*\n%1\n*/\n").arg(error); } else - fmt_cmd += QString("-- Rows retrieved: %1\n").arg(rows); + fmt_cmd += QString("-- %1 %2\n").arg(trUtf8("Rows:")).arg(rows); if(!fmt_cmd.trimmed().endsWith(ParsersAttributes::DDL_END_TOKEN)) fmt_cmd += ParsersAttributes::DDL_END_TOKEN + QChar('\n'); @@ -406,90 +484,70 @@ void SQLExecutionWidget::validateSQLHistoryLength(const QString &conn_id, const cmd_history_txt->appendPlainText(fmt_cmd); } -void SQLExecutionWidget::runSQLCommand(void) +void SQLExecutionWidget::switchToExecutionMode(bool value) { - QString cmd=sql_cmd_txt->textCursor().selectedText(); - - try + run_sql_tb->setVisible(!value); + stop_tb->setVisible(value); + file_tb->setEnabled(!value); + find_tb->setEnabled(!value); + clear_btn->setEnabled(!value); + snippets_tb->setEnabled(!value); + export_tb->setEnabled(!value); + output_tb->setEnabled(!value); + sql_cmd_txt->setEnabled(!value); + cmd_history_parent->setEnabled(!value); + find_history_parent->setEnabled(!value); + + if(value) { - ResultSet res; - QStringList conn_notices; - - output_tb->setChecked(true); - - if(cmd.isEmpty()) - cmd=sql_cmd_txt->toPlainText(); - else - cmd.replace(QChar::ParagraphSeparator, '\n'); - - msgoutput_lst->clear(); - - if(!sql_cmd_conn.isStablished()) - { - sql_cmd_conn.setNoticeEnabled(true); - sql_cmd_conn.connect(); - - //The connection will break the execution if it keeps idle for one hour or more - sql_cmd_conn.setSQLExecutionTimout(3600); - } - - QApplication::setOverrideCursor(Qt::WaitCursor); - sql_cmd_conn.executeDMLCommand(cmd, res); - conn_notices=sql_cmd_conn.getNotices(); - - addToSQLHistory(cmd, res.getTupleCount()); - - output_tbw->setTabEnabled(0, !res.isEmpty()); - results_parent->setVisible(!res.isEmpty()); - export_tb->setEnabled(!res.isEmpty()); + this->setCursor(Qt::WaitCursor); + sql_cmd_txt->setCursor(Qt::WaitCursor); + sql_cmd_txt->clearFocus(); + } + else + { + this->setCursor(Qt::ArrowCursor); + sql_cmd_txt->setCursor(Qt::ArrowCursor); + sql_cmd_txt->setFocus(); + } +} - if(!res.isEmpty()) - { - fillResultsTable(res); - output_tbw->setTabText(0, trUtf8("Results (%1)").arg(results_tbw->rowCount())); +void SQLExecutionWidget::destroyResultModel(void) +{ + if(results_tbw->model()) + { + ResultSetModel *result_model = dynamic_cast(results_tbw->model()); + results_tbw->blockSignals(true); + results_tbw->setModel(nullptr); + delete(result_model); + results_tbw->blockSignals(false); + } +} - if(res.getTupleCount() > max_result_rows) - { - conn_notices.append(trUtf8("The number of retrieved rows exceeds the maximum allowed in the results grid! The data was trucated.")); - conn_notices.append(trUtf8("Try to limit the result set by adjusting the query.")); - output_tbw->setCurrentIndex(1); - } - else - output_tbw->setCurrentIndex(0); - } - else - { - output_tbw->setTabText(0, trUtf8("Results")); - output_tbw->setCurrentIndex(1); - } +void SQLExecutionWidget::runSQLCommand(void) +{ + QString cmd=sql_cmd_txt->textCursor().selectedText(); - msgoutput_lst->clear(); + output_tb->setChecked(true); - for(QString notice : conn_notices) - { - PgModelerUiNS::createOutputListItem(msgoutput_lst, - PgModelerUiNS::formatMessage(QString("[%1]: %2").arg(QTime::currentTime().toString(QString("hh:mm:ss.zzz"))).arg(notice)), - QPixmap(PgModelerUiNS::getIconPath("msgbox_alerta"))); - } - - PgModelerUiNS::createOutputListItem(msgoutput_lst, - PgModelerUiNS::formatMessage(trUtf8("[%1]: SQL command successfully executed. %2 %3") - .arg(QTime::currentTime().toString(QString("hh:mm:ss.zzz"))) - .arg(res.isEmpty() ? trUtf8("Rows affected") : trUtf8("Rows retrieved")) - .arg(res.getTupleCount())), - QPixmap(PgModelerUiNS::getIconPath("msgbox_info"))); + if(cmd.isEmpty()) + cmd=sql_cmd_txt->toPlainText(); + else + cmd.replace(QChar::ParagraphSeparator, '\n'); - output_tbw->setTabText(1, trUtf8("Messages (%1)").arg(msgoutput_lst->count())); + msgoutput_lst->clear(); + sql_exec_hlp.setCommand(cmd); + start_exec=QDateTime::currentDateTime().toMSecsSinceEpoch(); + sql_exec_thread.start(); + switchToExecutionMode(true); - QApplication::restoreOverrideCursor(); - } - catch(Exception &e) - { - addToSQLHistory(cmd, 0, e.getErrorMessage()); - QApplication::restoreOverrideCursor(); - sql_cmd_conn.close(); - showError(e); - } + output_tbw->setTabEnabled(0, false); + output_tbw->setTabText(0, trUtf8("Results")); + output_tbw->setCurrentIndex(1); + PgModelerUiNS::createOutputListItem(msgoutput_lst, + PgModelerUiNS::formatMessage(trUtf8("[%1]: SQL command is running...") + .arg(QTime::currentTime().toString(QString("hh:mm:ss.zzz")))), + QPixmap(PgModelerUiNS::getIconPath("msgbox_info"))); } void SQLExecutionWidget::saveCommands(void) @@ -551,7 +609,7 @@ void SQLExecutionWidget::loadCommands(void) } } -void SQLExecutionWidget::exportResults(QTableWidget *results_tbw) +void SQLExecutionWidget::exportResults(QTableView *results_tbw) { if(!results_tbw) throw Exception(ERR_OPR_NOT_ALOC_OBJECT ,__PRETTY_FUNCTION__,__FILE__,__LINE__); @@ -577,125 +635,115 @@ void SQLExecutionWidget::exportResults(QTableWidget *results_tbw) .arg(csv_file_dlg.selectedFiles().at(0)) , ERR_FILE_DIR_NOT_ACCESSED ,__PRETTY_FUNCTION__,__FILE__,__LINE__); - file.write(generateCSVBuffer(results_tbw, 0, 0, results_tbw->rowCount(), results_tbw->columnCount())); + QApplication::setOverrideCursor(Qt::WaitCursor); + results_tbw->setUpdatesEnabled(false); + results_tbw->blockSignals(true); + results_tbw->selectAll(); + + file.write(generateCSVBuffer(results_tbw)); file.close(); + + results_tbw->clearSelection(); + results_tbw->blockSignals(false); + results_tbw->setUpdatesEnabled(true); + QApplication::restoreOverrideCursor(); + } +} + +int SQLExecutionWidget::clearAll(void) +{ + Messagebox msg_box; + int res = 0; + + msg_box.show(trUtf8("The SQL input field and the results grid will be cleared! Want to proceed?"), + Messagebox::CONFIRM_ICON, Messagebox::YES_NO_BUTTONS); + + res = msg_box.result(); + + if(res==QDialog::Accepted) + { + sql_cmd_txt->setPlainText(QString()); + msgoutput_lst->clear(); + msgoutput_lst->setVisible(true); + results_parent->setVisible(false); + export_tb->setEnabled(false); } + + return(res); } -void SQLExecutionWidget::setMaxResultRows(int max_val) +QByteArray SQLExecutionWidget::generateCSVBuffer(QTableView *results_tbw) { - max_result_rows = (max_val < 0 ? 0 : max_val); + return(generateBuffer(results_tbw, QChar(';'), true, true)); } -int SQLExecutionWidget::getMaxResultRows(void) +QByteArray SQLExecutionWidget::generateTextBuffer(QTableView *results_tbw) { - return(max_result_rows); + return(generateBuffer(results_tbw, QChar('\t'), false, false)); } -QByteArray SQLExecutionWidget::generateCSVBuffer(QTableWidget *results_tbw, int start_row, int start_col, int row_cnt, int col_cnt) +QByteArray SQLExecutionWidget::generateBuffer(QTableView *results_tbw, QChar separator, bool incl_col_names, bool use_quotes) { if(!results_tbw) throw Exception(ERR_OPR_NOT_ALOC_OBJECT ,__PRETTY_FUNCTION__,__FILE__,__LINE__); + if(!results_tbw->selectionModel()) + return (QByteArray()); + + QAbstractItemModel *model = results_tbw->model(); + QModelIndexList sel_indexes = results_tbw->selectionModel()->selectedIndexes(); QByteArray buf; QStringList line; + QModelIndex index; + QString str_pattern = use_quotes ? QString("\"%1\"") : QString("%1"); + int start_row = -1, start_col = -1, + row_cnt = 0, col_cnt = 0; - //If the selection interval is valid - if(start_row >=0 && start_col >=0 && - start_row + row_cnt <= results_tbw->rowCount() && - start_col + col_cnt <= results_tbw->columnCount()) - { - int col=0, row=0, - max_col=start_col + col_cnt, - max_row=start_row + row_cnt; + start_row = sel_indexes.at(0).row(); + start_col = sel_indexes.at(0).column(); + row_cnt = (sel_indexes.last().row() - start_row) + 1; + col_cnt = (sel_indexes.last().column() - start_col) + 1; + + int col=0, row=0, + max_col=start_col + col_cnt, + max_row=start_row + row_cnt; - //Creating the header of csv + if(incl_col_names) + { + //Creating the header for(col=start_col; col < max_col; col++) - line.append(QString("\"%1\"").arg(results_tbw->horizontalHeaderItem(col)->text())); + line.append(str_pattern.arg(model->headerData(col, Qt::Horizontal).toString())); - buf.append(line.join(';')); + buf.append(line.join(separator)); buf.append('\n'); line.clear(); - - //Creating the content - for(row=start_row; row < max_row; row++) - { - for(col=start_col; col < max_col; col++) - line.append(QString("\"%1\"").arg(results_tbw->item(row, col)->text())); - - buf.append(line.join(';')); - line.clear(); - buf.append('\n'); - } } - return(buf); -} - -QByteArray SQLExecutionWidget::generateTextBuffer(QTableWidget *results_tbw, int start_row, int start_col, int row_cnt, int col_cnt) -{ - if(!results_tbw) - throw Exception(ERR_OPR_NOT_ALOC_OBJECT ,__PRETTY_FUNCTION__,__FILE__,__LINE__); - - QByteArray buf; - QStringList line; - - //If the selection interval is valid - if(start_row >=0 && start_col >=0 && - start_row + row_cnt <= results_tbw->rowCount() && - start_col + col_cnt <= results_tbw->columnCount()) + //Creating the content + for(row=start_row; row < max_row; row++) { - int col=0, row=0, - max_col=start_col + col_cnt, - max_row=start_row + row_cnt; - - //Creating the content - for(row=start_row; row < max_row; row++) + for(col=start_col; col < max_col; col++) { - for(col=start_col; col < max_col; col++) - { - line.push_back(results_tbw->item(row, col)->text()); - } - - buf.append(line.join('\t')); - line.clear(); - buf.append('\n'); + index = model->index(row, col); + line.append(str_pattern.arg(index.data().toString())); } - } - return(buf); -} - -int SQLExecutionWidget::clearAll(void) -{ - Messagebox msg_box; - int res = 0; - - msg_box.show(trUtf8("The SQL input field and the results grid will be cleared! Want to proceed?"), - Messagebox::CONFIRM_ICON, Messagebox::YES_NO_BUTTONS); - - res = msg_box.result(); - - if(res==QDialog::Accepted) - { - sql_cmd_txt->setPlainText(QString()); - msgoutput_lst->clear(); - msgoutput_lst->setVisible(true); - results_parent->setVisible(false); - export_tb->setEnabled(false); + buf.append(line.join(separator)); + line.clear(); + buf.append('\n'); } - return(res); + return(buf); } -void SQLExecutionWidget::copySelection(QTableWidget *results_tbw, bool use_popup, bool csv_is_default) +void SQLExecutionWidget::copySelection(QTableView *results_tbw, bool use_popup, bool csv_is_default) { if(!results_tbw) throw Exception(ERR_OPR_NOT_ALOC_OBJECT ,__PRETTY_FUNCTION__,__FILE__,__LINE__); - QList sel_ranges=results_tbw->selectedRanges(); + QItemSelectionModel *selection = results_tbw->selectionModel(); - if(sel_ranges.count()==1 && (!use_popup || (use_popup && QApplication::mouseButtons()==Qt::RightButton))) + if(selection && (!use_popup || (use_popup && QApplication::mouseButtons()==Qt::RightButton))) { QMenu copy_menu, copy_mode_menu; QAction *act = nullptr, *act_csv = nullptr, *act_txt = nullptr; @@ -711,15 +759,12 @@ void SQLExecutionWidget::copySelection(QTableWidget *results_tbw, bool use_popup if(!use_popup || act) { - QTableWidgetSelectionRange selection=sel_ranges.at(0); QByteArray buf; if((use_popup && act == act_csv) || (!use_popup && csv_is_default)) { //Generates the csv buffer and assigns it to application's clipboard - buf=generateCSVBuffer(results_tbw, - selection.topRow(), selection.leftColumn(), - selection.rowCount(), selection.columnCount()); + buf=generateCSVBuffer(results_tbw); /* Making DataManipulationForm instances know that the clipboard has csv buffer * in order to paste the contents properly */ @@ -727,9 +772,7 @@ void SQLExecutionWidget::copySelection(QTableWidget *results_tbw, bool use_popup } else if((use_popup && act == act_txt) || (!use_popup && !csv_is_default)) { - buf=generateTextBuffer(results_tbw, - selection.topRow(), selection.leftColumn(), - selection.rowCount(), selection.columnCount()); + buf=generateTextBuffer(results_tbw); } qApp->clipboard()->setText(buf); diff --git a/libpgmodeler_ui/src/sqlexecutionwidget.h b/libpgmodeler_ui/src/sqlexecutionwidget.h index 8257fc1352..aaab858171 100644 --- a/libpgmodeler_ui/src/sqlexecutionwidget.h +++ b/libpgmodeler_ui/src/sqlexecutionwidget.h @@ -33,6 +33,8 @@ #include "codecompletionwidget.h" #include "numberedtexteditor.h" #include "findreplacewidget.h" +#include "resultsetmodel.h" +#include "sqlexecutionhelper.h" class SQLExecutionWidget: public QWidget, public Ui::SQLExecutionWidget { private: @@ -42,14 +44,14 @@ class SQLExecutionWidget: public QWidget, public Ui::SQLExecutionWidget { static int cmd_history_max_len; - /*! \brief The maximum amount of rows allowed to the results grid. - * This attribute is used to limit the amount of rows inserted in any QTableWidget instance - * by fillResultsTable() in order to avoid memory exhaustion leading to crash depending on - * the amount of rows stored in a result set */ - static int max_result_rows; + qint64 start_exec, end_exec, total_exec; SchemaParser schparser; + QThread sql_exec_thread; + + SQLExecutionHelper sql_exec_hlp; + //! \brief Syntax highlighter for sql input field SyntaxHighlighter *sql_cmd_hl, @@ -81,14 +83,14 @@ class SQLExecutionWidget: public QWidget, public Ui::SQLExecutionWidget { //! \brief Stores the command on the sql command history void addToSQLHistory(const QString &cmd, unsigned rows=0, const QString &error=QString()); - //! \brief Show the exception message in the output widget - void showError(Exception &e); - - //! \brief Fills the result grid with the specified result set - void fillResultsTable(ResultSet &res); + void fillResultsTable(void); static void validateSQLHistoryLength(const QString &conn_id, const QString &fmt_cmd = QString(), NumberedTextEditor *cmd_history_txt = nullptr); + void switchToExecutionMode(bool value); + + void destroyResultModel(void); + protected: //! \brief Widget that serves as SQL commands input NumberedTextEditor *sql_cmd_txt, @@ -103,6 +105,7 @@ class SQLExecutionWidget: public QWidget, public Ui::SQLExecutionWidget { static const QString COLUMN_NULL_VALUE; SQLExecutionWidget(QWidget * parent = 0); + ~SQLExecutionWidget(void); //! \brief Configures the connection to query the server void setConnection(Connection conn); @@ -112,23 +115,19 @@ class SQLExecutionWidget: public QWidget, public Ui::SQLExecutionWidget { static void fillResultsTable(Catalog &catalog, ResultSet &res, QTableWidget *results_tbw, bool store_data=false); //! \brief Copy to clipboard (in csv format) the current selected items on results grid - static void copySelection(QTableWidget *results_tbw, bool use_popup=true, bool csv_is_default = false); + static void copySelection(QTableView *results_tbw, bool use_popup=true, bool csv_is_default = false); //! \brief Generates a CSV buffer based upon the selection on the results grid - static QByteArray generateCSVBuffer(QTableWidget *results_tbw, int start_row, int start_col, int row_cnt, int col_cnt); + static QByteArray generateCSVBuffer(QTableView *results_tbw); //! \brief Generates a Plain text buffer based upon the selection on the results grid (this method does not include the column names) - static QByteArray generateTextBuffer(QTableWidget *results_tbw, int start_row, int start_col, int row_cnt, int col_cnt); - - //! \brief Exports the results to csv file - static void exportResults(QTableWidget *results_tbw); - - static void setMaxResultRows(int max_val); + static QByteArray generateTextBuffer(QTableView *results_tbw); - static int getMaxResultRows(void); + //! \brief Generates a custom text buffer. User can specify a separator for columns, include column names and quote values + static QByteArray generateBuffer(QTableView *results_tbw, QChar separator, bool incl_col_names, bool use_quotes); - public slots: - void configureSnippets(void); + //! \brief Exports the results to csv file + static void exportResults(QTableView *results_tbw); //! \brief Save the history of all connections open in the SQL Execution to the sql-history.conf static void saveSQLHistory(void); @@ -142,6 +141,12 @@ class SQLExecutionWidget: public QWidget, public Ui::SQLExecutionWidget { static int getSQLHistoryMaxLength(void); + public slots: + void configureSnippets(void); + + //! \brief Show the exception message in the output widget + void handleExecutionAborted(Exception e); + private slots: //! \brief Enables the command buttons when user fills the sql field void enableCommandButtons(void); @@ -164,6 +169,8 @@ class SQLExecutionWidget: public QWidget, public Ui::SQLExecutionWidget { void showHistoryContextMenu(void); + void finishExecution(int rows_affected = 0); + friend class SQLToolWidget; }; diff --git a/libpgmodeler_ui/src/sqltoolwidget.cpp b/libpgmodeler_ui/src/sqltoolwidget.cpp index 906b9564a8..7ba9964ce3 100644 --- a/libpgmodeler_ui/src/sqltoolwidget.cpp +++ b/libpgmodeler_ui/src/sqltoolwidget.cpp @@ -342,9 +342,12 @@ void SQLToolWidget::showSnippet(const QString &snip) sql_exec_wgt=dynamic_cast(sql_exec_tbw->currentWidget()); - QTextCursor cursor=sql_exec_wgt->sql_cmd_txt->textCursor(); - cursor.movePosition(QTextCursor::End); + if(sql_exec_wgt->sql_cmd_txt->isEnabled()) + { + QTextCursor cursor=sql_exec_wgt->sql_cmd_txt->textCursor(); + cursor.movePosition(QTextCursor::End); - sql_exec_wgt->sql_cmd_txt->appendPlainText(snip); - sql_exec_wgt->sql_cmd_txt->setTextCursor(cursor); + sql_exec_wgt->sql_cmd_txt->appendPlainText(snip); + sql_exec_wgt->sql_cmd_txt->setTextCursor(cursor); + } } diff --git a/libpgmodeler_ui/src/tabledatawidget.cpp b/libpgmodeler_ui/src/tabledatawidget.cpp index 74bb0add73..fdae8177b6 100644 --- a/libpgmodeler_ui/src/tabledatawidget.cpp +++ b/libpgmodeler_ui/src/tabledatawidget.cpp @@ -18,6 +18,8 @@ #include "tabledatawidget.h" #include "htmlitemdelegate.h" +#include "bulkdataeditwidget.h" +#include "sqlexecutionwidget.h" const QString TableDataWidget::PLACEHOLDER_COLUMN=QString("$placeholder$"); @@ -73,6 +75,50 @@ TableDataWidget::TableDataWidget(QWidget *parent): BaseObjectWidget(parent, BASE connect(csv_load_wgt, &CsvLoadWidget::s_csvFileLoaded, [&](){ populateDataGrid(csv_load_wgt->getCsvBuffer(Table::DATA_SEPARATOR, Table::DATA_LINE_BREAK)); }); + + connect(paste_tb, &QToolButton::clicked, [&](){ + csv_load_wgt->loadCsvBuffer(qApp->clipboard()->text(), QString(";"), QString("\""), true); + populateDataGrid(csv_load_wgt->getCsvBuffer(Table::DATA_SEPARATOR, Table::DATA_LINE_BREAK)); + qApp->clipboard()->clear(); + paste_tb->setEnabled(false); + }); + + connect(bulkedit_tb, &QToolButton::clicked, [&](){ + PgModelerUiNS::bulkDataEdit(data_tbw); + }); + + connect(copy_tb, &QToolButton::clicked, [&](){ + SQLExecutionWidget::copySelection(data_tbw, false, true); + paste_tb->setEnabled(true); + }); + + connect(data_tbw, &QTableWidget::itemPressed, + [&](){ + if(QApplication::mouseButtons()==Qt::RightButton) + { + QMenu item_menu; + QAction *act = nullptr; + QList btns = { add_row_tb, add_col_tb, dup_rows_tb, nullptr, + del_rows_tb, del_cols_tb, nullptr, + clear_rows_tb, clear_cols_tb, nullptr, + copy_tb, paste_tb }; + + for(auto &btn : btns) + { + if(!btn) + { + item_menu.addSeparator(); + continue; + } + + act = item_menu.addAction(btn->icon(), btn->text(), btn, SLOT(click()), btn->shortcut()); + act->setEnabled(btn->isEnabled()); + act->setMenu(btn->menu()); + } + + item_menu.exec(QCursor::pos()); + } + }); } void TableDataWidget::insertRowOnTabPress(int curr_row, int curr_col, int prev_row, int prev_col) @@ -262,6 +308,8 @@ void TableDataWidget::enableButtons(void) add_row_tb->setEnabled(data_tbw->columnCount() > 0); del_cols_tb->setEnabled(rows_selected); dup_rows_tb->setEnabled(cols_selected); + bulkedit_tb->setEnabled(!sel_ranges.isEmpty()); + copy_tb->setEnabled(!sel_ranges.isEmpty()); } void TableDataWidget::setAttributes(DatabaseModel *model, Table *table) @@ -295,14 +343,13 @@ void TableDataWidget::populateDataGrid(const QString &data) else ini_data=table->getInitialData(); - /* If the initial data buffer is preset the columns there have priority over the current table's columns */ if(!ini_data.isEmpty()) { buffer=ini_data.split(Table::DATA_LINE_BREAK); - //The first line of the buffer always have the column names + //The first line of the buffer always has the column names if(!buffer.isEmpty() && !buffer[0].isEmpty()) columns.append(buffer[0].split(Table::DATA_SEPARATOR)); } @@ -464,6 +511,16 @@ QString TableDataWidget::generateDataBuffer(void) return(buffer.join(Table::DATA_LINE_BREAK)); } +void TableDataWidget::enterEvent(QEvent *) +{ + paste_tb->setEnabled(!qApp->clipboard()->text().isEmpty()); +} + +void TableDataWidget::showEvent(QShowEvent *) +{ + paste_tb->setEnabled(!qApp->clipboard()->text().isEmpty()); +} + void TableDataWidget::addRow(void) { int row=data_tbw->rowCount(); diff --git a/libpgmodeler_ui/src/tabledatawidget.h b/libpgmodeler_ui/src/tabledatawidget.h index 564eeb9b36..f82a91ce66 100644 --- a/libpgmodeler_ui/src/tabledatawidget.h +++ b/libpgmodeler_ui/src/tabledatawidget.h @@ -54,6 +54,10 @@ class TableDataWidget: public BaseObjectWidget, public Ui::TableDataWidget { //! brief Generated the CSV-like buffer to be used as initial data in the table object QString generateDataBuffer(void); + void showEvent(QShowEvent *); + + void enterEvent(QEvent *); + public: static const QString PLACEHOLDER_COLUMN; diff --git a/libpgmodeler_ui/src/tablewidget.cpp b/libpgmodeler_ui/src/tablewidget.cpp index 8099d124a4..13aa4ca987 100644 --- a/libpgmodeler_ui/src/tablewidget.cpp +++ b/libpgmodeler_ui/src/tablewidget.cpp @@ -25,6 +25,7 @@ #include "baseform.h" #include "tabledatawidget.h" #include "policywidget.h" +#include "generalconfigwidget.h" TableWidget::TableWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_TABLE) { @@ -33,18 +34,17 @@ TableWidget::TableWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_TABLE) ObjectType types[]={ OBJ_COLUMN, OBJ_CONSTRAINT, OBJ_TRIGGER, OBJ_RULE, OBJ_INDEX, OBJ_POLICY }; map > fields_map; QFrame *frame=nullptr; - QToolButton *edt_data_tb=nullptr; + QPushButton *edt_data_tb=nullptr; Ui_TableWidget::setupUi(this); - edt_data_tb=new QToolButton(this); + edt_data_tb=new QPushButton(this); QPixmap icon=QPixmap(PgModelerUiNS::getIconPath("editdata")); edt_data_tb->setMinimumSize(edt_perms_tb->minimumSize()); edt_data_tb->setText(trUtf8("Edit data")); edt_data_tb->setToolTip(trUtf8("Define initial data for the table")); edt_data_tb->setIcon(icon); edt_data_tb->setIconSize(edt_perms_tb->iconSize()); - edt_data_tb->setToolButtonStyle(edt_perms_tb->toolButtonStyle()); connect(edt_data_tb, SIGNAL(clicked(bool)), this, SLOT(editData())); misc_btns_lt->insertWidget(1, edt_data_tb); @@ -160,7 +160,7 @@ TableWidget::TableWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_TABLE) configureFormLayout(table_grid, OBJ_TABLE); configureTabOrder({ tag_sel }); - setMinimumSize(600, 610); + setMinimumSize(660, 620); } template @@ -725,7 +725,10 @@ void TableWidget::editData(void) tab_data_wgt->setAttributes(this->model, dynamic_cast
(this->object)); base_form.setMainWidget(tab_data_wgt); base_form.setButtonConfiguration(Messagebox::OK_CANCEL_BUTTONS); + + GeneralConfigWidget::restoreWidgetGeometry(&base_form, tab_data_wgt->metaObject()->className()); base_form.exec(); + GeneralConfigWidget::saveWidgetGeometry(&base_form, tab_data_wgt->metaObject()->className()); } void TableWidget::applyConfiguration(void) diff --git a/libpgmodeler_ui/src/validationinfo.h b/libpgmodeler_ui/src/validationinfo.h index 81773c2289..4ff4872670 100644 --- a/libpgmodeler_ui/src/validationinfo.h +++ b/libpgmodeler_ui/src/validationinfo.h @@ -50,8 +50,9 @@ class ValidationInfo { BROKEN_REFERENCE=1, SP_OBJ_BROKEN_REFERENCE=2, BROKEN_REL_CONFIG=3, - SQL_VALIDATION_ERR=4, - VALIDATION_ABORTED=5; + MISSING_EXTENSION=4, + SQL_VALIDATION_ERR=5, + VALIDATION_ABORTED=6; ValidationInfo(void); ValidationInfo(unsigned val_type, BaseObject *object, vector references); diff --git a/libpgmodeler_ui/src/viewwidget.cpp b/libpgmodeler_ui/src/viewwidget.cpp index 3c5e087860..58cab2588b 100644 --- a/libpgmodeler_ui/src/viewwidget.cpp +++ b/libpgmodeler_ui/src/viewwidget.cpp @@ -21,6 +21,7 @@ #include "triggerwidget.h" #include "indexwidget.h" #include "baseform.h" +#include "referencewidget.h" ViewWidget::ViewWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_VIEW) { @@ -36,11 +37,6 @@ ViewWidget::ViewWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_VIEW) Ui_ViewWidget::setupUi(this); - expression_txt=new NumberedTextEditor(this, true); - expression_hl=new SyntaxHighlighter(expression_txt, false, true); - expression_hl->loadConfiguration(GlobalAttributes::SQL_HIGHLIGHT_CONF_PATH); - referencias_grid->addWidget(expression_txt, 4, 1, 1, 4); - code_txt=new NumberedTextEditor(this); code_txt->setReadOnly(true); code_hl=new SyntaxHighlighter(code_txt); @@ -59,27 +55,19 @@ ViewWidget::ViewWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_VIEW) tag_sel=new ObjectSelectorWidget(OBJ_TAG, false, this); dynamic_cast(options_gb->layout())->addWidget(tag_sel, 0, 1, 1, 4); - table_sel=new ObjectSelectorWidget(OBJ_TABLE, true, this); - table_sel->enableObjectCreation(false); - column_sel=new ObjectSelectorWidget(OBJ_COLUMN, true, this); - column_sel->enableObjectCreation(false); + references_tab=new ObjectsTableWidget(ObjectsTableWidget::ALL_BUTTONS ^ ObjectsTableWidget::UPDATE_BUTTON, true, this); + references_tab->setColumnCount(5); + references_tab->setHeaderLabel(trUtf8("Col./Expr."), 0); + references_tab->setHeaderLabel(trUtf8("Table alias"), 1); + references_tab->setHeaderLabel(trUtf8("Column alias"), 2); + references_tab->setHeaderLabel(trUtf8("Flags: SF FW AW EX VD"), 3); + references_tab->setHeaderLabel(trUtf8("Reference alias"), 4); - references_tab=new ObjectsTableWidget(ObjectsTableWidget::ALL_BUTTONS, true, this); - references_tab->setColumnCount(4); - references_tab->setHeaderLabel(trUtf8("Col./Expr."),0); - references_tab->setHeaderLabel(trUtf8("Alias"),1); - references_tab->setHeaderLabel(trUtf8("Alias Col."),2); - references_tab->setHeaderLabel(trUtf8("Flags: SF FW AW EX VD"),3); + vbox=new QVBoxLayout(tabWidget->widget(0)); + vbox->setContentsMargins(4,4,4,4); + vbox->addWidget(references_tab); cte_expression_cp=new CodeCompletionWidget(cte_expression_txt, true); - expression_cp=new CodeCompletionWidget(expression_txt, true); - - frame_info=generateInformationFrame(trUtf8("To reference all columns in a table (*) just do not fill the field Column, this is the same as write [schema].[table].*")); - - referencias_grid->addWidget(table_sel, 2,1,1,2); - referencias_grid->addWidget(column_sel, 3,1,1,2); - referencias_grid->addWidget(frame_info, 6, 0, 1, 0); - referencias_grid->addWidget(references_tab, 7,0,2,0); //Configuring the table objects that stores the triggers and rules for(unsigned i=0, tab_id=1; i < sizeof(types)/sizeof(ObjectType); i++, tab_id++) @@ -132,20 +120,11 @@ ViewWidget::ViewWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_VIEW) view_grid->addWidget(frame, view_grid->count()+1, 0, 1,3); frame->setParent(this); - connect(ref_type_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(selectReferenceType(void))); - connect(column_sel, SIGNAL(s_objectSelected(void)), this, SLOT(showObjectName(void))); - connect(column_sel, SIGNAL(s_selectorCleared(void)), this, SLOT(showObjectName(void))); - connect(table_sel, SIGNAL(s_objectSelected(void)), this, SLOT(showObjectName(void))); - connect(references_tab, SIGNAL(s_rowAdded(int)), this, SLOT(handleReference(int))); - connect(references_tab, SIGNAL(s_rowUpdated(int)), this, SLOT(handleReference(int))); + connect(references_tab, SIGNAL(s_rowAdded(int)), this, SLOT(addReference(int))); connect(references_tab, SIGNAL(s_rowEdited(int)), this, SLOT(editReference(int))); + connect(references_tab, SIGNAL(s_rowDuplicated(int,int)), this, SLOT(duplicateReference(int,int))); connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(updateCodePreview(void))); - connect(view_def_chk, SIGNAL(toggled(bool)), select_from_chk, SLOT(setDisabled(bool))); - connect(view_def_chk, SIGNAL(toggled(bool)), from_where_chk, SLOT(setDisabled(bool))); - connect(view_def_chk, SIGNAL(toggled(bool)), after_where_chk, SLOT(setDisabled(bool))); - connect(view_def_chk, SIGNAL(toggled(bool)), expr_alias_edt, SLOT(setDisabled(bool))); - connect(view_def_chk, SIGNAL(toggled(bool)), expr_alias_lbl, SLOT(setDisabled(bool))); connect(materialized_rb, SIGNAL(toggled(bool)), with_no_data_chk, SLOT(setEnabled(bool))); connect(materialized_rb, SIGNAL(toggled(bool)), tablespace_sel, SLOT(setEnabled(bool))); connect(materialized_rb, SIGNAL(toggled(bool)), tablespace_lbl, SLOT(setEnabled(bool))); @@ -158,13 +137,8 @@ ViewWidget::ViewWidget(QWidget *parent): BaseObjectWidget(parent, OBJ_VIEW) connect(schema_sel, SIGNAL(s_objectSelected(void)), this, SLOT(updateCodePreview(void))); connect(schema_sel, SIGNAL(s_selectorCleared(void)), this, SLOT(updateCodePreview(void))); - selectReferenceType(); - - configureTabOrder({ tag_sel, ordinary_rb, recursive_rb, with_no_data_chk, tabWidget, - ref_type_cmb, select_from_chk, from_where_chk, after_where_chk, - table_sel, tab_alias_edt, column_sel, col_alias_edt }); - - setMinimumSize(600, 730); + configureTabOrder({ tag_sel, ordinary_rb, recursive_rb, with_no_data_chk, tabWidget }); + setMinimumSize(660, 650); } catch(Exception &e) { @@ -176,8 +150,8 @@ ObjectsTableWidget *ViewWidget::getObjectTable(ObjectType obj_type) { if(objects_tab_map.count(obj_type) > 0) return(objects_tab_map[obj_type]); - else - return(nullptr); + + return(nullptr); } template @@ -306,6 +280,17 @@ void ViewWidget::removeObjects(void) } } +void ViewWidget::addReference(int row) +{ + openReferenceForm(Reference(), row, false); +} + +void ViewWidget::duplicateReference(int orig_row, int new_row) +{ + showReferenceData(references_tab->getRowData(orig_row).value(), + getReferenceFlag(orig_row), new_row); +} + void ViewWidget::removeObject(int row) { View *view=nullptr; @@ -440,158 +425,71 @@ void ViewWidget::listObjects(ObjectType obj_type) } } -void ViewWidget::clearReferenceForm(void) -{ - column_sel->clearSelector(); - table_sel->clearSelector(); - col_alias_edt->clear(); - expr_alias_edt->clear(); - tab_alias_edt->clear(); - expression_txt->clear(); - select_from_chk->setChecked(false); - from_where_chk->setChecked(false); - after_where_chk->setChecked(false); -} - -void ViewWidget::selectReferenceType(void) +int ViewWidget::openReferenceForm(Reference ref, int row, bool update) { - //Marks if the select reference type treats a reference to an object - bool ref_obj=(ref_type_cmb->currentIndex()==static_cast(Reference::REFER_COLUMN)); - - table_lbl->setVisible(ref_obj); - column_lbl->setVisible(ref_obj); - table_sel->setVisible(ref_obj); - column_sel->setVisible(ref_obj); - col_alias_lbl->setVisible(ref_obj); - col_alias_edt->setVisible(ref_obj); - tab_alias_edt->setVisible(ref_obj); - tab_alias_lbl->setVisible(ref_obj); - frame_info->setVisible(ref_obj); - - view_def_chk->setChecked(false); - expression_lbl->setVisible(!ref_obj); - expression_txt->setVisible(!ref_obj); - expr_alias_edt->setVisible(!ref_obj); - expr_alias_lbl->setVisible(!ref_obj); - view_def_chk->setVisible(!ref_obj); -} - -void ViewWidget::handleReference(int ref_idx) -{ - try - { - Reference ref; + BaseForm editing_form(this); + ReferenceWidget *ref_wgt=new ReferenceWidget; + int result = 0; - //Creating a reference to a column - if(static_cast(ref_type_cmb->currentIndex())==Reference::REFER_COLUMN) - { - ref=Reference(dynamic_cast
(table_sel->getSelectedObject()), - dynamic_cast(column_sel->getSelectedObject()), - tab_alias_edt->text().toUtf8(), col_alias_edt->text().toUtf8()); - } - //Creating a reference to an expression - else - { - ref=Reference(expression_txt->toPlainText(), expr_alias_edt->text().toUtf8()); - } + editing_form.setMainWidget(ref_wgt); + editing_form.setButtonConfiguration(Messagebox::OK_CANCEL_BUTTONS); - /* The reference must have an SQL application (be between SELECT-FROM, FROM-WHERE or after WHERE), - if the user do not check some of these attributes raises an error */ - if(!select_from_chk->isChecked() && !from_where_chk->isChecked() && - !after_where_chk->isChecked() && !end_expr_chk->isChecked() && - !view_def_chk->isChecked()) - throw Exception(ERR_SQL_SCOPE_INV_VIEW_REF,__PRETTY_FUNCTION__,__FILE__,__LINE__); + disconnect(editing_form.apply_ok_btn, SIGNAL(clicked(bool)), &editing_form, SLOT(accept())); + connect(editing_form.apply_ok_btn, SIGNAL(clicked(bool)), ref_wgt, SLOT(applyConfiguration())); + connect(ref_wgt, SIGNAL(s_closeRequested()), &editing_form, SLOT(accept())); - if(view_def_chk->isChecked()) - { - select_from_chk->setChecked(false); - from_where_chk->setChecked(false); - after_where_chk->setChecked(false); - } + ref_wgt->setAttributes(ref, getReferenceFlag(row), model); + result = editing_form.exec(); + disconnect(ref_wgt, nullptr, &editing_form, nullptr); - showReferenceData(ref, select_from_chk->isChecked(), from_where_chk->isChecked(), - after_where_chk->isChecked(), end_expr_chk->isChecked(), view_def_chk->isChecked() ,ref_idx); + if(result == QDialog::Accepted) + showReferenceData(ref_wgt->getReference(), ref_wgt->getReferenceFlags(), row); + else if(!update) + references_tab->removeRow(row); - clearReferenceForm(); - references_tab->clearSelection(); - } - catch(Exception &e) - { - if(references_tab->getCellText(ref_idx, 0).isEmpty()) - references_tab->removeRow(ref_idx); - - throw Exception(e.getErrorMessage(),e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e); - } + return(result); } -void ViewWidget::editReference(int ref_idx) +unsigned ViewWidget::getReferenceFlag(int row) { - Reference ref; - QString str_aux; - - //Get the reference at the selected table row - ref=references_tab->getRowData(ref_idx).value(); - ref_type_cmb->setCurrentIndex(ref.getReferenceType()); - - if(ref.getReferenceType()==Reference::REFER_COLUMN) - { - if(ref.getColumn()) - column_sel->setSelectedObject(ref.getColumn()); - else - table_sel->setSelectedObject(ref.getTable()); + QString flags_str = references_tab->getCellText(row, 3); + unsigned ref_flags = 0; - col_alias_edt->setText(ref.getColumnAlias()); - tab_alias_edt->setText(ref.getAlias()); - } + if(flags_str[4] == '1') + ref_flags = Reference::SQL_VIEW_DEFINITION; else { - expression_txt->setPlainText(ref.getExpression()); - expr_alias_edt->setText(ref.getAlias()); - } - - str_aux=references_tab->getCellText(ref_idx,3); - select_from_chk->setChecked(str_aux[0]=='1'); - from_where_chk->setChecked(str_aux[1]=='1'); - after_where_chk->setChecked(str_aux[2]=='1'); - end_expr_chk->setChecked(str_aux[3]=='1'); - view_def_chk->setChecked(str_aux[4]=='1'); -} + if(flags_str[0] == '1') + ref_flags |= Reference::SQL_REFER_SELECT; -void ViewWidget::showObjectName(void) -{ - Column *col=nullptr; - QObject *obj_sender=sender(); + if(flags_str[1] == '1') + ref_flags |= Reference::SQL_REFER_FROM; - //If the sender is the table selector means that user want to reference all table columns - if(obj_sender==table_sel) - { - column_sel->blockSignals(true); - //Clears the column selector indicating the situation. (TABLE.*) - column_sel->clearSelector(); + if(flags_str[2] == '1') + ref_flags |= Reference::SQL_REFER_WHERE; - column_sel->blockSignals(false); + if(flags_str[3] == '1') + ref_flags |= Reference::SQL_REFER_END_EXPR; } - //If the sender is not the table sender the user wants to reference a specific column - else - { - col=dynamic_cast(column_sel->getSelectedObject()); - table_sel->blockSignals(true); - - if(col) - table_sel->setSelectedObject(col->getParentTable()); - else - table_sel->clearSelector(); + return(ref_flags); +} - table_sel->blockSignals(false); - } +void ViewWidget::editReference(int ref_idx) +{ + openReferenceForm(references_tab->getRowData(ref_idx).value(), ref_idx, true); } -void ViewWidget::showReferenceData(Reference refer, bool selec_from, bool from_where, bool after_where, bool end_expr, bool view_def, unsigned row) +void ViewWidget::showReferenceData(Reference refer, unsigned ref_flags, unsigned row) { Table *tab=nullptr; Column *col=nullptr; QString str_aux; + bool selec_from = (ref_flags & Reference::SQL_REFER_SELECT) == Reference::SQL_REFER_SELECT, + from_where = (ref_flags & Reference::SQL_REFER_FROM) == Reference::SQL_REFER_FROM, + after_where = (ref_flags & Reference::SQL_REFER_WHERE) == Reference::SQL_REFER_WHERE, + end_expr = (ref_flags & Reference::SQL_REFER_END_EXPR) == Reference::SQL_REFER_END_EXPR, + view_def = (ref_flags & Reference::SQL_VIEW_DEFINITION) == Reference::SQL_VIEW_DEFINITION; if(refer.getReferenceType()==Reference::REFER_COLUMN) { @@ -624,7 +522,9 @@ void ViewWidget::showReferenceData(Reference refer, bool selec_from, bool from_w str_aux+=(after_where ? QString("1") : QString("0")); str_aux+=(end_expr ? QString("1") : QString("0")); str_aux+=(view_def ? QString("1") : QString("0")); - references_tab->setCellText(str_aux,row,3); + references_tab->setCellText(str_aux, row, 3); + + references_tab->setCellText(refer.getReferenceAlias(), row, 4); refer.setDefinitionExpression(view_def); references_tab->setRowData(QVariant::fromValue(refer), row); @@ -715,8 +615,7 @@ void ViewWidget::updateCodePreview(void) void ViewWidget::setAttributes(DatabaseModel *model, OperationList *op_list, Schema *schema, View *view, double px, double py) { - unsigned i, count; - bool sel_from = false, from_where = false, after_where = false, view_def = false, end_expr = false; + unsigned i, count, ref_flags = 0; Reference refer; if(!view) @@ -737,15 +636,11 @@ void ViewWidget::setAttributes(DatabaseModel *model, OperationList *op_list, Sch recursive_rb->setChecked(view->isRecursive()); with_no_data_chk->setChecked(view->isWithNoData()); - expression_cp->configureCompletion(model, expression_hl); cte_expression_cp->configureCompletion(model, cte_expression_hl); op_list->startOperationChain(); operation_count=op_list->getCurrentSize(); - column_sel->setModel(model); - table_sel->setModel(model); - tag_sel->setModel(this->model); tag_sel->setSelectedObject(view->getTag()); @@ -758,14 +653,25 @@ void ViewWidget::setAttributes(DatabaseModel *model, OperationList *op_list, Sch { references_tab->addRow(); + ref_flags = 0; refer=view->getReference(i); - sel_from=(view->getReferenceIndex(refer,Reference::SQL_REFER_SELECT) >= 0); - from_where=(view->getReferenceIndex(refer,Reference::SQL_REFER_FROM) >= 0); - after_where=(view->getReferenceIndex(refer,Reference::SQL_REFER_WHERE)>= 0); - end_expr=(view->getReferenceIndex(refer,Reference::SQL_REFER_END_EXPR)>= 0); - view_def=(view->getReferenceIndex(refer,Reference::SQL_VIEW_DEFINITION)>= 0); - showReferenceData(refer, sel_from, from_where, after_where, end_expr, view_def, i); + if(view->getReferenceIndex(refer, Reference::SQL_VIEW_DEFINITION) >= 0) + ref_flags = Reference::SQL_VIEW_DEFINITION; + + if(view->getReferenceIndex(refer, Reference::SQL_REFER_SELECT) >= 0) + ref_flags |= Reference::SQL_REFER_SELECT; + + if(view->getReferenceIndex(refer, Reference::SQL_REFER_FROM) >= 0) + ref_flags |= Reference::SQL_REFER_FROM; + + if(view->getReferenceIndex(refer, Reference::SQL_REFER_WHERE) >= 0) + ref_flags |= Reference::SQL_REFER_WHERE; + + if(view->getReferenceIndex(refer, Reference::SQL_REFER_END_EXPR) >= 0) + ref_flags |= Reference::SQL_REFER_END_EXPR; + + showReferenceData(refer, ref_flags, i); } references_tab->blockSignals(false); @@ -811,7 +717,7 @@ void ViewWidget::applyConfiguration(void) refer=references_tab->getRowData(i).value(); //Get the SQL application string for the current reference - str_aux=references_tab->getCellText(i,3); + str_aux=references_tab->getCellText(i, 3); for(unsigned i=0; i < sizeof(expr_type)/sizeof(unsigned); i++) { if(str_aux[i]=='1') diff --git a/libpgmodeler_ui/src/viewwidget.h b/libpgmodeler_ui/src/viewwidget.h index f499437f13..a9d4546429 100644 --- a/libpgmodeler_ui/src/viewwidget.h +++ b/libpgmodeler_ui/src/viewwidget.h @@ -41,35 +41,25 @@ class ViewWidget: public BaseObjectWidget, public Ui::ViewWidget { private: Q_OBJECT - QFrame *frame_info; - ObjectSelectorWidget *tag_sel; - NumberedTextEditor *cte_expression_txt, *code_txt, *expression_txt; + NumberedTextEditor *cte_expression_txt, *code_txt; //! \brief Stores all the view references ObjectsTableWidget *references_tab; map objects_tab_map; - SyntaxHighlighter *expression_hl, - *code_hl, - *cte_expression_hl; - - CodeCompletionWidget *cte_expression_cp, - *expression_cp; + SyntaxHighlighter *code_hl, *cte_expression_hl; - ObjectSelectorWidget *table_sel, - *column_sel; + CodeCompletionWidget *cte_expression_cp; //! \brief Shows the reference at the reference's table - void showReferenceData(Reference refer, bool selec_from, bool from_where, - bool after_where, bool end_expr, bool view_def, unsigned row); - - void clearReferenceForm(void); + void showReferenceData(Reference refer, unsigned ref_flags, unsigned row); //! \brief Returns the object table according with the child type ObjectsTableWidget *getObjectTable(ObjectType obj_type); + ObjectType getObjectType(QObject *sender); void showObjectData(TableObject *object, int row); @@ -81,24 +71,19 @@ class ViewWidget: public BaseObjectWidget, public Ui::ViewWidget { template int openEditingForm(TableObject *object); + int openReferenceForm(Reference ref, int row, bool update); + + unsigned getReferenceFlag(int row); + public: ViewWidget(QWidget * parent = 0); void setAttributes(DatabaseModel *model, OperationList *op_list, Schema *schema, View *view, double px, double py); private slots: - //! \brief Shows the field according to the selected reference type - void selectReferenceType(void); - - //! \brief Creates a reference from the values filled on the form - void handleReference(int ref_idx); - //! \brief Edits the selected reference void editReference(int ref_idx); - //! \brief Controls the form which are show the table and column names of the reference - void showObjectName(void); - //! \brief Updates the sql code field of the view form void updateCodePreview(void); @@ -114,6 +99,12 @@ class ViewWidget: public BaseObjectWidget, public Ui::ViewWidget { //! \brief Removes all objects from the table that calls the slot void removeObjects(void); + //! \brief Opens the reference form when a new row is added in the references grid + void addReference(int row); + + //! \brief Duplicate the current selected reference + void duplicateReference(int orig_row, int new_row); + public slots: void applyConfiguration(void); void cancelConfiguration(void); diff --git a/libpgmodeler_ui/src/welcomewidget.cpp b/libpgmodeler_ui/src/welcomewidget.cpp index 13d28a7961..bc9424d49e 100644 --- a/libpgmodeler_ui/src/welcomewidget.cpp +++ b/libpgmodeler_ui/src/welcomewidget.cpp @@ -24,7 +24,7 @@ WelcomeWidget::WelcomeWidget(QWidget *parent): QWidget(parent) { setupUi(this); - QList btns= { new_tb, open_tb, recent_tb, last_session_tb, sample_tb }; + QList btns= { new_tb, open_tb, recent_tb, last_session_tb, sample_tb, support_tb }; QGraphicsDropShadowEffect *shadow=nullptr; for(auto &btn : btns) @@ -36,9 +36,9 @@ WelcomeWidget::WelcomeWidget(QWidget *parent): QWidget(parent) btn->setGraphicsEffect(shadow); #ifdef Q_OS_LINUX - PgModelerUiNS::configureWidgetFont(btn, 1.20f); + PgModelerUiNS::__configureWidgetFont(btn, 1.20f); #else - PgModelerUiNS::configureWidgetFont(btn, 1.50f); + PgModelerUiNS::__configureWidgetFont(btn, 1.50f); #endif } } diff --git a/libpgmodeler_ui/ui/aboutwidget.ui b/libpgmodeler_ui/ui/aboutwidget.ui index 2fdb9dcc26..5df306c8fd 100644 --- a/libpgmodeler_ui/ui/aboutwidget.ui +++ b/libpgmodeler_ui/ui/aboutwidget.ui @@ -9,8 +9,8 @@ 0 0 - 575 - 550 + 550 + 530 @@ -21,14 +21,14 @@ - 575 - 550 + 550 + 530 16777215 - 600 + 550 @@ -68,7 +68,7 @@ QFrame::Raised - + 6 @@ -81,32 +81,7 @@ 6 - - 6 - - - - - - 0 - 0 - - - - - 75 - true - - - - PostgreSQL Database Modeler - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - + @@ -116,14 +91,14 @@ - 100 - 100 + 50 + 50 - 100 - 100 + 50 + 50 @@ -137,190 +112,32 @@ - - - - - 0 - 0 - - - - - 0 - 0 - - - - - false - - - - QFrame::NoFrame - - - Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. - - - Qt::PlainText - - - Qt::AlignJustify|Qt::AlignTop - - - true - - - 0 - - - Qt::TextSelectableByMouse - - - - - - - - 0 - 0 - - - - - 230 - 0 - - - - - 16777215 - 16777215 - - - - - true - - - - Design, configure, deploy - - - - - - - - - - 0 - 0 - - - - <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" text-decoration: underline; color:#2980b9;">https://pgmodeler.io</span></a></p></body></html> - - - Qt::RichText - - - 5 - - - true - - - - - - - pgModeler is proudly a brazilian software! - - - - - - - - - :/imagens/imagens/brazil_flag.png - - - Qt::AlignHCenter|Qt::AlignTop - - - + + - - - - 0 - 0 - - - - <html><head/><body><p>Copyright 2006-2016 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.io</span></a>&gt;</p></body></html> + + + Qt::Horizontal - - Qt::AutoText - - - 5 - - - true + + + 40 + 20 + - + - - - - - - - 20 - 20 - - - - - 20 - 20 - - - - Hide this widget - - - ... - - - - :/icones/icones/fechar1.png:/icones/icones/fechar1.png - - - true - - - - - - - 6 - - + - + 0 0 - 60 + 0 0 @@ -337,19 +154,15 @@ true + + + - 0.0.0.0 + 0.0.0 - - - - - - 6 - - + @@ -368,20 +181,17 @@ Qt::LeftToRight - Build: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + build: -1 - + - + 0 0 @@ -436,482 +246,258 @@ -1 + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + PostgreSQL Database Modeler + + + Qt::AlignCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + - - - - - 0 - 0 - - + + - 0 - 0 + 20 + 20 - - 0 + + + 20 + 20 + + + + Hide this widget + + + ... + + + + :/icones/icones/fechar1.png:/icones/icones/fechar1.png + + + true - - - License - - - - 4 - - - 4 - - - 4 - - - 4 - - - - - - Droid Sans Tamil - - - - QFrame::Sunken - - - QAbstractScrollArea::AdjustToContents - - - false - - - QTextEdit::WidgetWidth - - - true - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Droid Sans Tamil'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier';">pgModeler - PostgreSQL Database Modeler<br />Copyright 2006-2016 - Raphael Araújo e Silva<br /><br />This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 3.<br /><br />This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<br /><br />The complete text of GPLv3 is at LICENSE file on pgModeler's source code root directory. Also, you can get the complete GNU General Public License at &lt;</span><a href="http://www.gnu.org/licenses"><span style=" font-family:'Courier'; text-decoration: underline; color:#0000ff;">http://www.gnu.org/licenses</span></a><span style=" font-family:'Courier';">&gt;</span></p></body></html> - - - false - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - - - - - - Contributors - - - - 4 - - - 4 - - - 4 - - - 4 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - false - - - - QFrame::NoFrame - - - <html><head/><body><p>This page is dedicated to all contributors who gave a bit of their time in make pgModeler a better software somehow. The complete list of people that helped pgModeler can be found at <a href="https://github.com/pgmodeler/pgmodeler/graphs/contributors"><span style=" text-decoration: underline; color:#00a489;">GitHub</span></a>.</p><p>If you have a great idea to improve pgModeler please submit it <a href="http://github.com/pgmodeler/pgmodeler/issues"><span style=" text-decoration: underline; color:#00a489;">here</span></a>. No ideas for now but want to help? Why not donate a few bucks <a href="http://pgmodeler.com.br/#donate"><span style=" text-decoration: underline; color:#00a489;">here</span></a>!?</p></body></html> - - - Qt::RichText - - - Qt::AlignJustify|Qt::AlignTop - - - true - - - 0 - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - 0 - 0 - - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAsNeeded - - - QAbstractItemView::NoEditTriggers - - - false - - - true - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectItems - - - QAbstractItemView::ScrollPerItem - - - true - - - false - - - true - - - true - - - false - - - true - - - false - - - false - - - false - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 8 - - - - - 9 - - - - - 10 - - - - - Name - - - - - Country - - - - - Contribution - - - - - Damien Degois - - - - - France - - - - :/icones/icones/flag_france.png:/icones/icones/flag_france.png - - - - - French UI translation and several improvements in auxiliary scripts. - - - - - Ji Bin - - - - - China - - - - :/icones/icones/flag_china.png:/icones/icones/flag_china.png - - - - - Chinese UI translation and small fixes. - - - - - Pierre-Samuel LE STANG - - - - - France - - - - :/icones/icones/flag_france.png:/icones/icones/flag_france.png - - - - - French UI translation. - - - - - Lisandro Damián Nicanor - - - - - Argentina - - - - :/icones/icones/flag_argentina.png:/icones/icones/flag_argentina.png - - - - - Improvements on build scripts enabling the custom packaging in Linux distros; Per-user settings; pgModeler's package maintainer in Debian Linux. - - - - - Pavel Alexeev - - - - - Russia - - - - :/icones/icones/flag_russia.png:/icones/icones/flag_russia.png - - - - - Additional work for packaging in Linux distros; pgModeler's package maintainer in Fedora Linux. - - - - - Mariusz Fik - - - - - Poland - - - - :/icones/icones/flag_poland.png:/icones/icones/flag_poland.png - - - - - Custom packaging first ideas. Tester of first version of custom packaging patch. - - - - - Jonathan DUPRE - - - - - France - - - - :/icones/icones/flag_france.png:/icones/icones/flag_france.png - - - - - French UI translation. - - - - - Gilberto Castillo - - - - - Cuba - - - - :/icones/icones/flag_cuba.png:/icones/icones/flag_cuba.png - - - - - Spanish UI translation. - - - - - -Danúbio Viana Nogueira - - - - - Brazil - - - - :/imagens/imagens/brazil_flag.png:/imagens/imagens/brazil_flag.png - - - - - Brazilian Portuguese UI translation. - - - - - Alfredo Marcillo - - - - - Ecuador - - - - :/icones/icones/flag_ecuador.png:/icones/icones/flag_ecuador.png - - - - - Spanish UI translation review. - - - - - - - + Qt::Vertical - QSizePolicy::Expanding + QSizePolicy::Fixed 20 - 10 + 20 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + false + + + + QFrame::NoFrame + + + Open source data modeling tool designed for PostgreSQL. No more DDL commands written by hand, let pgModeler do the job for you! This software reunites the concepts of entity-relationship diagrams and the features that PostgreSQL implements as extensions of SQL standards. + + + Qt::PlainText + + + Qt::AlignJustify|Qt::AlignTop + + + true + + + 0 + + + Qt::TextSelectableByMouse + + + + + + + License + + + + 4 + + + 4 + + + 4 + + + 4 + + + + + QFrame::Sunken + + + QAbstractScrollArea::AdjustToContents + + + false + + + QTextEdit::WidgetWidth + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier';">pgModeler - PostgreSQL Database Modeler<br />Copyright 2006-2018 - Raphael Araújo e Silva<br /><br />This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 3.<br /><br />This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<br /><br />The complete text of GPLv3 is at LICENSE file on pgModeler's source code root directory. Also, you can get the complete GNU General Public License at &lt;</span><a href="http://www.gnu.org/licenses"><span style=" font-family:'Courier'; text-decoration: underline; color:#0000ff;">http://www.gnu.org/licenses</span></a><span style=" font-family:'Courier';">&gt;</span></p></body></html> + + + false + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + + + + + 0 + 0 + + + + <html><head/><body><p><a href="http://pgmodeler.com.br"><span style=" text-decoration: underline; color:#2980b9;">https://pgmodeler.io</span></a></p></body></html> + + + Qt::RichText + + + 5 + + + true + + + + + + + pgModeler is proudly a brazilian software! + + + + + + + + + :/imagens/imagens/brazil_flag.png + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + 0 + 0 + + + + <html><head/><body><p>Copyright 2006-2018 - Raphael Araújo e Silva &lt;<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.io</span></a>&gt;</p></body></html> + + + Qt::AutoText + + + 5 + + + true + + + + + diff --git a/libpgmodeler_ui/ui/appearanceconfigwidget.ui b/libpgmodeler_ui/ui/appearanceconfigwidget.ui index 4c3e082f50..cb62533654 100644 --- a/libpgmodeler_ui/ui/appearanceconfigwidget.ui +++ b/libpgmodeler_ui/ui/appearanceconfigwidget.ui @@ -167,6 +167,16 @@ Constraint: Descriptor + + + Policy: Name + + + + + Policy: Descriptor + + View: Schema name diff --git a/libpgmodeler_ui/ui/baseobjectwidget.ui b/libpgmodeler_ui/ui/baseobjectwidget.ui index c3db5ea209..1d0f66d1a1 100644 --- a/libpgmodeler_ui/ui/baseobjectwidget.ui +++ b/libpgmodeler_ui/ui/baseobjectwidget.ui @@ -74,6 +74,9 @@ 16777215 + + This is the name of the object in the PostgreSQL database. + @@ -147,7 +150,7 @@ Schema: - + 318 @@ -193,9 +196,6 @@ 22 - - Qt::ToolButtonTextBesideIcon - @@ -331,7 +331,7 @@ This will disable the code of all child and referrer objects. Collation: - + 197 @@ -377,9 +377,6 @@ This will disable the code of all child and referrer objects. 22 - - Qt::ToolButtonTextBesideIcon - @@ -403,9 +400,9 @@ This will disable the code of all child and referrer objects. - 210 - 90 - 141 + 200 + 80 + 161 31 @@ -428,7 +425,7 @@ This will disable the code of all child and referrer objects. - + 0 0 @@ -507,6 +504,123 @@ This will disable the code of all child and referrer objects. 80 + + true + + + + + + 80 + 120 + 111 + 25 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + This is a more friendly name for the object. When displaying the model in compact view this is the name shown for the object instead of its real name. If this field is empty the real name will be displayed anyway. + + + + + + + + + 8 + 120 + 81 + 16 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Alias: + + + + + + 200 + 120 + 31 + 31 + + + + + 0 + 0 + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 22 + 22 + + + + + 22 + 22 + + + + + diff --git a/libpgmodeler_ui/ui/columnwidget.ui b/libpgmodeler_ui/ui/columnwidget.ui index 7bcc7008d1..4ba331f204 100644 --- a/libpgmodeler_ui/ui/columnwidget.ui +++ b/libpgmodeler_ui/ui/columnwidget.ui @@ -6,8 +6,8 @@ 0 0 - 347 - 171 + 585 + 250 @@ -44,10 +44,23 @@ 4 - - - - false + + + + + 0 + 30 + + + + Edit the underlying sequence's attributes + + + Edit sequence + + + + :/icones/icones/sequence.png:/icones/icones/sequence.png @@ -75,20 +88,7 @@ - - - - - 0 - 0 - - - - &NOT NULL - - - - + @@ -116,6 +116,39 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + + + + + + 0 + 0 + + + + &NOT NULL + + + @@ -126,6 +159,8 @@ def_value_txt sequence_rb - + + + diff --git a/libpgmodeler_ui/ui/configurationform.ui b/libpgmodeler_ui/ui/configurationform.ui index c33ee5bf83..e2e72b0462 100644 --- a/libpgmodeler_ui/ui/configurationform.ui +++ b/libpgmodeler_ui/ui/configurationform.ui @@ -117,7 +117,7 @@ false - QAbstractItemView::DragOnly + QAbstractItemView::NoDragDrop Qt::IgnoreAction @@ -205,6 +205,9 @@ :/icones/icones/relationshiptv.png:/icones/icones/relationshiptv.png + + ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled + @@ -244,6 +247,9 @@ :/icones/icones/codesnippet.png:/icones/icones/codesnippet.png + + ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled + diff --git a/libpgmodeler_ui/ui/csvloadwidget.ui b/libpgmodeler_ui/ui/csvloadwidget.ui index 51a614e1d9..c32cb6d6b5 100644 --- a/libpgmodeler_ui/ui/csvloadwidget.ui +++ b/libpgmodeler_ui/ui/csvloadwidget.ui @@ -6,7 +6,7 @@ 0 0 - 729 + 710 100 diff --git a/libpgmodeler_ui/ui/databaseexplorerwidget.ui b/libpgmodeler_ui/ui/databaseexplorerwidget.ui index 82082236c4..ac107cb19e 100644 --- a/libpgmodeler_ui/ui/databaseexplorerwidget.ui +++ b/libpgmodeler_ui/ui/databaseexplorerwidget.ui @@ -34,6 +34,9 @@ + + 4 + @@ -69,6 +72,9 @@ Qt::ToolButtonIconOnly + + true + @@ -109,6 +115,9 @@ Qt::ToolButtonIconOnly + + true + @@ -143,6 +152,9 @@ Qt::ToolButtonIconOnly + + true + @@ -169,6 +181,9 @@ Ctrl+F6 + + true + @@ -192,6 +207,9 @@ 22 + + true + @@ -215,6 +233,9 @@ 22 + + true + diff --git a/libpgmodeler_ui/ui/databaseimportform.ui b/libpgmodeler_ui/ui/databaseimportform.ui index 39235995fe..75f29d0f17 100644 --- a/libpgmodeler_ui/ui/databaseimportform.ui +++ b/libpgmodeler_ui/ui/databaseimportform.ui @@ -81,49 +81,7 @@ 4 - - - - - 0 - 0 - - - - - 32 - 32 - - - - - 32 - 32 - - - - - - - :/icones/icones/import.png - - - - - - - - 13 - 75 - true - - - - Import database - - - - + diff --git a/libpgmodeler_ui/ui/datamanipulationform.ui b/libpgmodeler_ui/ui/datamanipulationform.ui index 97d2c9f515..4caea69908 100644 --- a/libpgmodeler_ui/ui/datamanipulationform.ui +++ b/libpgmodeler_ui/ui/datamanipulationform.ui @@ -6,16 +6,22 @@ 0 0 - 800 + 758 600 - 800 + 700 600 + + + 1250 + 0 + + Data Manipulation @@ -176,1043 +182,150 @@ 4 - - - - - 0 - 0 - - + + 0 - 30 + 0 - - QFrame::StyledPanel + + + + + + + 0 + 0 + - - QFrame::Raised + + Qt::Horizontal - - - 2 + + false + + + + true - - 2 + + QAbstractScrollArea::AdjustToContents - - 2 + + QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked - - 2 + + true - - - - - 24 - 24 - - - - - 24 - 24 - - - - - - - Qt::AutoText - - - :/icones/icones/msgbox_info.png - - - true - - - - - - - - 0 - 0 - - - - - 50 - false - false - false - true - - - - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> - - - true - - - - - - - - - - - 0 - 0 - - - - - 2 + + QAbstractItemView::ExtendedSelection - - 2 + + QAbstractItemView::SelectItems - - 2 + + QAbstractItemView::ScrollPerItem - - 2 + + QAbstractItemView::ScrollPerPixel - - - - - 0 - 0 - + + false + + + 0 + + + 0 + + + true + + + 30 + + + false + + + true + + + false + + + false + + + 25 + + + 25 + + + false + + + + + Qt::Vertical + + + false + + + + Filter expression + + + + 4 - - - false - + + 4 - - + + 4 - - -1 + + 4 - - - - - - - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Refresh listing - - - - :/icones/icones/atualizar.png:/icones/icones/atualizar.png - - - - 22 - 22 - - - - F5 - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Save changes - - - - :/icones/icones/salvar.png:/icones/icones/salvar.png - - - - 22 - 22 - - - - Ctrl+S - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Copy items on the grid - - - - :/icones/icones/copiar.png:/icones/icones/copiar.png - - - - 22 - 22 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Paste items on the grid - - - - :/icones/icones/colar.png:/icones/icones/colar.png - - - - 22 - 22 - - - - Ctrl+V - - - QToolButton::InstantPopup - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Export results to CSV file - - - - :/icones/icones/exportdata.png:/icones/icones/exportdata.png - - - - 22 - 22 - - - - Ctrl+X - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Browse referenced tables - - - - :/icones/icones/browsetable.png:/icones/icones/browsetable.png - - - - 22 - 22 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonIconOnly - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 20 - - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Undo modifications - - - - :/icones/icones/desfazer.png:/icones/icones/desfazer.png - - - - 22 - 22 - - - - Ctrl+Z - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Add empty rows - - - - :/icones/icones/addrow.png:/icones/icones/addrow.png - - - - 22 - 22 - - - - Ins - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Mark the selected rows to be deleted - - - - :/icones/icones/delrow.png:/icones/icones/delrow.png - - - - 22 - 22 - - - - Del - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Change the values of all selected cells at once - - - - :/icones/icones/bulkedit.png:/icones/icones/bulkedit.png - - - - 22 - 22 - - - - Ctrl+E - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Duplicate the selected rows - - - - :/icones/icones/duprow.png:/icones/icones/duprow.png - - - - 22 - 22 - - - - Ctrl+D - - - Qt::ToolButtonIconOnly - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 20 - - - - - - - - true - - - - 0 - 0 - - - - Add new rows from a CSV file - - - - :/icones/icones/loadcsv.png:/icones/icones/loadcsv.png - - - - 22 - 22 - - - - - - - true - - - Qt::ToolButtonIconOnly - - - - - - - false - - - - 0 - 0 - - - - - 8 - - - - Filter the result set - - - - :/icones/icones/filter.png:/icones/icones/filter.png - - - - 22 - 22 - - - - true - - - Qt::ToolButtonIconOnly - - - - - - - - - - 0 - 0 - - - - Table: - - - - - - - - 0 - 0 - - - - Schema: - + + + + + 0 + 0 + + + + + 0 + 0 + + + + + - - - - - Qt::Horizontal + + + Order && Limit - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - 20 - - - QComboBox::InsertAtBottom - - - QComboBox::AdjustToContentsOnFirstShow - - - - 16 - 16 - - - - - - - - - 0 - 0 - - - - 20 - - - QComboBox::InsertAtBottom - - - - 16 - 16 - - - - - - - - 0 - - - - - - 0 - 0 - - - - in - - - - - - - - 20 - 20 - - - - - 22 - 22 - - - - - - - :/icones/icones/database.png - - - true - - - - - - - - 0 - 0 - - - - - - - 5 - - - - - - - - - - 0 - 0 - - - - Hide views - - - true - - - - - - - - - - 0 - 0 - - - - - 0 - 30 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 2 - - - 2 - - - 2 - - - 2 - - - - - - 24 - 24 - - - - - 24 - 24 - - - - - - - Qt::AutoText - - - :/icones/icones/msgbox_alerta.png - - - true + + + 4 - - - - - - - 50 - false - false - false - false - true - + + 4 - - + + 4 - - true - - - - - - - - - - - 0 - 0 - - - - Qt::Horizontal - - - false - - - - true - - - QAbstractScrollArea::AdjustToContents - - - QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked - - - true - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectItems - - - QAbstractItemView::ScrollPerItem - - - QAbstractItemView::ScrollPerPixel - - - false - - - 0 - - - 0 - - - true - - - 30 - - - false - - - true - - - false - - - false - - - 25 - - - 25 - - - false - - - - - Qt::Vertical - - - false - - - - Filter expression - - - - 4 - - - 4 - - - 4 - - - 4 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - - - - - Order && Limit - - - - 4 - - - 4 - - - 4 - - - 4 + + 4 @@ -1456,10 +569,13 @@ 0 - 999999 + 1000000 + + + 50 - 500 + 1000 @@ -1547,14 +663,990 @@ - - + + + + + 0 + 0 + + + + + 0 + 30 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 24 + 24 + + + + + 24 + 24 + + + + + + + Qt::AutoText + + + :/icones/icones/msgbox_alerta.png + + + true + + + + + + + + 50 + false + false + false + false + true + + + + + + + true + + + + + + + + 0 0 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 0 + 0 + + + + + false + + + + + + + -1 + + + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 24 + 24 + + + + + 24 + 24 + + + + + + + Qt::AutoText + + + :/icones/icones/msgbox_info.png + + + true + + + + + + + + 0 + 0 + + + + + 50 + false + false + false + true + + + + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + + + true + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + Schema: + + + + + + + + 0 + 0 + + + + 20 + + + QComboBox::InsertAtBottom + + + + 16 + 16 + + + + + + + + + 0 + 0 + + + + Table: + + + + + + + + 0 + 0 + + + + 20 + + + QComboBox::InsertAtBottom + + + QComboBox::AdjustToContentsOnFirstShow + + + + 16 + 16 + + + + + + + + + 0 + 0 + + + + Hide views + + + true + + + + + + + + + 0 + + + + + + 20 + 20 + + + + + 22 + 22 + + + + + + + :/icones/icones/database.png + + + true + + + + + + + + 0 + 0 + + + + + + + 5 + + + + + + + + + + + + 0 + 0 + + + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + + 0 + 0 + + + + Refresh listing + + + Refresh + + + + :/icones/icones/atualizar.png:/icones/icones/atualizar.png + + + + 22 + 22 + + + + F5 + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Save changes + + + Save + + + + :/icones/icones/salvar.png:/icones/icones/salvar.png + + + + 22 + 22 + + + + Ctrl+S + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Copy items on the grid + + + Copy + + + + :/icones/icones/copiar.png:/icones/icones/copiar.png + + + + 22 + 22 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Paste items on the grid + + + Paste + + + + :/icones/icones/colar.png:/icones/icones/colar.png + + + + 22 + 22 + + + + Ctrl+V + + + QToolButton::InstantPopup + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Export results to CSV file + + + Export + + + + :/icones/icones/exportdata.png:/icones/icones/exportdata.png + + + + 22 + 22 + + + + Ctrl+X + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Browse referenced tables + + + Browse + + + + :/icones/icones/browsetable.png:/icones/icones/browsetable.png + + + + 22 + 22 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonIconOnly + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 8 + 20 + + + + + + + + false + + + + 0 + 0 + + + + Undo modifications + + + Undo + + + + :/icones/icones/desfazer.png:/icones/icones/desfazer.png + + + + 22 + 22 + + + + Ctrl+Z + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Add empty rows + + + Add + + + + :/icones/icones/addrow.png:/icones/icones/addrow.png + + + + 22 + 22 + + + + Ins + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Mark the selected rows to be deleted + + + Delete + + + + :/icones/icones/delrow.png:/icones/icones/delrow.png + + + + 22 + 22 + + + + Del + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Change the values of all selected cells at once + + + Edit + + + + :/icones/icones/bulkedit.png:/icones/icones/bulkedit.png + + + + 22 + 22 + + + + Ctrl+E + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Duplicate the selected rows + + + Duplicate + + + + :/icones/icones/duprow.png:/icones/icones/duprow.png + + + + 22 + 22 + + + + Ctrl+D + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Truncate the browsed table + + + Truncate + + + + :/icones/icones/truncate.png:/icones/icones/truncate.png + + + + 22 + 22 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonIconOnly + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 8 + 20 + + + + + + + + true + + + + 0 + 0 + + + + Add new rows from a CSV file + + + Load CSV + + + + :/icones/icones/loadcsv.png:/icones/icones/loadcsv.png + + + + 22 + 22 + + + + + + + true + + + Qt::ToolButtonIconOnly + + + true + + + + + + + false + + + + 0 + 0 + + + + Filter the result set + + + Filter + + + + :/icones/icones/filter.png:/icones/icones/filter.png + + + + 22 + 22 + + + + true + + + Qt::ToolButtonIconOnly + + + true + + + + + + + Qt::Horizontal + + + + 235 + 20 + + + + + diff --git a/libpgmodeler_ui/ui/donatewidget.ui b/libpgmodeler_ui/ui/donatewidget.ui index d150e9660d..82b6988a59 100644 --- a/libpgmodeler_ui/ui/donatewidget.ui +++ b/libpgmodeler_ui/ui/donatewidget.ui @@ -166,6 +166,12 @@ + + + 0 + 0 + + 0 @@ -203,7 +209,7 @@ - 40 + 118 20 diff --git a/libpgmodeler_ui/ui/findreplacewidget.ui b/libpgmodeler_ui/ui/findreplacewidget.ui index 9bdea1a4c4..d5972e866d 100644 --- a/libpgmodeler_ui/ui/findreplacewidget.ui +++ b/libpgmodeler_ui/ui/findreplacewidget.ui @@ -7,7 +7,7 @@ 0 0 704 - 62 + 64 @@ -170,6 +170,35 @@ + + + + + 20 + 20 + + + + + 20 + 20 + + + + Hide this widget + + + ... + + + + :/icones/icones/fechar1.png:/icones/icones/fechar1.png + + + true + + + diff --git a/libpgmodeler_ui/ui/generalconfigwidget.ui b/libpgmodeler_ui/ui/generalconfigwidget.ui index e68bad1f52..8d4354bfd3 100644 --- a/libpgmodeler_ui/ui/generalconfigwidget.ui +++ b/libpgmodeler_ui/ui/generalconfigwidget.ui @@ -6,7 +6,7 @@ 0 0 - 671 + 743 587 @@ -1011,21 +1011,54 @@ 4 - - + + + + + + + false + + + + + + + true + + + + + - + 0 0 - 22 - 22 + 0 + 0 + + 16777215 + 16777215 + + + + Browse the source code editor application + + + + + + + :/icones/icones/abrir.png:/icones/icones/abrir.png + + 22 22 @@ -1033,6 +1066,47 @@ + + + + Check if there is a new version on server + + + Check updates at startup + + + false + + + + + + + Configurations directory: + + + + + + + Souce code editor: + + + + + + + Souce code editor args: + + + + + + + User interface language: + + + @@ -1150,110 +1224,15 @@ - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - Maximum number of rows to be displayed in the results grid. This is used as a security measure to avoid application crash due to memory exhaustion when retrieving a huge set of data from the database without using filtering keywords like <strong>LIMIT</strong> or <strong>WHERE</strong>. - - - 5000 - - - 500000 - - - 5000 - - - 20000 - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - rows - - - - - - - - 0 - 0 - - - - - 22 - 22 - - - - - 22 - 22 - - - - - - Qt::Horizontal - QSizePolicy::Expanding + QSizePolicy::Fixed - 25 + 100 20 @@ -1261,87 +1240,21 @@ - - - - - - - false - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - SQL history max. length: - - - - - - - true - - - - - - - Souce code editor: - - - - - - - Configurations directory: - - - - - + + - + 0 0 - 0 - 0 + 22 + 22 - - 16777215 - 16777215 - - - - Browse the source code editor application - - - - - - - :/icones/icones/abrir.png:/icones/icones/abrir.png - - 22 22 @@ -1387,37 +1300,29 @@ - - - - Check if there is a new version on server - - - Check updates at startup - - - false + + + + Overrides the default user interface language defined by the system. Requires restarting the program. <strong>NOTE:</strong> UI translations are third party collaborations thus any typo or mistake should be reported directly to their respective maintainers. - - - - Souce code editor args: + + + + + 0 + 0 + - - - - - - User interface language: + + + 0 + 0 + - - - - - - Overrides the default user interface language defined by the system. Requires restarting the program. <strong>NOTE:</strong> UI translations are third party collaborations thus any typo or mistake should be reported directly to their respective maintainers. + + SQL history max. length: @@ -1431,15 +1336,95 @@ - - - - Limit SQL results in: - - - true - - + + + + + + Save/restore dialogs sizes + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 25 + 20 + + + + + + + + false + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 16777215 + + + + Qt::StrongFocus + + + Reset the dialogs sizes and positions to their default values. + + + Reset sizes + + + + :/icones/icones/atualizar.png:/icones/icones/atualizar.png + + + + 22 + 22 + + + + Qt::ToolButtonTextBesideIcon + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + diff --git a/libpgmodeler_ui/ui/mainwindow.ui b/libpgmodeler_ui/ui/mainwindow.ui index fa5ee1db02..39aaaaaccd 100644 --- a/libpgmodeler_ui/ui/mainwindow.ui +++ b/libpgmodeler_ui/ui/mainwindow.ui @@ -10,7 +10,7 @@ 0 0 1068 - 673 + 708 @@ -503,6 +503,9 @@ Qt::ToolButtonTextBesideIcon + + false + @@ -517,7 +520,7 @@ Toggle the object finder - Find Object + Find objects @@ -538,6 +541,9 @@ Qt::ToolButtonTextBesideIcon + + false + @@ -554,7 +560,7 @@ 3 - + 0 @@ -562,14 +568,14 @@ - Toggle the operation history widget + Toggle the model objects widget - &Operations + O&bjects - :/icones/icones/funcao.png:/icones/icones/funcao.png + :/icones/icones/tablespace.png:/icones/icones/tablespace.png @@ -578,7 +584,7 @@ - Alt+O + Alt+B true @@ -586,6 +592,9 @@ Qt::ToolButtonTextBesideIcon + + false + @@ -605,7 +614,7 @@ - + 0 @@ -613,14 +622,14 @@ - Toggle the model objects widget + Toggle the operation history widget - O&bjects + &Operations - :/icones/icones/tablespace.png:/icones/icones/tablespace.png + :/icones/icones/funcao.png:/icones/icones/funcao.png @@ -629,7 +638,7 @@ - Alt+B + Alt+O true @@ -637,6 +646,9 @@ Qt::ToolButtonTextBesideIcon + + false + @@ -678,7 +690,7 @@ 0 0 1068 - 23 + 27 @@ -744,6 +756,7 @@ + @@ -767,6 +780,12 @@ 0 + + + 50 + false + + General @@ -800,11 +819,11 @@ + - @@ -873,6 +892,7 @@ + @@ -1514,6 +1534,36 @@ Rearrange objects over the canvas + + + true + + + false + + + + :/icones/icones/compactview.png:/icones/icones/compactview.png + + + Compact view + + + Toggle the compact view on the model(s) + + + + + + :/icones/icones/moreactions.png:/icones/icones/moreactions.png + + + More + + + Addition action over the model + + models_tbw diff --git a/libpgmodeler_ui/ui/messagebox.ui b/libpgmodeler_ui/ui/messagebox.ui index 9f1a235117..38e5e05b28 100644 --- a/libpgmodeler_ui/ui/messagebox.ui +++ b/libpgmodeler_ui/ui/messagebox.ui @@ -10,7 +10,7 @@ 0 0 500 - 175 + 244 @@ -105,7 +105,7 @@ 0 - + 0 @@ -118,91 +118,121 @@ 0 - - 0 - - - - 2 + + + + 40 + 40 + - - - - - 40 - 40 - - - - - 40 - 40 - - - - - - - Qt::AlignCenter - - - - - - - true - - - - 0 - 0 - + + + 40 + 40 + + + + + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 0 + + + + + 0 + 90 + + + + + 16777215 + 16777215 + + + + false + + + false + + + + + + msg + + + Qt::RichText + + + true + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + 4 + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Qt::Vertical + + + + 20 + 84 + + + + + + + + + + Qt::Horizontal - - - 0 - 90 - + + QSizePolicy::Fixed - + - 16777215 - 16777215 + 5 + 20 - - false - - - false - - - - + + + + - msg - - - Qt::RichText - - - true - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - 4 - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -316,86 +346,100 @@ - - - - Qt::Horizontal - - + + + - 414 - 27 + 0 + 0 - - - - - - 4 - - - 4 - - - - - - 0 - 0 - - - - Show raw text errors or information. - - - - - - - :/icones/icones/codigofonte.png:/icones/icones/codigofonte.png - - - - 22 - 22 - - - - true - - - - - - - - 0 - 0 - - - - Show/hide exceptions stack. - - - ... - - - - :/icones/icones/refazer.png:/icones/icones/refazer.png - - - - 22 - 22 - - - - true - - - - + + + 0 + + + 0 + + + 4 + + + 4 + + + + + Qt::Horizontal + + + + 415 + 24 + + + + + + + + + 0 + 0 + + + + Show raw text errors or information. + + + + + + + :/icones/icones/codigofonte.png:/icones/icones/codigofonte.png + + + + 22 + 22 + + + + true + + + + + + + + 0 + 0 + + + + Show/hide exceptions stack. + + + ... + + + + :/icones/icones/refazer.png:/icones/icones/refazer.png + + + + 22 + 22 + + + + true + + + + + diff --git a/libpgmodeler_ui/ui/metadatahandlingform.ui b/libpgmodeler_ui/ui/metadatahandlingform.ui index 6b572f1fdc..d866525fc4 100644 --- a/libpgmodeler_ui/ui/metadatahandlingform.ui +++ b/libpgmodeler_ui/ui/metadatahandlingform.ui @@ -6,8 +6,8 @@ 0 0 - 666 - 574 + 727 + 609 @@ -173,52 +173,6 @@ 4 - - - - - - 0 - 0 - - - - - 32 - 32 - - - - - 32 - 32 - - - - - - - :/icones/icones/objmetadata.png - - - - - - - - 13 - 75 - true - - - - Handle objects metadata - - - - - - @@ -344,7 +298,7 @@ - + 0 @@ -367,6 +321,54 @@ 10 + + + + + + + 0 + 0 + + + + + + + Handles the objects' aliases in the metadata file. Only for graphical objects and table's children objects. + + + Objects' aliases + + + true + + + + + + + + 0 + 0 + + + + + 22 + 22 + + + + + 22 + 22 + + + + + + @@ -415,7 +417,7 @@ - + Qt::Vertical @@ -860,7 +862,7 @@ - + @@ -908,6 +910,73 @@ + + + + + 0 + 0 + + + + + 6 + + + 0 + + + 10 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 252 + 20 + + + + + + + + Select all + + + + + + + Clear all + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + @@ -1290,28 +1359,6 @@ - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - diff --git a/libpgmodeler_ui/ui/modeldatabasediffform.ui b/libpgmodeler_ui/ui/modeldatabasediffform.ui index 4fccfe761c..c1eb3868f0 100644 --- a/libpgmodeler_ui/ui/modeldatabasediffform.ui +++ b/libpgmodeler_ui/ui/modeldatabasediffform.ui @@ -85,58 +85,6 @@ 4 - - - - - - 0 - 0 - - - - - 32 - 32 - - - - - 32 - 32 - - - - - - - :/icones/icones/diff.png - - - - - - - - 0 - 0 - - - - - 13 - 75 - true - - - - Generate diff code - - - - - - diff --git a/libpgmodeler_ui/ui/modelexportform.ui b/libpgmodeler_ui/ui/modelexportform.ui index e0003788ae..d8582f2f9f 100644 --- a/libpgmodeler_ui/ui/modelexportform.ui +++ b/libpgmodeler_ui/ui/modelexportform.ui @@ -82,61 +82,6 @@ 4 - - - 2 - - - - - - 0 - 0 - - - - - 32 - 32 - - - - - 32 - 32 - - - - - - - :/icones/icones/exportar.png - - - - - - - - 0 - 0 - - - - - 13 - 75 - true - - - - Export model - - - - - - diff --git a/libpgmodeler_ui/ui/modelfixform.ui b/libpgmodeler_ui/ui/modelfixform.ui index 7a25ee3773..7619e432ea 100644 --- a/libpgmodeler_ui/ui/modelfixform.ui +++ b/libpgmodeler_ui/ui/modelfixform.ui @@ -81,160 +81,8 @@ 4 - - - - - - - 0 - 0 - - - - - 32 - 32 - - - - - 32 - 32 - - - - - - - :/icones/icones/fixobject.png - - - - - - - - 13 - 75 - true - - - - Fix model file - - - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - - - - - - 0 - 0 - - - - - 0 - 48 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 2 - - - 2 - - - 2 - - - 2 - - - - - - 24 - 24 - - - - - 24 - 24 - - - - - - - Qt::AutoText - - - :/icones/icones/msgbox_alerta.png - - - true - - - - - - - - 50 - false - false - false - false - true - - - - <html><head/><body><p>[pgmodeler-cli not found error]</p></body></html> - - - true - - - - - - - - + + 0 @@ -242,126 +90,41 @@ - pgmodeler-cli: + Input file: - - - - 0 - - - - - - - - true - - - Browse for pgmodeler-cli tool - - - ... - - - - :/icones/icones/abrir.png:/icones/icones/abrir.png + + + + + + 1 - - - 22 - 22 - + + 100 - - - - - - - - - 170 - 0 - 0 - - - - - - - - - 170 - 0 - 0 - - - - - - - - - 128 - 128 - 128 - - - - - - - - - false - + + + + + 0 + 0 + - The specified file is not the pgModeler command line tool (pgmodeler-cli). + Load fixed model when finish + + + true - - - - - 0 - 0 - - - - Input file: - - - - - - - - 0 - 0 - - - - Output file: - - - - - - - Fix tries: - - - - + @@ -475,7 +238,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Monospace'; font-size:10pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Monospace'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Waiting process to start...</span></p></body></html> @@ -486,38 +249,8 @@ p, li { white-space: pre-wrap; } - - - - - - - - - true - - - Select input file - - - ... - - - - :/icones/icones/abrir.png:/icones/icones/abrir.png - - - - 22 - 22 - - - - - - - - + + @@ -546,37 +279,91 @@ p, li { white-space: pre-wrap; } - - - - - - 1 - - - 100 - - - - - - - - 0 - 0 - - - - Load fixed model when finish - - - true - - - - + + + + + 0 + 0 + + + + + 0 + 48 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 24 + 24 + + + + + 24 + 24 + + + + + + + Qt::AutoText + + + :/icones/icones/msgbox_alerta.png + + + true + + + + + + + + 50 + false + false + false + false + true + + + + <html><head/><body><p>[pgmodeler-cli not found error]</p></body></html> + + + true + + + + + - + @@ -666,6 +453,151 @@ p, li { white-space: pre-wrap; } + + + + + 0 + 0 + + + + pgmodeler-cli: + + + + + + + 0 + + + + + + + + true + + + Browse for pgmodeler-cli tool + + + ... + + + + :/icones/icones/abrir.png:/icones/icones/abrir.png + + + + 22 + 22 + + + + + + + + + + + + + 170 + 0 + 0 + + + + + + + + + 170 + 0 + 0 + + + + + + + + + 128 + 128 + 128 + + + + + + + + + false + + + + The specified file is not the pgModeler command line tool (pgmodeler-cli). + + + + + + + + + + 0 + 0 + + + + Output file: + + + + + + + Fix tries: + + + + + + + + + + + + true + + + Select input file + + + ... + + + + :/icones/icones/abrir.png:/icones/icones/abrir.png + + + + 22 + 22 + + + + + + diff --git a/libpgmodeler_ui/ui/modelvalidationwidget.ui b/libpgmodeler_ui/ui/modelvalidationwidget.ui index 6530560647..fdc016a937 100644 --- a/libpgmodeler_ui/ui/modelvalidationwidget.ui +++ b/libpgmodeler_ui/ui/modelvalidationwidget.ui @@ -718,7 +718,7 @@ Try to resolve the reported issues. - Apply Fix + Apply fixes @@ -753,7 +753,7 @@ Change the creation order for two objects by swapping their ids - Swap Ids + Swap ids diff --git a/libpgmodeler_ui/ui/newobjectoverlaywidget.ui b/libpgmodeler_ui/ui/newobjectoverlaywidget.ui index 54d72ddc2d..e5715488b2 100644 --- a/libpgmodeler_ui/ui/newobjectoverlaywidget.ui +++ b/libpgmodeler_ui/ui/newobjectoverlaywidget.ui @@ -6,8 +6,8 @@ 0 0 - 408 - 702 + 426 + 840 @@ -83,1652 +83,1749 @@ 4 - - - - 0 - 0 - + + + Database objects - + - 0 + 4 - 0 + 4 - 0 + 4 - 0 + 4 - - 6 - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Schema - - - - :/icones/icones/schema.png:/icones/icones/schema.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Tablespace - - - - :/icones/icones/tablespace.png:/icones/icones/tablespace.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Cast - - - - :/icones/icones/cast.png:/icones/icones/cast.png - - - - 32 - 32 - - - - A - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Role - - - - :/icones/icones/role.png:/icones/icones/role.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Extension - - - - :/icones/icones/extension.png:/icones/icones/extension.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Event Trigger - - - - :/icones/icones/eventtrigger.png:/icones/icones/eventtrigger.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Language - - - - :/icones/icones/language.png:/icones/icones/language.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Generic SQL - - - - :/icones/icones/genericsql.png:/icones/icones/genericsql.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Tag - - - - :/icones/icones/tag.png:/icones/icones/tag.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Textbox - - - - :/icones/icones/textbox.png:/icones/icones/textbox.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 6 - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::StrongFocus - - - Type - - - - :/icones/icones/usertype.png:/icones/icones/usertype.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Conversion - - - - :/icones/icones/conversion.png:/icones/icones/conversion.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Aggregate - - - - :/icones/icones/aggregate.png:/icones/icones/aggregate.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Operator - - - - :/icones/icones/operator.png:/icones/icones/operator.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Domain - - - - :/icones/icones/domain.png:/icones/icones/domain.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Collation - - - - :/icones/icones/collation.png:/icones/icones/collation.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Sequence - - - - :/icones/icones/sequence.png:/icones/icones/sequence.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Op. Family - - - - :/icones/icones/opfamily.png:/icones/icones/opfamily.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Table - - - - :/icones/icones/table.png:/icones/icones/table.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Function - - - - :/icones/icones/function.png:/icones/icones/function.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - View - - - - :/icones/icones/view.png:/icones/icones/view.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Op. Class - - - - :/icones/icones/opclass.png:/icones/icones/opclass.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - + + 0 0 - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Permissions - - - - :/icones/icones/permission.png:/icones/icones/permission.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Schema + + + + :/icones/icones/schema.png:/icones/icones/schema.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Tablespace + + + + :/icones/icones/tablespace.png:/icones/icones/tablespace.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Role + + + + :/icones/icones/role.png:/icones/icones/role.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Language + + + + :/icones/icones/language.png:/icones/icones/language.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Generic SQL + + + + :/icones/icones/genericsql.png:/icones/icones/genericsql.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Tag + + + + :/icones/icones/tag.png:/icones/icones/tag.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Cast + + + + :/icones/icones/cast.png:/icones/icones/cast.png + + + + 32 + 32 + + + + A + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Extension + + + + :/icones/icones/extension.png:/icones/icones/extension.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Event Trigger + + + + :/icones/icones/eventtrigger.png:/icones/icones/eventtrigger.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Textbox + + + + :/icones/icones/textbox.png:/icones/icones/textbox.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Permissions + + + + :/icones/icones/permission.png:/icones/icones/permission.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + - - - - 0 - 0 - + + + Schema objects - + - 0 + 4 - 0 + 4 - 0 + 4 - 0 + 4 - - 6 - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Constraint - - - - :/icones/icones/constraint.png:/icones/icones/constraint.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Column - - - - :/icones/icones/column.png:/icones/icones/column.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Permissions - - - - :/icones/icones/permission.png:/icones/icones/permission.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Index - - - - :/icones/icones/index.png:/icones/icones/index.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Rule - - - - :/icones/icones/rule.png:/icones/icones/rule.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Trigger - - - - :/icones/icones/trigger.png:/icones/icones/trigger.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - + + 0 0 - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Policy - - - - :/icones/icones/policy.png:/icones/icones/policy.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::StrongFocus + + + Type + + + + :/icones/icones/usertype.png:/icones/icones/usertype.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Conversion + + + + :/icones/icones/conversion.png:/icones/icones/conversion.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Aggregate + + + + :/icones/icones/aggregate.png:/icones/icones/aggregate.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Operator + + + + :/icones/icones/operator.png:/icones/icones/operator.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Domain + + + + :/icones/icones/domain.png:/icones/icones/domain.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Collation + + + + :/icones/icones/collation.png:/icones/icones/collation.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Sequence + + + + :/icones/icones/sequence.png:/icones/icones/sequence.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Op. Family + + + + :/icones/icones/opfamily.png:/icones/icones/opfamily.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Table + + + + :/icones/icones/table.png:/icones/icones/table.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Function + + + + :/icones/icones/function.png:/icones/icones/function.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + View + + + + :/icones/icones/view.png:/icones/icones/view.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Op. Class + + + + :/icones/icones/opclass.png:/icones/icones/opclass.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + - - - - 0 - 0 - + + + Table objects - + - 0 + 4 - 0 + 4 - 0 + 4 - 0 + 4 - - 6 - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Many-to-many - - - - :/icones/icones/relationshipnn.png:/icones/icones/relationshipnn.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - One-to-many - - - - :/icones/icones/relationship1n.png:/icones/icones/relationship1n.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - - - + 0 0 - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - One-to-one - - - - :/icones/icones/relationship11.png:/icones/icones/relationship11.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Constraint + + + + :/icones/icones/constraint.png:/icones/icones/constraint.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Column + + + + :/icones/icones/column.png:/icones/icones/column.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Permissions + + + + :/icones/icones/permission.png:/icones/icones/permission.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Index + + + + :/icones/icones/index.png:/icones/icones/index.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Rule + + + + :/icones/icones/rule.png:/icones/icones/rule.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Trigger + + + + :/icones/icones/trigger.png:/icones/icones/trigger.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Policy + + + + :/icones/icones/policy.png:/icones/icones/policy.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + - - + + + + + + + Relationships + + + + 4 + + + 4 + + + 4 + + + 4 + + + 0 0 - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Inheritance - - - - :/icones/icones/relationshipgen.png:/icones/icones/relationshipgen.png - - - - 32 - 32 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Many-to-many + + + + :/icones/icones/relationshipnn.png:/icones/icones/relationshipnn.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + One-to-many + + + + :/icones/icones/relationship1n.png:/icones/icones/relationship1n.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + One-to-one + + + + :/icones/icones/relationship11.png:/icones/icones/relationship11.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Inheritance + + + + :/icones/icones/relationshipgen.png:/icones/icones/relationshipgen.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 95 + 50 + + + + + 50 + false + + + + Qt::NoFocus + + + Copy + + + + :/icones/icones/relationshipdep.png:/icones/icones/relationshipdep.png + + + + 32 + 32 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextUnderIcon + + + + - - - - - 0 - 0 - - - - - 95 - 50 - - - - - 50 - false - - - - Qt::NoFocus - - - Copy - - - - :/icones/icones/relationshipdep.png:/icones/icones/relationshipdep.png + + + + Qt::Horizontal - + - 32 - 32 + 40 + 20 - - QToolButton::InstantPopup - - - Qt::ToolButtonTextUnderIcon - - + diff --git a/libpgmodeler_ui/ui/policywidget.ui b/libpgmodeler_ui/ui/policywidget.ui index e06bde08b3..dc8789f42f 100644 --- a/libpgmodeler_ui/ui/policywidget.ui +++ b/libpgmodeler_ui/ui/policywidget.ui @@ -33,7 +33,7 @@ 4 - + Basics @@ -169,6 +169,11 @@ + + command_cmb + permissive_chk + attribs_tbw + diff --git a/libpgmodeler_ui/ui/referencewidget.ui b/libpgmodeler_ui/ui/referencewidget.ui new file mode 100644 index 0000000000..3659d59a8f --- /dev/null +++ b/libpgmodeler_ui/ui/referencewidget.ui @@ -0,0 +1,427 @@ + + + ReferenceWidget + + + + 0 + 0 + 622 + 184 + + + + + 0 + 0 + + + + Reference properties + + + + 4 + + + 4 + + + 4 + + + 4 + + + + + + 0 + 0 + + + + Table alias: + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Ref. type: + + + + + + + + 0 + 0 + + + + Used in: + + + + + + + + 0 + 0 + + + + Expression: + + + + + + + + 0 + 0 + + + + Expr. alias: + + + + + + + + 0 + 0 + + + + + + + + + + + 0 + 0 + + + + + false + + + + + + + <strong>SELECT</strong><br/>The reference will be used as part of the SELECT statement to retrieve columns or expressions that will compose the view's columns.<br/><strong>FROM</strong><br/>The reference is used in the FROM portion of the command in order to reference tables or construct JOIN statements.<br/><strong>WHERE</strong><br/>The reference will be used as part of the WHERE clause in form of conditional expression. <br/><strong>GROUP/HAVING</strong><br/>The reference will be appended to the very end of the view's definition. This is useful when using GROUP BY/HAVING statements.<br/><strong>View definition</strong><br/>The reference's expression is used exclusively as the view's definition.<br/> + + + SELECT + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + false + + + + FROM + + + + + + + + 0 + 0 + + + + + false + + + + WHERE + + + + + + + + 0 + 0 + + + + + false + + + + GROUP/HAVING + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + View Definition + + + + + + + + 0 + 0 + + + + + 22 + 22 + + + + + 22 + 22 + + + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 22 + 22 + + + + + 22 + 22 + + + + + + + + + + View's references can point to a table, column or expression. + + + Table / Column + + + + Table / Column + + + + + Expression + + + + + + + + + 0 + 0 + + + + Ref. alias: + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + This is a more friendly description for the reference. When displaying the model in compact view this is the text shown for the reference instead of its real description. If this field is empty the real description will be displayed anyway. + + + + + + + + + + + 0 + 0 + + + + + 22 + 22 + + + + + 22 + 22 + + + + + + + + + + + 0 + 0 + + + + Ref. object: + + + + + + + + 0 + 0 + + + + Column alias: + + + + + + + false + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + diff --git a/libpgmodeler_ui/ui/relationshipwidget.ui b/libpgmodeler_ui/ui/relationshipwidget.ui index 7078bd1379..fce87e4987 100644 --- a/libpgmodeler_ui/ui/relationshipwidget.ui +++ b/libpgmodeler_ui/ui/relationshipwidget.ui @@ -6,7 +6,7 @@ 0 0 - 818 + 858 1701 @@ -1001,6 +1001,26 @@ + + + + false + + + STATISTICS + + + + + + + false + + + IDENTITY + + + diff --git a/libpgmodeler_ui/ui/sequencewidget.ui b/libpgmodeler_ui/ui/sequencewidget.ui index 91333f0dc3..524accdafd 100644 --- a/libpgmodeler_ui/ui/sequencewidget.ui +++ b/libpgmodeler_ui/ui/sequencewidget.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 214 + 603 + 165 @@ -24,42 +24,52 @@ - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 6 + + + Defualt values: + + + + + + + Cyclic: - + - + Start: - + @@ -80,15 +90,15 @@ - - + + - Maximum: + Increment: - - + + 0 @@ -108,14 +118,14 @@ - + Minimum: - + @@ -136,15 +146,15 @@ - - + + - Increment: + Maximum: - - + + 0 @@ -164,14 +174,14 @@ - + Cache: - + @@ -192,7 +202,7 @@ - + Owner Col.: diff --git a/libpgmodeler_ui/ui/sqlexecutionwidget.ui b/libpgmodeler_ui/ui/sqlexecutionwidget.ui index 60d3821d04..8aff7454a7 100644 --- a/libpgmodeler_ui/ui/sqlexecutionwidget.ui +++ b/libpgmodeler_ui/ui/sqlexecutionwidget.ui @@ -7,7 +7,7 @@ 0 0 843 - 478 + 349 @@ -127,10 +127,19 @@ + + 4 + - + - true + false + + + + 0 + 0 + @@ -139,14 +148,14 @@ - Handle external SQL script + Run the specified SQL command - &Script + Run - :/icones/icones/codigosql.png:/icones/icones/codigosql.png + :/icones/icones/run.png:/icones/icones/run.png @@ -155,26 +164,64 @@ - Alt+F + F6 - - false + + Qt::ToolButtonTextBesideIcon - - false + + true - - QToolButton::InstantPopup + + + + + + true + + + + 0 + 0 + + + + + 0 + 30 + + + + Cancel the execution of the current SQL command + + + Stop + + + + :/icones/icones/stop.png:/icones/icones/stop.png + + + + 22 + 22 + + + + Esc Qt::ToolButtonTextBesideIcon + + true + - + - false + true @@ -183,14 +230,14 @@ - Search in SQL code + Handle external SQL script - Fi&nd + &Script - :/icones/icones/buscar.png:/icones/icones/buscar.png + :/icones/icones/codigosql.png:/icones/icones/codigosql.png @@ -198,8 +245,11 @@ 22 + + Alt+F + - true + false false @@ -210,19 +260,16 @@ Qt::ToolButtonTextBesideIcon + + true + - + false - - - 0 - 0 - - 0 @@ -230,14 +277,14 @@ - Run the specified SQL command + Search in SQL code - Run SQL + Fi&nd - :/icones/icones/run.png:/icones/icones/run.png + :/icones/icones/buscar.png:/icones/icones/buscar.png @@ -246,11 +293,23 @@ - F6 + Ctrl+F + + + true + + + false + + + QToolButton::InstantPopup Qt::ToolButtonTextBesideIcon + + true + @@ -283,6 +342,9 @@ Qt::ToolButtonTextBesideIcon + + true + @@ -327,6 +389,9 @@ Qt::ToolButtonTextBesideIcon + + true + @@ -368,6 +433,9 @@ Qt::ToolButtonTextBesideIcon + + true + @@ -409,6 +477,9 @@ Qt::ToolButtonTextBesideIcon + + true + @@ -546,17 +617,17 @@ - - - 0 - 0 - + + + 0 + 0 + QTabWidget::South - 0 + 1 false @@ -581,14 +652,8 @@ 4 - + - - - 100 - 200 - - 0 @@ -605,14 +670,8 @@ 0 - - - - true - - - true - + + QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed @@ -622,15 +681,9 @@ QAbstractItemView::ContiguousSelection - - QAbstractItemView::ScrollPerItem - - - QAbstractItemView::ScrollPerPixel - - + false - + true @@ -640,16 +693,6 @@ 25 - - - ... - - - - - ... - - diff --git a/libpgmodeler_ui/ui/swapobjectsidswidget.ui b/libpgmodeler_ui/ui/swapobjectsidswidget.ui index b36d3604a1..6e57d3ec83 100644 --- a/libpgmodeler_ui/ui/swapobjectsidswidget.ui +++ b/libpgmodeler_ui/ui/swapobjectsidswidget.ui @@ -438,11 +438,6 @@ 81 - - - 9 - - QAbstractItemView::NoEditTriggers diff --git a/libpgmodeler_ui/ui/tabledatawidget.ui b/libpgmodeler_ui/ui/tabledatawidget.ui index 8760d88775..338096de71 100644 --- a/libpgmodeler_ui/ui/tabledatawidget.ui +++ b/libpgmodeler_ui/ui/tabledatawidget.ui @@ -6,7 +6,7 @@ 0 0 - 666 + 658 412 @@ -26,158 +26,7 @@ 0 - - - - - 0 - 0 - - - - - - - - true - - - - 0 - 0 - - - - Add empty rows - - - - :/icones/icones/addrow.png:/icones/icones/addrow.png - - - - 22 - 22 - - - - Ins - - - Qt::ToolButtonIconOnly - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 2 - 20 - - - - - - - - true - - - - 0 - 0 - - - - Add an empty column - - - - :/icones/icones/addcol.png:/icones/icones/addcol.png - - - - 22 - 22 - - - - QToolButton::InstantPopup - - - Qt::ToolButtonIconOnly - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 2 - 20 - - - - - - - - false - - - - 0 - 0 - - - - Remove all rows from the grid preserving columns - - - - :/icones/icones/delrows.png:/icones/icones/delrows.png - - - - 22 - 22 - - - - Shift+Del - - - Qt::ToolButtonIconOnly - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + true @@ -241,26 +90,10 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 2 - 20 - - - - - + - true + false @@ -268,12 +101,20 @@ 0 + + + 8 + + - Fills the grid using a CSV file + Copy items on the grid + + + Copy - :/icones/icones/loadcsv.png:/icones/icones/loadcsv.png + :/icones/icones/copiar.png:/icones/icones/copiar.png @@ -281,34 +122,18 @@ 22 - - - - - true + + QToolButton::InstantPopup Qt::ToolButtonIconOnly - - - - Qt::Horizontal - - - - 203 - 20 - - - - - - + + - false + true @@ -317,11 +142,14 @@ - Remove all columns (and rows) from the grid + Add empty rows + + + Add row - :/icones/icones/delcols.png:/icones/icones/delcols.png + :/icones/icones/addrow.png:/icones/icones/addrow.png @@ -330,15 +158,15 @@ - Ctrl+Shift+Del + Ins Qt::ToolButtonIconOnly - - + + false @@ -349,11 +177,14 @@ - Duplicate the selected rows + Delete the selected columns + + + Delete column - :/icones/icones/duprow.png:/icones/icones/duprow.png + :/icones/icones/delcol.png:/icones/icones/delcol.png @@ -362,15 +193,15 @@ - Ctrl+D + Del Qt::ToolButtonIconOnly - - + + false @@ -380,12 +211,20 @@ 0 + + + 8 + + - Delete the selected columns + Paste items on the grid + + + Paste - :/icones/icones/delcol.png:/icones/icones/delcol.png + :/icones/icones/colar.png:/icones/icones/colar.png @@ -394,17 +233,20 @@ - Del + Ctrl+V + + + QToolButton::InstantPopup Qt::ToolButtonIconOnly - - + + - false + true @@ -413,11 +255,11 @@ - Delete the selected rows + Fills the grid using a CSV file - :/icones/icones/delrow.png:/icones/icones/delrow.png + :/icones/icones/loadcsv.png:/icones/icones/loadcsv.png @@ -426,15 +268,18 @@ - Del + + + + true Qt::ToolButtonIconOnly - - + + 0 @@ -453,7 +298,7 @@ QFrame::Raised - + 2 @@ -467,7 +312,7 @@ 2 - + 24 @@ -487,7 +332,7 @@ Qt::AutoText - :/icones/icones/msgbox_info.png + :/icones/icones/msgbox_alerta.png true @@ -495,7 +340,7 @@ - + 0 @@ -512,7 +357,7 @@ - <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> + <html><head/><body><p>Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely ignored when generating the <span style=" font-weight:600;">INSERT</span> commands.</p></body></html> true @@ -522,15 +367,247 @@ - - - - - 0 - 0 - - - + + + + true + + + + 0 + 0 + + + + Add an empty column + + + Add column + + + + :/icones/icones/addcol.png:/icones/icones/addcol.png + + + + 22 + 22 + + + + QToolButton::InstantPopup + + + Qt::ToolButtonIconOnly + + + + + + + false + + + + 0 + 0 + + + + Duplicate the selected rows + + + Duplicate rows + + + + :/icones/icones/duprow.png:/icones/icones/duprow.png + + + + 22 + 22 + + + + Ctrl+D + + + Qt::ToolButtonIconOnly + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + + 0 + 0 + + + + + 8 + + + + Change the values of all selected cells at once + + + Bulk data edit + + + + :/icones/icones/bulkedit.png:/icones/icones/bulkedit.png + + + + 22 + 22 + + + + Ctrl+E + + + Qt::ToolButtonIconOnly + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + 0 + 0 + + + + + + + + false + + + + 0 + 0 + + + + Remove all columns (and rows) from the grid + + + Delete all columns + + + + :/icones/icones/delcols.png:/icones/icones/delcols.png + + + + 22 + 22 + + + + Ctrl+Shift+Del + + + Qt::ToolButtonIconOnly + + + + + + + false + + + + 0 + 0 + + + + Delete the selected rows + + + Delete rows + + + + :/icones/icones/delrow.png:/icones/icones/delrow.png + + + + 22 + 22 + + + + Del + + + Qt::ToolButtonIconOnly + + + + + + + + 0 + 0 + + + 0 30 @@ -542,7 +619,7 @@ QFrame::Raised - + 2 @@ -556,7 +633,7 @@ 2 - + 24 @@ -576,7 +653,7 @@ Qt::AutoText - :/icones/icones/msgbox_alerta.png + :/icones/icones/msgbox_info.png true @@ -584,7 +661,7 @@ - + 0 @@ -601,7 +678,7 @@ - Some invalid or duplicated columns were detected. In order to solve this issue double-click the header of the highlighted ones in order to define the correct name in which the data belongs to or delete the entire column. Note that these columns are completely igored when generating the <strong>INSERT</strong> commands. + <html><head/><body><p>Empty values are assumed as <span style=" font-weight:600;">DEFAULT</span>. To use special values like <span style=" font-weight:600;">NULL</span>, a function call like <span style=" font-weight:600;">now()</span> or a specific data escaping, enclose values in two slashes, e.g., <span style=" font-weight:600;">/value/</span>. To use a slash as part of the value prepend the backslash character, e.g., <span style=" font-weight:600;">\/</span>.</p></body></html> true @@ -611,6 +688,57 @@ + + + + false + + + + 0 + 0 + + + + Remove all rows from the grid preserving columns + + + Delete all rows + + + + :/icones/icones/delrows.png:/icones/icones/delrows.png + + + + 22 + 22 + + + + Shift+Del + + + Qt::ToolButtonIconOnly + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + clear_rows_tb hint_frm @@ -624,6 +752,9 @@ csv_load_tb csv_load_parent warn_frm + bulkedit_tb + copy_tb + paste_tb diff --git a/libpgmodeler_ui/ui/viewwidget.ui b/libpgmodeler_ui/ui/viewwidget.ui index 8f2ede6e12..8955fb17ea 100644 --- a/libpgmodeler_ui/ui/viewwidget.ui +++ b/libpgmodeler_ui/ui/viewwidget.ui @@ -28,267 +28,10 @@ 0 - + References - - - 6 - - - 6 - - - 6 - - - 6 - - - 6 - - - - - - 100 - 0 - - - - Reference Type: - - - - - - - - Column - - - - - Expression - - - - - - - - Used in: - - - - - - - Table: - - - - - - - - 0 - 0 - - - - Table Alias: - - - - - - - - 0 - 0 - - - - - - - - Column: - - - - - - - - 0 - 0 - - - - Column Alias: - - - - - - - - 0 - 0 - - - - - - - - Expression: - - - - - - - - 0 - 0 - - - - Expression Alias: - - - - - - - - 0 - 0 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 - - - - The element will be used as part of the SELECT statement to retrieve columns or expressions that will compose the view's columns - - - SELECT ... - - - - - - - - 0 - 0 - - - - The element will be used as part of the WHERE clause in form of conditional expression - - - WHERE ... - - - - - - - - 0 - 0 - - - - - 137 - 0 - - - - The element is used in the FROM portion of the command in order to reference tables or construct JOIN statements - - - FROM ... - - - - - - - - 0 - 0 - - - - The element's expression is used exclusively as the view's definition - - - View Definition - - - - - - - - 0 - 0 - - - - The element will be appended to the very end of the view's definition. This is useful when using GROUP BY/HAVING statements - - - End expression - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - diff --git a/libpgmodeler_ui/ui/welcomewidget.ui b/libpgmodeler_ui/ui/welcomewidget.ui index 6fbd0c1398..263400061e 100644 --- a/libpgmodeler_ui/ui/welcomewidget.ui +++ b/libpgmodeler_ui/ui/welcomewidget.ui @@ -6,8 +6,8 @@ 0 0 - 658 - 362 + 714 + 353 @@ -35,18 +35,9 @@ 0 - - 0 - - - - 10 - - - 25 - - + + @@ -71,17 +62,23 @@ - - - - 5 + + + + 20 + + + 10 - + + 20 + + - 125 - 85 + 110 + 80 @@ -102,8 +99,8 @@ - 60 - 60 + 55 + 55 @@ -114,12 +111,12 @@ - + - 125 - 85 + 110 + 80 @@ -140,8 +137,8 @@ - 60 - 60 + 55 + 55 @@ -152,15 +149,15 @@ - + true - 125 - 85 + 110 + 80 @@ -181,8 +178,8 @@ - 60 - 60 + 55 + 55 @@ -196,15 +193,15 @@ - + false - 125 - 85 + 110 + 80 @@ -225,8 +222,8 @@ - 60 - 60 + 55 + 55 @@ -240,15 +237,15 @@ - + false - 125 - 85 + 110 + 80 @@ -270,8 +267,50 @@ - 60 - 60 + 55 + 55 + + + + Qt::ToolButtonTextUnderIcon + + + true + + + + + + + true + + + + 110 + 80 + + + + + 50 + false + PreferAntialias + + + + false + + + Support + + + + :/icones/icones/help_big.png:/icones/icones/help_big.png + + + + 55 + 55 diff --git a/libutils/src/exception.cpp b/libutils/src/exception.cpp index 7e731343ed..568352c0db 100644 --- a/libutils/src/exception.cpp +++ b/libutils/src/exception.cpp @@ -159,7 +159,7 @@ QString Exception::messages[ERROR_COUNT][2]={ {"ERR_REF_LIN_OBJTAB_INV_INDEX", QT_TR_NOOP("Reference to a row of the objects table with invalid index!")}, {"ERR_OPR_RESERVED_OBJECT", QT_TR_NOOP("The object `%1' (%2) can not be manipulated because it is reserved to PostgreSQL! This object is present in the database model only as a reference!")}, {"ERR_FUNC_CONFIG_INV_OBJECT", QT_TR_NOOP("The new configuration of the function invalidates the object `%1' (%2)! In this case it is needed to undo the relationship between the affected object and function in order to the new configuration to take effect!")}, - {"ERR_SQL_SCOPE_INV_VIEW_REF", QT_TR_NOOP("A view reference must be used in at least one these SQL scopes: View Definition, SELECT-FROM, FROM-WHERE or After WHERE!")}, + {"ERR_SQL_SCOPE_INV_VIEW_REF", QT_TR_NOOP("A view reference should be used in at least one these SQL scopes: View Definition, SELECT, FROM, WHERE or GROUP/HAVING!")}, {"ERR_CONSTR_NO_COLUMNS", QT_TR_NOOP("Constraints like primary key, foreign key or unique must have at least one column related to them! For foreign keys must be selected, in addition, the referenced columns!")}, {"ERR_CONFIG_NOT_LOADED", QT_TR_NOOP("Unable to load the configuration file `%1'! Please check if file exists in its folder and/or if it is not corrupted!")}, {"ERR_DEFAULT_CONFIG_NOT_REST", QT_TR_NOOP("Could not find the default settings file `%1'! To restore default settings check the existence of the file and try again!")}, @@ -251,7 +251,7 @@ QString Exception::messages[ERROR_COUNT][2]={ {"ERR_NULL_PK_COLUMN", QT_TR_NOOP("The column `%1' must be `NOT NULL' because it composes the primary key of the table `%2'. You need to remove the column from the mentioned contraint in order to disable the `NOT NULL' on it!")}, {"ERR_ASG_INV_IDENTITY_COLUMN", QT_TR_NOOP("The identity column `%1' has an invalid data type! The data type must be `smallint', `integer' or `bigint'.")}, {"ERR_REF_INV_AFFECTED_CMD", QT_TR_NOOP("Reference to an invalid affected command in policy `%1'!")}, - {"ERR_REF_INV_SPECIAL_ROLE", QT_TR_NOOP("Reference to an invalid special role in policy `%1'!")}, + {"ERR_REF_INV_SPECIAL_ROLE", QT_TR_NOOP("Reference to an invalid special role in policy `%1'!")} }; Exception::Exception(void) diff --git a/libutils/src/globalattributes.cpp b/libutils/src/globalattributes.cpp index 7410b5116f..725e98a433 100644 --- a/libutils/src/globalattributes.cpp +++ b/libutils/src/globalattributes.cpp @@ -25,7 +25,7 @@ namespace GlobalAttributes { PGMODELER_APP_NAME=QString("pgmodeler"), PGMODELER_URI=QString("pgmodeler.io"), PGMODELER_REVERSE_URI=QString("io.pgmodeler"), - PGMODELER_VERSION=QString("0.9.1"), + PGMODELER_VERSION=QString("0.9.2-alpha"), PGMODELER_BUILD_NUMBER=QString(BUILDNUM), PGMODELER_SITE=QString("https://pgmodeler.io"), PGMODELER_SUPPORT=QString("https://github.com/pgmodeler/pgmodeler/issues"), @@ -141,7 +141,7 @@ namespace GlobalAttributes { #ifdef DEMO_VERSION //Maximum object creation counter for demo version - const unsigned MAX_OBJECT_COUNT=9; + const unsigned MAX_OBJECT_COUNT=15; #endif diff --git a/linuxdeploy.sh b/linuxdeploy.sh index 045c9c975c..b984b7c9d7 100755 --- a/linuxdeploy.sh +++ b/linuxdeploy.sh @@ -4,24 +4,27 @@ case `uname -m` in "x86_64") ARCH="linux64" - FALLBACK_QT_ROOT=/opt/qt-5.9.3/5.9.3/gcc_64 + FALLBACK_QT_ROOT=/opt/qt-5.9.6/5.9.6/gcc_64 FALLBACK_QMAKE_ROOT="$FALLBACK_QT_ROOT/bin" ;; - - *) + + *) ARCH="linux32" FALLBACK_QT_ROOT=/opt/qt-5.6.2/5.6/gcc FALLBACK_QMAKE_ROOT="$FALLBACK_QT_ROOT/bin" ;; esac -# Uncomment this line if your system doesn't have LLVM (clang) compiler tools -#QMAKE_ARGS="-r -spec linux-g++" -QMAKE_ARGS="-r -spec linux-clang" +# Uncomment this line if you want to compile using LLVM (clang) compiler tools +# QMAKE_ARGS="-r -spec linux-clang" + +# Comment this one if you've decided to use LLVM +QMAKE_ARGS="-r -spec linux-g++" + QMAKE_ROOT=/usr/bin QMAKE_CMD=qmake LOG="$PWD/linuxdeploy.log" -QT_IFW_ROOT=/opt/qt-ifw-1.5.0 +QT_IFW_ROOT=/opt/qt-ifw-3.0.4 STARTUP_SCRIPT="start-pgmodeler.sh" MIME_UPDATE_SCRIPT="dbm-mime-type.sh" diff --git a/main-cli/src/main.cpp b/main-cli/src/main.cpp index 979f0f809e..ba1d6185ba 100644 --- a/main-cli/src/main.cpp +++ b/main-cli/src/main.cpp @@ -26,8 +26,8 @@ int main(int argc, char **argv) #ifdef DEMO_VERSION out << endl; out << QString("pgModeler ") << GlobalAttributes::PGMODELER_VERSION << QT_TR_NOOP(" command line interface.") << endl; - out << QT_TR_NOOP("PostgreSQL Database Modeler Project - pgmodeler.com.br") << endl; - out << QT_TR_NOOP("Copyright 2006-2015 Raphael A. Silva ") << endl; + out << QT_TR_NOOP("PostgreSQL Database Modeler Project - pgmodeler.io") << endl; + out << QT_TR_NOOP("Copyright 2006-2018 Raphael A. Silva ") << endl; out << QT_TR_NOOP("\n** CLI disabled in demonstration version! **") << endl << endl; #else try diff --git a/main-cli/src/pgmodelercli.cpp b/main-cli/src/pgmodelercli.cpp index c21c60a513..9b22b109ff 100644 --- a/main-cli/src/pgmodelercli.cpp +++ b/main-cli/src/pgmodelercli.cpp @@ -366,50 +366,50 @@ bool PgModelerCLI::isOptionRecognized(QString &op, bool &accepts_val) void PgModelerCLI::showMenu(void) { out << endl; - out << trUtf8("Usage: pgmodeler-cli [OPTIONS]") << endl; out << QString("pgModeler ") << GlobalAttributes::PGMODELER_VERSION << trUtf8(" command line interface.") << endl; out << trUtf8("PostgreSQL Database Modeler Project - pgmodeler.io") << endl; out << trUtf8("Copyright 2006-2018 Raphael A. Silva ") << endl; out << endl; - out << trUtf8("This CLI tool provides several operations over models and databases without the need to perform them\non pgModeler's graphical interface. All available options are described below.") << endl; + out << trUtf8("Usage: pgmodeler-cli [OPTIONS]") << endl << endl; + out << trUtf8("This CLI tool provides several operations over models and databases without the need to perform them\nin pgModeler's graphical interface. All available options are described below.") << endl; out << endl; out << trUtf8("General options: ") << endl; - out << trUtf8(" %1, %2 [FILE]\t\t Input model file (.dbm). This is mandatory in fix, export operations.").arg(short_opts[INPUT]).arg(INPUT) << endl; - out << trUtf8(" %1, %2 [DBNAME]\t Input database name. This is mandatory import operation.").arg(short_opts[INPUT_DB]).arg(INPUT_DB) << endl; - out << trUtf8(" %1, %2 [FILE]\t\t Output file. Mandatory use in fixing model or exporting to file, png or svg.").arg(short_opts[OUTPUT]).arg(OUTPUT) << endl; + out << trUtf8(" %1, %2 [FILE]\t\t Input model file (.dbm). This is mandatory for fix, export operations.").arg(short_opts[INPUT]).arg(INPUT) << endl; + out << trUtf8(" %1, %2 [DBNAME]\t Input database name. This is mandatory for import operation.").arg(short_opts[INPUT_DB]).arg(INPUT_DB) << endl; + out << trUtf8(" %1, %2 [FILE]\t\t Output file. This is mandatory for fixing model or exporting to file, png or svg.").arg(short_opts[OUTPUT]).arg(OUTPUT) << endl; out << trUtf8(" %1, %2\t\t Try to fix the structure of the input model file in order to make it loadable again.").arg(short_opts[FIX_MODEL]).arg(FIX_MODEL) << endl; - out << trUtf8(" %1, %2 [NUMBER]\t Model fix tries. When reaching the maximum count the invalid objects will be discard.").arg(short_opts[FIX_TRIES]).arg(FIX_TRIES) << endl; + out << trUtf8(" %1, %2 [NUMBER]\t Model fix tries. When reaching the maximum count the invalid objects will be discarded.").arg(short_opts[FIX_TRIES]).arg(FIX_TRIES) << endl; out << trUtf8(" %1, %2\t\t Export the input model to a sql script file.").arg(short_opts[EXPORT_TO_FILE]).arg(EXPORT_TO_FILE)<< endl; out << trUtf8(" %1, %2\t\t Export the input model to a png image.").arg(short_opts[EXPORT_TO_PNG]).arg(EXPORT_TO_PNG) << endl; out << trUtf8(" %1, %2\t\t Export the input model to a svg file.").arg(short_opts[EXPORT_TO_SVG]).arg(EXPORT_TO_SVG) << endl; out << trUtf8(" %1, %2\t\t Export the input model directly to a PostgreSQL server.").arg(short_opts[EXPORT_TO_DBMS]).arg(EXPORT_TO_DBMS) << endl; out << trUtf8(" %1, %2\t\t Import a database to an output file.").arg(short_opts[IMPORT_DB]).arg(IMPORT_DB) << endl; - out << trUtf8(" %1, %2\t\t\t Compares a model and database or two databases generating a SQL script to synch the latter in relation to the first.").arg(short_opts[DIFF]).arg(DIFF) << endl; + out << trUtf8(" %1, %2\t\t\t Compares a model and a database or two databases generating the SQL script to synch the latter in relation to the first.").arg(short_opts[DIFF]).arg(DIFF) << endl; out << trUtf8(" %1, %2\t\t Force the PostgreSQL version of generated SQL code.").arg(short_opts[PGSQL_VER]).arg(PGSQL_VER) << endl; - out << trUtf8(" %1, %2\t\t\t Silent execution. Only critical errors are shown during process.").arg(short_opts[SILENT]).arg(SILENT) << endl; + out << trUtf8(" %1, %2\t\t\t Silent execution. Only critical messages and errors are shown during process.").arg(short_opts[SILENT]).arg(SILENT) << endl; out << trUtf8(" %1, %2\t\t\t Show this help menu.").arg(short_opts[HELP]).arg(HELP) << endl; out << endl; out << trUtf8("Connection options: ") << endl; out << trUtf8(" %1, %2\t\t List available connections in file %3.").arg(short_opts[LIST_CONNS]).arg(LIST_CONNS).arg(GlobalAttributes::CONNECTIONS_CONF + GlobalAttributes::CONFIGURATION_EXT) << endl; out << trUtf8(" %1, %2 [ALIAS]\t Connection configuration alias to be used.").arg(short_opts[CONN_ALIAS]).arg(CONN_ALIAS) << endl; - out << trUtf8(" %1, %2 [HOST]\t\t PostgreSQL host which a task will operate.").arg(short_opts[HOST]).arg(HOST) << endl; + out << trUtf8(" %1, %2 [HOST]\t\t PostgreSQL host in which a task will operate.").arg(short_opts[HOST]).arg(HOST) << endl; out << trUtf8(" %1, %2 [PORT]\t\t PostgreSQL host listening port.").arg(short_opts[PORT]).arg(PORT) << endl; out << trUtf8(" %1, %2 [USER]\t\t PostgreSQL username.").arg(short_opts[USER]).arg(USER) << endl; out << trUtf8(" %1, %2 [PASSWORD]\t PostgreSQL user password.").arg(short_opts[PASSWD]).arg(PASSWD) << endl; out << trUtf8(" %1, %2 [DBNAME]\t Connection's initial database.").arg(short_opts[INITIAL_DB]).arg(INITIAL_DB) << endl; out << endl; out << trUtf8("PNG and SVG export options: ") << endl; - out << trUtf8(" %1, %2\t\t Draws the grid on the exported png image.").arg(short_opts[SHOW_GRID]).arg(SHOW_GRID) << endl; - out << trUtf8(" %1, %2\t Draws the page delimiters on the exported png image.").arg(short_opts[SHOW_DELIMITERS]).arg(SHOW_DELIMITERS) << endl; - out << trUtf8(" %1, %2\t\t Each page will be exported on a separated png image. (Only for PNG)").arg(short_opts[PAGE_BY_PAGE]).arg(PAGE_BY_PAGE) << endl; - out << trUtf8(" %1, %2 [FACTOR]\t\t Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG)").arg(short_opts[ZOOM_FACTOR]).arg(ZOOM_FACTOR).arg(ModelWidget::MINIMUM_ZOOM*100).arg(ModelWidget::MAXIMUM_ZOOM*100) << endl; + out << trUtf8(" %1, %2\t\t Draws the grid in the exported image.").arg(short_opts[SHOW_GRID]).arg(SHOW_GRID) << endl; + out << trUtf8(" %1, %2\t Draws the page delimiters in the exported image.").arg(short_opts[SHOW_DELIMITERS]).arg(SHOW_DELIMITERS) << endl; + out << trUtf8(" %1, %2\t\t Each page will be exported in a separated png image. (Only for PNG images)").arg(short_opts[PAGE_BY_PAGE]).arg(PAGE_BY_PAGE) << endl; + out << trUtf8(" %1, %2 [FACTOR]\t\t Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG images)").arg(short_opts[ZOOM_FACTOR]).arg(ZOOM_FACTOR).arg(ModelWidget::MINIMUM_ZOOM*100).arg(ModelWidget::MAXIMUM_ZOOM*100) << endl; out << endl; out << trUtf8("DBMS export options: ") << endl; - out << trUtf8(" %1, %2\t Ignores errors related to duplicated objects that eventually exists on server side.").arg(short_opts[IGNORE_DUPLICATES]).arg(IGNORE_DUPLICATES) << endl; + out << trUtf8(" %1, %2\t Ignores errors related to duplicated objects that eventually exist in the server.").arg(short_opts[IGNORE_DUPLICATES]).arg(IGNORE_DUPLICATES) << endl; out << trUtf8(" %1, %2 [CODES] Ignores additional errors by their codes. A comma-separated list of alphanumeric codes should be provided.").arg(short_opts[IGNORE_ERROR_CODES]).arg(IGNORE_ERROR_CODES) << endl; out << trUtf8(" %1, %2\t\t Drop the database before execute a export process.").arg(short_opts[DROP_DATABASE]).arg(DROP_DATABASE) << endl; out << trUtf8(" %1, %2\t\t Runs the DROP commands attached to SQL-enabled objects.").arg(short_opts[DROP_OBJECTS]).arg(DROP_OBJECTS) << endl; - out << trUtf8(" %1, %2\t\t Simulates a export process. Actually executes all steps but undoing any modification.").arg(short_opts[SIMULATE]).arg(SIMULATE) << endl; + out << trUtf8(" %1, %2\t\t Simulates an export process by executing all steps but undoing any modification in the end.").arg(short_opts[SIMULATE]).arg(SIMULATE) << endl; out << trUtf8(" %1, %2\t\t Generates temporary names for database, roles and tablespaces when in simulation mode.").arg(short_opts[USE_TMP_NAMES]).arg(USE_TMP_NAMES) << endl; out << endl; out << trUtf8("Database import options: ") << endl; @@ -421,13 +421,13 @@ void PgModelerCLI::showMenu(void) out << trUtf8("Diff options: ") << endl; out << trUtf8(" %1, %2 [DBNAME]\t The database used in the comparison. All the SQL code generated is applied to it.").arg(short_opts[COMPARE_TO]).arg(COMPARE_TO) << endl; out << trUtf8(" %1, %2\t\t Save the generated diff code to output file.").arg(short_opts[SAVE_DIFF]).arg(SAVE_DIFF) << endl; - out << trUtf8(" %1, %2\t\t Apply the generated diff code to the database.").arg(short_opts[APPLY_DIFF]).arg(APPLY_DIFF) << endl; - out << trUtf8(" %1, %2\t Don't preview the generated diff code.").arg(short_opts[NO_DIFF_PREVIEW]).arg(NO_DIFF_PREVIEW) << endl; + out << trUtf8(" %1, %2\t\t Apply the generated diff code on the database server.").arg(short_opts[APPLY_DIFF]).arg(APPLY_DIFF) << endl; + out << trUtf8(" %1, %2\t Don't preview the generated diff code when applying it to the server.").arg(short_opts[NO_DIFF_PREVIEW]).arg(NO_DIFF_PREVIEW) << endl; out << trUtf8(" %1, %2\t Drop cluster level objects like roles and tablespaces.").arg(short_opts[DROP_CLUSTER_OBJS]).arg(DROP_CLUSTER_OBJS) << endl; out << trUtf8(" %1, %2\t\t Revoke permissions already set on the database. New permissions configured in the input model are still applied.").arg(short_opts[REVOKE_PERMISSIONS]).arg(REVOKE_PERMISSIONS) << endl; out << trUtf8(" %1, %2\t\t Drop missing objects. Generates DROP commands for objects that are present in the input model but not in the compared database.").arg(short_opts[DROP_MISSING_OBJS]).arg(DROP_MISSING_OBJS) << endl; out << trUtf8(" %1, %2\t Force the drop of missing columns and constraints. Causes only columns and constraints to be dropped, other missing objects aren't removed.").arg(short_opts[FORCE_DROP_COLS_CONSTRS]).arg(FORCE_DROP_COLS_CONSTRS) << endl; - out << trUtf8(" %1, %2\t\t Rename the destination database. When the databases have different names the destination one has its name changed.").arg(short_opts[RENAME_DB]).arg(RENAME_DB) << endl; + out << trUtf8(" %1, %2\t\t Rename the destination database when the names of the involved databases are different.").arg(short_opts[RENAME_DB]).arg(RENAME_DB) << endl; out << trUtf8(" %1, %2\t\t Don't drop or truncate objects in cascade mode.").arg(short_opts[NO_CASCADE_DROP_TRUNC]).arg(NO_CASCADE_DROP_TRUNC) << endl; out << trUtf8(" %1, %2\t Truncate tables prior to alter columns. Avoids errors related to type casting when the new type of a column isn't compatible to the old one.").arg(short_opts[TRUNC_ON_COLS_TYPE_CHANGE]).arg(TRUNC_ON_COLS_TYPE_CHANGE) << endl; out << trUtf8(" %1, %2\t Don't reuse sequences on serial columns. Drop the old sequence assigned to a serial column and creates a new one.").arg(short_opts[NO_SEQUENCE_REUSE]).arg(NO_SEQUENCE_REUSE) << endl; @@ -1344,6 +1344,15 @@ void PgModelerCLI::diffModelDatabase(void) diff_hlp.setDiffOption(ModelsDiffHelper::OPT_DONT_DROP_MISSING_OBJS, !parsed_opts.count(DROP_MISSING_OBJS)); diff_hlp.setDiffOption(ModelsDiffHelper::OPT_DROP_MISSING_COLS_CONSTR, !parsed_opts.count(FORCE_DROP_COLS_CONSTRS)); + if(!parsed_opts[PGSQL_VER].isEmpty()) + diff_hlp.setPgSQLVersion(parsed_opts[PGSQL_VER]); + else + { + extra_connection.connect(); + diff_hlp.setPgSQLVersion(extra_connection.getPgSQLVersion(true)); + extra_connection.close(); + } + printMessage(trUtf8("Comparing the generated models...")); diff_hlp.diffModels(); @@ -1361,7 +1370,6 @@ void PgModelerCLI::diffModelDatabase(void) if(!output.open(QFile::WriteOnly)) throw Exception(Exception::getErrorMessage(ERR_FILE_DIR_NOT_WRITTEN).arg(parsed_opts[OUTPUT]), ERR_FILE_DIR_NOT_WRITTEN, __PRETTY_FUNCTION__,__FILE__,__LINE__); - output.write(diff_hlp.getDiffDefinition().toUtf8()); output.close(); } @@ -1374,9 +1382,10 @@ void PgModelerCLI::diffModelDatabase(void) QString res, buff, line; QTextStream in(stdin), preview; + buff += "\n** Press ENTER to scroll the preview **\n"; buff += "\n### DIFF PREVIEW ###\n\n"; buff += diff_hlp.getDiffDefinition(); - buff += "\n### END PREVIEW ###\n\n"; + buff += "\n### END OF PREVIEW ###\n\n"; preview.setString(&buff, QIODevice::ReadOnly); @@ -1397,7 +1406,7 @@ void PgModelerCLI::diffModelDatabase(void) } out << endl; - out << trUtf8("** WARNING: you are about to apply the generated SQL code to the server! Data can be lost in the process.") << endl; + out << trUtf8("** WARNING: You are about to apply the generated diff code to the server. Data can be lost in the process!") << endl; do { @@ -1420,8 +1429,8 @@ void PgModelerCLI::diffModelDatabase(void) { printMessage(trUtf8("Applying diff to the database `%1'...").arg(dbname)); export_hlp.setExportToDBMSParams(diff_hlp.getDiffDefinition(), - &extra_connection, - parsed_opts[COMPARE_TO], parsed_opts.count(IGNORE_DUPLICATES)); + &extra_connection, + parsed_opts[COMPARE_TO], parsed_opts.count(IGNORE_DUPLICATES)); if(parsed_opts.count(IGNORE_ERROR_CODES)) export_hlp.setIgnoredErrors(parsed_opts[IGNORE_ERROR_CODES].split(',')); diff --git a/main/src/main.cpp b/main/src/main.cpp index 8c29ccaaa6..357531bbe2 100644 --- a/main/src/main.cpp +++ b/main/src/main.cpp @@ -139,7 +139,7 @@ int main(int argc, char **argv) fmain.loadModels(params); #endif - fmain.showMaximized(); + fmain.show(); splash.finish(&fmain); res=app.exec(); app.closeAllWindows(); diff --git a/pgmodeler.vars b/pgmodeler.vars index 96c558bdfa..51572d259a 100644 --- a/pgmodeler.vars +++ b/pgmodeler.vars @@ -9,20 +9,45 @@ # In both cases above you will need to set the PGMODELER_ROOT variable with # the full path to pgModeler root directory. -# Specify here the full path to Qt framework installation in QT_ROOT -# The path used here must be until the "gcc" directory. For instance, if you have -# Qt 5.1.1 installed on your home directory then the path must be: /home/user/Qt5.1.1/5.1.1/gcc + +# ---[ Custom Qt configuration ]--- +# +# This section specifies some environment vars responsible to find Qt framework installation in your system. +# Make sure to have the command "qtpaths" correctly mapped into your PATH environment variable or use the +# QT_PATHS_BIN variable below to specify the mentioned command. # -# NOTE: Use this configuration only if you have a custom Qt installation other than as defined by +# If you have a custom Qt installation at /opt/qt-5.9.6 for example, the path to the command above should be +# /opt/qt-5.9.6/5.9.6/gcc_64 +# +# NOTE: Use the configuration below only if you have a custom Qt installation other than as defined by # your system or if Qt isn't included/installed by default on your distro. -# export QT_ROOT="/path/to/qt/gcc" -# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$QT_ROOT/lib" -# export PATH=$PATH:"$QT_ROOT/bin" + +# Replace the value of this variable by the full path to "qtpaths" if you have a custom Qt installation +# export QT_PATHS_BIN=qtpaths + +# Qt's main environment variables +# export QT_ROOT="$($QT_PATHS_BIN --install-prefix)" +# export QT_BIN="$($QT_PATHS_BIN --binaries-dir)" +# export QT_PLUGIN_PATH="$($QT_PATHS_BIN --plugin-dir)" + +# Change the "lib64" by "lib" if you're running a 32 bit system +# export QT_LIBS="$QT_ROOT/lib64" + +# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$QT_LIBS" +# export PATH=$PATH:"$QT_BIN" +# --- [ End custom configuration ] --- + +# Resolve absolute path to this file +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + PGMODELER_ROOT="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done # Specify here the full path to the pgmodeler's root directory -# export PGMODELER_ROOT="/path/to/pgmodeler" -export PGMODELER_ROOT="$(dirname "$(readlink -f "$0")")" +export PGMODELER_ROOT="$( cd -P "$( dirname "$SOURCE" )" && pwd )" export PGMODELER_TMPL_CONF_DIR="$PGMODELER_ROOT/conf" export PGMODELER_SCHEMAS_DIR="$PGMODELER_ROOT/schemas" diff --git a/schemas/alter/column.sch b/schemas/alter/column.sch index 445b085986..5b74ea6cc7 100644 --- a/schemas/alter/column.sch +++ b/schemas/alter/column.sch @@ -44,6 +44,48 @@ {ddl-end} %end + %if {cur-identity-type} %and {min-value} %then + {alter-table} + [ SET GENERATED ] {cur-identity-type} [ SET MINVALUE ] {min-value} + {ddl-end} + %end + + %if {cur-identity-type} %and {max-value} %then + {alter-table} + [ SET GENERATED ] {cur-identity-type} [ SET MAXVALUE ] {max-value} + {ddl-end} + %end + + %if {cur-identity-type} %and {start} %then + {alter-table} + [ SET GENERATED ] {cur-identity-type} [ SET START WITH ] {start} + {ddl-end} + %end + + %if {cur-identity-type} %and {cache} %then + {alter-table} + [ SET GENERATED ] {cur-identity-type} [ SET CACHE ] {cache} + {ddl-end} + %end + + %if {cur-identity-type} %and {increment} %then + {alter-table} + [ SET GENERATED ] {cur-identity-type} [ SET INCREMENT ] {increment} + {ddl-end} + %end + + %if {cur-identity-type} %and {cycle} %then + + {alter-table} + [ SET GENERATED ] {cur-identity-type} [ SET] + + %if ({cycle}=="false") %then [ NO] %end + + [ CYCLE] + + {ddl-end} + %end + %if {identity-type} %or {new-identity-type} %then {alter-table} diff --git a/schemas/alter/truncate.sch b/schemas/alter/truncate.sch index f7b26cbb44..39a822b513 100644 --- a/schemas/alter/truncate.sch +++ b/schemas/alter/truncate.sch @@ -5,9 +5,14 @@ [TRUNCATE ] {sql-object} $sp {signature} +%if {restart-seq} %then + [ RESTART IDENTITY ] +%end + %if {cascade} %then - [ CASCADE] - %end - ; + [ CASCADE] +%end + +; $br [-- ddl-end --] $br diff --git a/schemas/catalog/policy.sch b/schemas/catalog/policy.sch index 5ef4071ac4..43f7934c9a 100644 --- a/schemas/catalog/policy.sch +++ b/schemas/catalog/policy.sch @@ -15,12 +15,15 @@ %if {table} %then [ AND tb.relkind='r' AND tb.relname=] '{table}' %end + + %if {last-sys-oid} %or {not-ext-object} %then + [ AND ] + %end - [ AND ] %else [ WHERE ] %end - + %if {last-sys-oid} %then [ pl.oid ] {oid-filter-op} $sp {last-sys-oid} %end diff --git a/schemas/catalog/table.sch b/schemas/catalog/table.sch index aefff00e4a..75f829ab6a 100644 --- a/schemas/catalog/table.sch +++ b/schemas/catalog/table.sch @@ -22,8 +22,8 @@ %else %if {attribs} %then - [SELECT tb.oid, tb.relname AS name, tb.relnamespace AS schema, tb.relowner AS owner, tb.reltuples::int8 AS row_amount, - tb.reltablespace AS tablespace, tb.relacl AS permission, relhasoids AS oids_bool, ] + [SELECT tb.oid, tb.relname AS name, tb.relnamespace AS schema, tb.relowner AS owner, + tb.reltablespace AS tablespace, tb.relacl AS permission, relhasoids AS oids_bool, ] %if ({pgsql-ver} == "9.0") %then [ FALSE AS unlogged_bool, ] @@ -36,43 +36,49 @@ %end %if ({pgsql-ver} =f "10.0") %and {identity-type} %then [ GENERATED ] {identity-type} [ AS IDENTITY ] + + %if {increment} %or {min-value} %or {max-value} %or {start} %or {cache} %or {cycle} %then + [(] + %end + + %if {increment} %then + [ INCREMENT BY ] {increment} + %end + + %if {min-value} %then + [ MINVALUE ] {min-value} + %end + + %if {max-value} %then + [ MAXVALUE ] {max-value} + %end + + %if {start} %then + [ START WITH ] {start} + %end + + %if {cache} %then + [ CACHE ] {cache} + %end + + %if {cycle} %then + [ CYCLE] + %end + + %if {increment} %or {min-value} %or {max-value} %or {start} %or {cache} %or {cycle} %then + [ )] + %end + %else %if {default-value} %then [ DEFAULT ] {default-value} diff --git a/schemas/sql/dbmodel.sch b/schemas/sql/dbmodel.sch index 722d21f128..4642eecdb9 100644 --- a/schemas/sql/dbmodel.sch +++ b/schemas/sql/dbmodel.sch @@ -25,14 +25,14 @@ $br $br %if {role} %then {role} %end %if {tablespace} %then - [-- Tablespaces creation must be done outside an multicommand file.] $br - [-- These commands were put in this file only for convenience.] $br + [-- Tablespaces creation must be done outside a multicommand file.] $br + [-- These commands were put in this file only as a convenience.] $br {tablespace} $br %end $br - [-- Database creation must be done outside an multicommand file.] $br - [-- These commands were put in this file only for convenience.] $br + [-- Database creation must be done outside a multicommand file.] $br + [-- These commands were put in this file only as a convenience.] $br {database} $br %end diff --git a/schemas/sql/table.sch b/schemas/sql/table.sch index dcbdfd89c4..fe953bf77f 100644 --- a/schemas/sql/table.sch +++ b/schemas/sql/table.sch @@ -33,12 +33,15 @@ %if %not {constr-sql-disabled} %and {constraints} %then [,] $br %end %end + + %if {inh-columns} %then + $br {inh-columns} + %end - %if {inh-columns} %then {inh-columns} %end - - %if {constraints} %then + %if {constraints} %then {constraints} %end + %end $br ) diff --git a/schemas/xml/column.sch b/schemas/xml/column.sch index cbf10ba1b9..780737d903 100644 --- a/schemas/xml/column.sch +++ b/schemas/xml/column.sch @@ -3,6 +3,10 @@ # Code generation can be broken if incorrect changes are made. $tb [ + + + + + + + diff --git a/schemas/xml/dtd/constraint.dtd b/schemas/xml/dtd/constraint.dtd index be1946fbdb..55588c535c 100644 --- a/schemas/xml/dtd/constraint.dtd +++ b/schemas/xml/dtd/constraint.dtd @@ -4,6 +4,7 @@ --> + diff --git a/schemas/xml/dtd/index.dtd b/schemas/xml/dtd/index.dtd index f7d02fe9e3..250bdb8d4e 100644 --- a/schemas/xml/dtd/index.dtd +++ b/schemas/xml/dtd/index.dtd @@ -4,6 +4,7 @@ --> + diff --git a/schemas/xml/dtd/metadata.dtd b/schemas/xml/dtd/metadata.dtd index 00e795ab52..7bae17ae26 100644 --- a/schemas/xml/dtd/metadata.dtd +++ b/schemas/xml/dtd/metadata.dtd @@ -40,5 +40,7 @@ + + diff --git a/schemas/xml/dtd/policy.dtd b/schemas/xml/dtd/policy.dtd index bc5c4d06b3..eba99706e2 100644 --- a/schemas/xml/dtd/policy.dtd +++ b/schemas/xml/dtd/policy.dtd @@ -4,6 +4,7 @@ --> + diff --git a/schemas/xml/dtd/relationship.dtd b/schemas/xml/dtd/relationship.dtd index 01baad3ad9..5db5cefc53 100644 --- a/schemas/xml/dtd/relationship.dtd +++ b/schemas/xml/dtd/relationship.dtd @@ -7,6 +7,7 @@ + diff --git a/schemas/xml/dtd/rule.dtd b/schemas/xml/dtd/rule.dtd index a340b78336..0ce3103323 100644 --- a/schemas/xml/dtd/rule.dtd +++ b/schemas/xml/dtd/rule.dtd @@ -4,6 +4,7 @@ --> + diff --git a/schemas/xml/dtd/schema.dtd b/schemas/xml/dtd/schema.dtd index 8e17e3fc82..99cc73d800 100644 --- a/schemas/xml/dtd/schema.dtd +++ b/schemas/xml/dtd/schema.dtd @@ -4,6 +4,7 @@ --> + diff --git a/schemas/xml/dtd/table.dtd b/schemas/xml/dtd/table.dtd index 5e4c9aa922..5e751a70a1 100644 --- a/schemas/xml/dtd/table.dtd +++ b/schemas/xml/dtd/table.dtd @@ -11,6 +11,7 @@ + diff --git a/schemas/xml/dtd/trigger.dtd b/schemas/xml/dtd/trigger.dtd index 22d745cd16..8781a9b2bb 100644 --- a/schemas/xml/dtd/trigger.dtd +++ b/schemas/xml/dtd/trigger.dtd @@ -4,6 +4,7 @@ --> + diff --git a/schemas/xml/dtd/view.dtd b/schemas/xml/dtd/view.dtd index ef084530bd..3bb34066ba 100644 --- a/schemas/xml/dtd/view.dtd +++ b/schemas/xml/dtd/view.dtd @@ -4,6 +4,7 @@ --> + @@ -13,6 +14,7 @@ + diff --git a/schemas/xml/index.sch b/schemas/xml/index.sch index f544636b16..1202f0fb71 100644 --- a/schemas/xml/index.sch +++ b/schemas/xml/index.sch @@ -3,7 +3,11 @@ # Code generation can be broken if incorrect changes are made. [ $br %if {position} %then {position} %end diff --git a/schemas/xml/policy.sch b/schemas/xml/policy.sch index d33cacec7a..10df7afdd0 100644 --- a/schemas/xml/policy.sch +++ b/schemas/xml/policy.sch @@ -2,7 +2,13 @@ # CAUTION: Do not modify this file unless you know what you are doing. # Code generation can be broken if incorrect changes are made. -[ $br %else diff --git a/schemas/xml/sequence.sch b/schemas/xml/sequence.sch index a4d39a5011..f6759115b8 100644 --- a/schemas/xml/sequence.sch +++ b/schemas/xml/sequence.sch @@ -3,26 +3,39 @@ # Code generation can be broken if incorrect changes are made. [ $br diff --git a/schemas/xml/table.sch b/schemas/xml/table.sch index f7d29dddfd..325d351bd3 100644 --- a/schemas/xml/table.sch +++ b/schemas/xml/table.sch @@ -2,6 +2,11 @@ # CAUTION: Do not modify this file unless you know what you are doing. # Code generation can be broken if incorrect changes are made. [
+# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# The complete text of GPLv3 is at LICENSE file on source code root directory. +# Also, you can get the complete GNU General Public License at +*/ + +#include +#include "numberedtexteditor.h" +#include +#include + +class LineNumbersTest: public QObject { + private: + Q_OBJECT + + private slots: + void handleLineSelectionUsingMouse(void); +}; + +void LineNumbersTest::handleLineSelectionUsingMouse(void) +{ + QDialog *dlg=new QDialog; + NumberedTextEditor *edt=new NumberedTextEditor(dlg); + QHBoxLayout *layout=new QHBoxLayout(dlg); + + LineNumbersWidget::setColors(Qt::darkGray, QColor(230,230,230)); + layout->addWidget(edt); + dlg->setMinimumSize(640,220); + + edt->setPlainText("--\n\ +-- PostgreSQL database dump\n\ +--\n\ +-- Dumped from database version 9.4.4\n\ +-- Dumped by pg_dump version 9.4.4\n\ +-- Started on 2015-07-20 19:24:52 WEST\n\ +\n\ +SET statement_timeout = 0;\n\ +SET lock_timeout = 0;\n\ +SET client_encoding = 'UTF8';\n\ +SET standard_conforming_strings = on;\n\ +SET check_function_bodies = false;\n\ +SET client_min_messages = warning;\n\ +--\n\ +-- PostgreSQL database dump\n\ +--\n\ +-- Dumped from database version 9.4.4\n\ +-- Dumped by pg_dump version 9.4.4\n\ +-- Started on 2015-07-20 19:24:52 WEST\n\ +SET statement_timeout = 0;\n\ +SET lock_timeout = 0;\n\ +SET client_encoding = 'UTF8';\n\ +SET standard_conforming_strings = on;\n\ +SET check_function_bodies = false;\n\ +SET client_min_messages = warning;\n\ +-- Dumped from database version 9.4.4\n\ +-- Dumped by pg_dump version 9.4.4\n\ +-- Started on 2015-07-20 19:24:52 WEST\n\ +SET statement_timeout = 0;\n\ +SET lock_timeout = 0;\n\ +SET client_encoding = 'UTF8';\n\ +SET standard_conforming_strings = on;\n\ +SET check_function_bodies = false;\n\ +SET client_min_messages = warning;\n\ +-- Dumped from database version 9.4.4\n\ +-- Dumped by pg_dump version 9.4.4\n\ +-- Started on 2015-07-20 19:24:52 WEST\n\ +SET statement_timeout = 0;\n\ +SET lock_timeout = 0;\n\ +SET client_encoding = 'UTF8';\n\ +SET standard_conforming_strings = on;\n\ +SET check_function_bodies = false;\n\ +SET client_min_messages = warning;"); + + dlg->exec(); +} + +QTEST_MAIN(LineNumbersTest) +#include "linenumberstest.moc" diff --git a/tests/src/linenumberstest/linenumberstest.pro b/tests/src/linenumberstest/linenumberstest.pro new file mode 100644 index 0000000000..728f7a5aa1 --- /dev/null +++ b/tests/src/linenumberstest/linenumberstest.pro @@ -0,0 +1,3 @@ +include(../../tests.pri) +SOURCES += linenumberstest.cpp + diff --git a/tests/tests.pro b/tests/tests.pro index 6e60d5c27b..b8020f0218 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -8,9 +8,10 @@ # refactored code, containing almost all changes done by the refactoring author. TEMPLATE = subdirs SUBDIRS = src/main \ - src/baseobjecttest \ - src/roletest \ - src/syntaxhighlightertest \ - src/databasemodeltest \ - src/schemaparsertest +src/baseobjecttest \ +src/roletest \ +src/syntaxhighlightertest \ +src/databasemodeltest \ +src/schemaparsertest \ +src/linenumberstest \