diff --git a/CHANGELOG.md b/CHANGELOG.md
index 29cbe3281..005b7d7ba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,185 @@
Change Log
---------
+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
+
+* [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 missing SQL keywords into sql-highlight.conf
+* [New] Added support to multi line comments in UI.
+* [New] Added code snippets for CREATE and ALTER policy.
+* [New] Added full support to row level security (RLS), including export, import and diff of this kind of object.
+* [New] Added the method DatabaseExplorerWidget::formatPolicyAttribs in order to display some attributes values correctly.
+* [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 the ability to generate diff code to Enable/Force RLS attribute of tables.
+* [New] Added support to RLS on tables.
+* [New] Added the support to detect identity columns in diff.
+* [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] The filter widget is now toggled in DatabaseExplorerWidget via filter menu.
+* [Change] Minor adjustments on forms sizes.
+* [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] Minor improvements on catalog queries for index, trigger, rule, policy, constraint in order to use the comment catalog query.
+* [Change] Removed an uneeded form adjustment code in Table::openEditingForm.
+* [Change] Minor improvements on DatabaseModel::getCreationOrder.
+* [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.
+* [Change] Improved the model loading on macOs in such way to avoid showing the visual objects creation while they are being loaded from file.
+* [Change] Improved the reverse engineering and diff process to accept the new attributes of database object.
+* [Fix] Fixed the query catalog for built-in types to include the types related to domains.
+* [Fix] Fixed the Extension::setSchema method to accept null schemas.
+* [Fix] Fixed the generation of XML code for casts.
+* [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] Minor fix in ObjectDepsRefsWidget to correctly list the indirect references.
+* [Fix] Fixed a bug when dropping Functions in DatabaseExplorerWidget.
+* [Fix] Improved the import of sequences in such way to avoid unsolvable reference breaking.
+* [Fix] Fixed a bug that cause 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 the import of sequences which now assigns owner columns correctly. If the owner column is an identity one the SQL code of the sequence is disabled by default which will not cause confusion in the diff process trying to drop it in some cases.
+* [Fix] Fixed an issue in diff process that was generating a malformed DROP command for extensions.
+* [Fix] Minor fixed in the "Filter by OID" feature in DatabaseExplorerWidget and DatabaseImportForm.
+* [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.
+
+v0.9.1-beta
+------
+Release date: January 26, 2018
+
+* [New] Added support to GROUP BY/HAVING clauses in Views by adding a new kind of reference. Proper changes done in ViewWidget to allow configuring those clauses.
+* [New] Added the method Catalog::isSystemObject(oid) which indicates if the provided OID is related to a system object.
+* [Change] Minor adjustment in the copy/paste operation to generate suffix in the pasted objects only when there're conflics.
+* [Change] Removed the port range limitation in connection configuration dialog.
+* [Change] Updated the default version of Qt and PostgreSQL to, respectively, 5.9.3 and 10.1 in deployment scripts.
+* [Change] Changed the method PgSQLType::getTypeName by adding a bool parameter so the name can be returned with dimension descriptor (when dimension is > 0). Useful for configuring operator's signatures.
+* [Fix] Fixed the drop action for materialized views in database explorer.
+* [Fix] Fixed a crash when importing extension objects.
+* [Fix] Fixed the generation of operator's signature that must consider dimensions of the arguments' types.
+* [Fix] Fixed the bounding rect calculation for relationship instances when one or more labels are hidden.
+* [Fix] Fixed the SVG & PNG export to properly determine the area to be drawn in the destination graphics file.
+* [Fix] Fixed a crash when adding attributes into many-to-many relationships.
+
+v0.9.1-alpha1
+------
+Release date: November 30, 2017
+
+* [New] Added the ability to compare two databases, and not only a model and a database, in diff tool.
+* [New] Added the relationship creation buttons on the object overlay when a single table is selected.
+* [New] Added the "Relationship" action in "New" submenu on table's popup menu so the user can create relationships using the selected table as source. This avoids the need to use blank areas of the canvas to start creating relationships.
+* [New] Improved the data manipulation dialog in such way that when dealing with deletes in tables without PK, tuples with NULL values can be correctly considered.
+* [New] Improved the validations on ResultSet class.
+* [New] Added a method to indicate if a column value is null in ResultSet.
+* [New] Added support to fade in/out objects in object finder in order to highlight the graphical objects retrieved from the search.
+* [New] Added an attribute in pgmodeler.conf to store the current status of the "Fade in" button in object finder widget.
+* [Change] Minor improvement in the diff generated metadata.
+* [Change] Increased the maximum allowed amount of lines in command history.
+* [Change] Minor adjustment on diff tool so the connections combo can be correctly updated when the user edit connections from within that form.
+* [Change] Improved the progress info of diff process so it can be more accurate.
+* [Fix] Fixed the way PostgreSQL 10+ version is returned from Connection::getPgSQLVersion.
+* [Fix] Fixed the sequence importing on PostgreSQL 10.
+
+v0.9.1-alpha
+------
+Release date: October 20, 2017
+
+* [New] Added support to crow's foot notation.
+* [New] Added the crow's foot notation switch in RelationshipConfigWidget.
+* [New] Added the grid arrangement in the arrangment menu at MainWindow.
+* [New] Added the schema arrangement (scattered).
+* [New] Added an action to toggle schemas rectangle on ModelWidget.
+* [New] CLI now loads the relationship and general settings to reflect relationship styles in export modes.
+* [New] Added support to connect relatinship on tables' edges when using classical notation.
+* [New] Added support to apostrophes in the middle of object's name.
+* [Change] Removed the controls related to arragement in DatabaseImportForm.
+* [Change] Minor adjustments in tables' spacing in auto arrangement process.
+* [Change] Minor improvement on SQLExecutionWidget and DataManipulationForm in order to make possible to paste csv buffer from SQLExecutionWidget to DataManipulationForm.
+* [Change] Improvements done in the Spanish UI translation.
+* [Change] Changed the position of the zoom info icon in SceneInfoWidget.
+* [Change] Minor adjustments in the pen width of relationship lines and objects borders.
+* [Change] Minor improvement when aligning objects to grid forcing the relationships updating.
+* [Change] Minor arrangement of the connection modes in RelationshipConfigWidget.
+* [Change] Improved the performance of (de)selection of several objects at once in ModelWidget and ObjectsScene.
+* [Change] Removed unused attributes from BezierCurveItem.
+* [Change] Improved the BezierCurveItem class to enable the drawing of inverted curve by inverting its bounding rect.
+* [Change] Improved the import of index objects.
+* [Change] Minor tweak to enable clipboard usage in macOS when copying data in DataManipulationForm.
+* [Fix] Fixed a bug in ObjectsScene that was not emitting signals of deselection correctly.
+* [Fix] Fixed a bug in SQLToolWidget that was not cleaning up the source code pane when all databases were disconnected.
+* [Fix] Fixed a bug that was causing the diff process to try to remove the not null constraint of a primary key.
+* [Fix] Fixed a bug that was causing relationship line to be wrongly constructed in case the tables bounding rects don't intercepted.
+* [Fix] Fixed a bug that was recognizing the creation of a constraint but wasn't generating the SQL in diff process.
+* [Fix] Minor fix in order to avoid the inheritance/dependency descriptor to be rotated to the wrong size when curved lines are being used.
+* [Fix] Fixed the generation of sql comments for database and tablespace.
+* [Fix] Minor fix in example.dbm
+* [Fix] Fixed the configuration of bidirectional fk relationships when crow's foot is enabled.
+* [Fix] Fix a bug in GeneralConfigWidget that was reverting the grid optins everytime the user applyed settings.
+* [Fix] Fixed the genaration of index elements containing expressions.
+* [Fix] Fixed the import of operators and operator classes.
+* [Fix] Fixed the generation of operator signature by removing the length/precision of the types.
+* [Fix] Minor fix in CSVLoadWidget::loadCsvFromBuffer in order to preserve the line breaks avoiding the creation of unecessary lines.
+* [Fix] Fixed the import of exclude constraint.
+* [Fix] Fixed the import of timestamp(0) type.
+
v0.9.0
------
Release date: September 1st, 2017
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index b69365c02..f77074d8b 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -1,31 +1,49 @@
-v0.9.0
+v0.9.1
------
-Release date: September 1st, 2017
-Changes since: v0.9.0-beta2
-
-Summary: after one year and three months of hard work we finally have the stable release 0.9.0. This version does not bring extraordinary changes or improvements compared to the alphas and betas but it closes one more development cycle delivering an even more refined product to our users. In order to give an idea on how pgModeler have changed since last year if we place togheter all change logs from the beggining of 0.9.0 development we would have: 175 log entries being 51 new features, 58 changes/improvements, 68 bug fixes. These numbers only indicates how the project is being constantly enhanced through the years.
-
-About some of the new features, pgModeler now supports curved relationship lines in order to improve the model's visualization. By default, for new installations, this option comes activated but it can be toggled in the general settings. Another feature requested long ago and now is available is the ability to choose the UI language instead of rely only in the OS default language. One more enhacement is the possibility of copying and pasting text from one data manipulation dialog to another. This comes to be handy mainly when the user needs to copy data between tables when they reside in different databases.
-
-Finally, small fixes and changes have been implemented as you can see below. The complete change history is in the file CHANGELOG.md.
-
-* [New] Added the ability to paste text from clipboard to data grid in DataManipulationForm.
-* [New] Added a new sample model donated by the maintainers of 3D City DB project.
-* [New] Added the language "internal" to the set of system languages available when creating a new model.
-* [New] Added support to override the default language settings via GeneralConfigWidget.
-* [New] Added support to toggle curved relationship lines in GeneralConfigWidget.
-* [Change] Improved the MetadataHandlingForm enabling user to only extract metada to a backup file.
-* [Change] Minor adjustments in the graphical points when relationships are selected.
-* [Change] Changed the default action to reset label's position from middle button click to Alt + Ctrl + left click.
-* [Change] Minor enhancement in auto arrange feature to avoid breaking lines when curved relationship lines are enabled.
-* [Change] Minor adjustment in the methods which automatically resize dialogs depending on the resolution.
-* [Change] Changed the default font for objects and source code.
-* [Fix] Fixed the catalog query for event triggers.
-* [Fix] Fixed the icons and labels of the "Select all" submenu in ModelWidget.
-* [Fix] Fixed a rare crash when configuring self relationships.
-* [Fix] Minor fix when rendering self n:n relationships.
-* [Fix] Minor fix in the HintTextWidget to resize more properly according to the held text.
-* [Fix] Minor fix in default confs for source code font style.
-* [Fix] Fixed the generation of objects style configuration file that was missing constraints settings.
-* [Fix] Fixed a bug in the index / exclude constraint import which was not creating expressions of these objects correctly and sometimes trucating them.
+Release date: May 14, 2018
+Changes since: v0.9.1-beta1
+
+Summary: after eight months of hard work we finally have the stable release 0.9.1. This version is a mark in the pgModeler's development and so important as the release 0.8.2 in terms of improvements because it brought features requested long ago and that will make pgModeler even better to work with, being some of them: crow's foot notation support, multiple relationships for the same table pair, support to row level security, identity columns and much more.
+
+For this release specifically (considering only the work after 0.9.1-beta1), the golden rule was to fix bugs, adjust the current features and introduce few new things and thus was done: 21 bug fixes, 14 changes/improvements and 7 new features.
+
+The majority of new features are related to the CLI which received the ability to import and diff databases which can make it even better to integrate to automtated deployment processess or run quick tasks over models or databases without the need to open pgModeler's GUI.
+
+Some important improvements were done in the overall performance of the SQL tool. The query execution and results display are a lot better now being quicker and less eager in terms of memory consumption avoiding crashes when querying large tables. The data manipulation also received a patch that makes the row duplication more efficient.
+
+Now, for the fixes, another patch was introduced in order to resize correctly dialogs in HiDPI/Retina displays. Several reverse engineering bugs were fixes and now databases are imported more precisely compared to previous releases. Lastly, a bug that seems to happen only on macOS while dealing with large models is finally fixed and was related to some running threads messing around with the main process avoiding it to correctly save the model and causing hang ups sometimes.
+
+The whole set of changes of this release (considering the alpha and beta stages) has 152 entries being 43 new features, 47 changes/improvements and 62 bug fixes. Below we highlight some of news for the work since 0.9.1-beta1, for the complete list of changes, please, take a look into the CHANGELOG.md.
+
+* [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 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] Refactored all the CLI options.
+* [Change] Improved the performance of the row duplication action in DataManipulationForm.
+* [Change] Improved the performance of "Move to schema" operation.
+* [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 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] Fix window scaling on HiDPI/Retina screens.
+* [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] 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] Fixed the saving process for large models by stopping the threads related to temp models saving while the model file is being written.
diff --git a/conf/defaults/example.dbm b/conf/defaults/example.dbm
index b6a7c933f..38f936f7c 100644
--- a/conf/defaults/example.dbm
+++ b/conf/defaults/example.dbm
@@ -3,7 +3,7 @@
CAUTION: Do not modify this file unless you know what you are doing.
Unexpected results may occur if the code is changed deliberately.
-->
-
+
@@ -36,7 +36,7 @@ CAUTION: Do not modify this file unless you know what you are doing.
-
+
@@ -65,9 +65,9 @@ CAUTION: Do not modify this file unless you know what you are doing.
-
+
-
+
@@ -159,7 +159,7 @@ CAUTION: Do not modify this file unless you know what you are doing.
-
+
diff --git a/conf/defaults/pgmodeler.conf b/conf/defaults/pgmodeler.conf
index 24dc553cf..38405c783 100644
--- a/conf/defaults/pgmodeler.conf
+++ b/conf/defaults/pgmodeler.conf
@@ -39,7 +39,7 @@
history-max-length="1000"
use-curved-lines="true"/>
-
+
diff --git a/conf/defaults/snippets.conf b/conf/defaults/snippets.conf
index bf3e252fd..b53b039f9 100644
--- a/conf/defaults/snippets.conf
+++ b/conf/defaults/snippets.conf
@@ -298,6 +298,22 @@ $br
+
+
+
+
+
+
+
+
@@ -857,5 +873,5 @@ $br
[FROM ] $ob $sp {role} [ | PUBLIC ] $cb $sp $br
$ob [ CASCADE | RESTRICT ] $cb
$br]]>
-
+
diff --git a/conf/defaults/sql-highlight.conf b/conf/defaults/sql-highlight.conf
index 5b321ed82..b02abf031 100644
--- a/conf/defaults/sql-highlight.conf
+++ b/conf/defaults/sql-highlight.conf
@@ -20,7 +20,8 @@
-
+
+
@@ -54,10 +55,17 @@
-
-
+
+
+
+
+
+
+
@@ -112,6 +121,7 @@
+
@@ -186,10 +196,12 @@
+
+
@@ -219,7 +231,9 @@
+
+
@@ -229,6 +243,7 @@
+
@@ -274,6 +289,8 @@
+
+
diff --git a/conf/dtd/pgmodeler.dtd b/conf/dtd/pgmodeler.dtd
index 4e6a070b7..51768e16d 100644
--- a/conf/dtd/pgmodeler.dtd
+++ b/conf/dtd/pgmodeler.dtd
@@ -61,7 +61,8 @@
-
+
+
diff --git a/conf/dtd/relationships.dtd b/conf/dtd/relationships.dtd
index 0fed4fb17..08590b5eb 100644
--- a/conf/dtd/relationships.dtd
+++ b/conf/dtd/relationships.dtd
@@ -5,7 +5,7 @@
-
+
diff --git a/conf/dtd/snippets.dtd b/conf/dtd/snippets.dtd
index d4af0195d..56ec1c01a 100644
--- a/conf/dtd/snippets.dtd
+++ b/conf/dtd/snippets.dtd
@@ -13,5 +13,5 @@
+ extension|eventtrigger|general|policy) "general">
diff --git a/conf/example.dbm b/conf/example.dbm
index b6a7c933f..38f936f7c 100644
--- a/conf/example.dbm
+++ b/conf/example.dbm
@@ -3,7 +3,7 @@
CAUTION: Do not modify this file unless you know what you are doing.
Unexpected results may occur if the code is changed deliberately.
-->
-
+
@@ -36,7 +36,7 @@ CAUTION: Do not modify this file unless you know what you are doing.
-
+
@@ -65,9 +65,9 @@ CAUTION: Do not modify this file unless you know what you are doing.
-
+
-
+
@@ -159,7 +159,7 @@ CAUTION: Do not modify this file unless you know what you are doing.
-
+
diff --git a/conf/pgmodeler.conf b/conf/pgmodeler.conf
index 24dc553cf..38405c783 100644
--- a/conf/pgmodeler.conf
+++ b/conf/pgmodeler.conf
@@ -39,7 +39,7 @@
history-max-length="1000"
use-curved-lines="true"/>
-
+
diff --git a/conf/schemas/widget.sch b/conf/schemas/widget.sch
index 05c20f90a..95626c56f 100644
--- a/conf/schemas/widget.sch
+++ b/conf/schemas/widget.sch
@@ -13,7 +13,8 @@ $tb [
+
+
+
+
+
+
+
+
@@ -857,5 +873,5 @@ $br
[FROM ] $ob $sp {role} [ | PUBLIC ] $cb $sp $br
$ob [ CASCADE | RESTRICT ] $cb
$br]]>
-
+
diff --git a/conf/sql-highlight.conf b/conf/sql-highlight.conf
index 5b321ed82..b02abf031 100644
--- a/conf/sql-highlight.conf
+++ b/conf/sql-highlight.conf
@@ -20,7 +20,8 @@
-
+
+
@@ -54,10 +55,17 @@
-
-
+
+
+
+
+
+
+
@@ -112,6 +121,7 @@
+
@@ -186,10 +196,12 @@
+
+
@@ -219,7 +231,9 @@
+
+
@@ -229,6 +243,7 @@
+
@@ -274,6 +289,8 @@
+
+
diff --git a/conf/ui-style.conf b/conf/ui-style.conf
index 0320e1a21..cc481818e 100644
--- a/conf/ui-style.conf
+++ b/conf/ui-style.conf
@@ -34,12 +34,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,
@@ -436,23 +438,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 +458,6 @@ HintTextWidget > QWidget
HintTextWidget > QWidget > QLabel
{
color: #0000c0;
- /*font-size: 8pt;*/
}
QTabWidget#databases_tbw > QTabBar::close-button {
diff --git a/crashhandler/src/crashhandlerform.cpp b/crashhandler/src/crashhandlerform.cpp
index aaec14623..64452c5fa 100644
--- a/crashhandler/src/crashhandlerform.cpp
+++ b/crashhandler/src/crashhandlerform.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/crashhandler/src/crashhandlerform.h b/crashhandler/src/crashhandlerform.h
index 5d823a9b0..c30f91379 100644
--- a/crashhandler/src/crashhandlerform.h
+++ b/crashhandler/src/crashhandlerform.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/crashhandler/src/main.cpp b/crashhandler/src/main.cpp
index fd27b7aa5..902b7ca63 100644
--- a/crashhandler/src/main.cpp
+++ b/crashhandler/src/main.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/lang/es_ES.qm b/lang/es_ES.qm
index e7f34c9a5..15fab2a28 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 862eacfb2..2ea09f6e3 100644
--- a/lang/es_ES.ts
+++ b/lang/es_ES.ts
@@ -6,7 +6,7 @@
- Acerca del pgModeler
+ Acerca de pgModeler
@@ -16,26 +16,18 @@
- Abrir herramienta de modelado de datos de origen diseñado para PostgreSQL. No más comandos DDL escritas a mano, permiten 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 una extensión de los estándares SQL.
+ 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.Diseño, configurar, implementar
-
-
- <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 es orgullosamente un programa brasileño!
-
-
- <html><head/><body><p>Copyright 2006-2015 - Raphael Araújo e Silva <<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>></p></body></html>
-
@@ -44,7 +36,7 @@
- <html><head/><body><p>Copyright 2006-2015 - Raphael Araújo e Silva <<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>></p></body></html> {2006-2016 ?} {0057a?}
+ <html><head/><body><p>Copyright 2006-2015 - Raphael Araújo e Silva <<a href="mailto:raphael@pgmodeler.com.br"><span style=" text-decoration: underline; color:#0057ae;">raphael@pgmodeler.com.br</span></a>></p></body></html>
@@ -62,205 +54,217 @@
0.0.0.0
-
-
- (NOMBRE_CÓDIGO)
-
-
-
+ Contruido:
-
+ (NUM_CONSTRUIDO)
-
+ Licencia
-
+ Colaboradores
-
+
- <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;">here</span></a>. ¿No hay 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;">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
-
+ 2
-
+ 3
-
+ 4
-
+ 5
-
+ 6
-
+ 7
-
+ 8
-
+
+
+ 9
+
+
+
- Nombe
+ Nombre
-
+ País
-
+ Contribución
-
+ Damien Degois
-
-
-
+
+
+ Francia
-
+ Traducción de IU francés y varias mejoras en scripts auxiliares.
-
+ Ji Bin
-
+ China
-
+ Traducción de IU chino y pequeñas correcciones.
-
+ Pierre-Samuel LE STANG
-
-
+
+ Traducción de IU al francés.
-
+ Lisandro Damián Nicanor
-
+ Argentina
-
+ 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
-
+ Rusia
-
+ El trabajo adicional para el empaquetado en la distribuciones de Linux; pgModeler's empaquetador de paquetes en Fedora Linux.
-
+ Mariusz Fik
-
+ Polonia
-
+ Empaquetados hechos a medida primeras ideas. Probador de primera versión del parche de empaquetados personalizados.
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AggregateWidget
-
-
- Formulario
-
@@ -294,7 +298,7 @@
- Tipo de Dados de Entrada
+ Tipo de Datos de Entrada
@@ -302,7 +306,7 @@
Tipo de Dato de Estado
-
+ Una función de agregación que acepta los tipos <em><strong>tipoA</strong></em> y <em><strong>tipoB</strong></em> como entrada y cuyo tipo de estado sea <em><strong>tipo_estado</strong></em>, debe obedecer a la seguintes reglas:<br/><br/> <strong> • Función Final:</strong> <em>void funcao_final(<strong>tipo_estado</strong>)</em><br/> <strong> • Función Transición:</strong> <em><strong>tipo_estado</strong> funcao_transicao(<strong>tipo_estado</strong>, <strong>tipoA</strong>, <strong>tipoB</strong>)</em>
@@ -416,181 +420,191 @@
+
+
+
+
+
+
+
+
+
+ Vista: Nombre de esquema
-
+ Vista: Nombre de vista
-
+ Vista: Cuadro de referéncias
-
+ Vista: Cuadro de atributos extendidos
-
+ Vista: Cuadro de título
-
+ Vista: Tabla / columna alias
-
+ Vista: Columna referenciada
-
+ Vista: Tabla referenciada
-
+ Vista: Descritor de Referencia
-
+ Cuadro de Texto: Cuerpo
-
+ Columna: Nombre de columna
-
+ Columna: Descritor
-
+ Columna: Incluída / Herendado por relación
-
+ Columna: Protegida
-
+ Columna (pk): Nombre de columna
-
+ Columna (fk): Descritor
-
+ Columna (fk): Nombre de columna
-
+ Columna (fk): Descritor
-
+ Columna (uq): Nombre de columna
-
+ Columna (uq): Descritor
-
+ Columna (nn): Nombre de columna
-
+ Columna (nn): Descritor
-
+ Relación: Descritor
-
+ Relación: Texto etiqueta
-
+ Relación: Cuadro etiqueta
-
+ Relación: Texto del atributo
-
+ Relación: Descritor del atributo
-
+ Tag: Nombre
-
+ Tag: Cuerpo
-
+
-
+ Fuente:
-
+ Colores:
-
+ pt
-
+ Subrayar
-
+ Itálico
-
+ Negrito
@@ -598,16 +612,24 @@
Application
-
+
- Excepción desconocido capturada!
+ Excepción desconocida capturada!
-
+ 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'.
+
+ BaseConfigWidget
+
+
+
+ Se guardó una copia de seguridad de la configuración anterior en <strong>%1</strong>!
+
+BaseForm
@@ -632,9 +654,9 @@
&Ok
-
+
-
+ %1 propiedades
@@ -799,6 +821,11 @@
Relación básica
+
+
+
+
+
@@ -811,17 +838,13 @@
BaseObjectView
-
+ SQL offBaseObjectWidget
-
-
- Formulario
-
@@ -845,7 +868,7 @@
- Editar permisos de Objeto's
+ Editar permisos del objeto
@@ -855,7 +878,7 @@
- Este objeto está protegido por lo tanto no hay cambio en la forma se aplicará a la misma.
+
@@ -887,7 +910,7 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
- Dueño:
+ Propietario:
@@ -900,32 +923,25 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
icone
-
- Crear / Editar:
-
-
-
+ Campo requerido. Dejando este vacío elevará errores!
-
+ Valor(es)
-
+ Versión
-
+
-
-
-
-
- El <em style='color: %1'><strong>highlighted</strong></em> campos del formulario están disponibles sólo en las versiones específicas de PostgreSQL. Al generar código SQL para versiones distintas de las especificadas en los campos y apos; información sobre herramientas pgModeler ignorará sus valores.
+ 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.
@@ -936,6 +952,19 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
rel_%1_%2
+
+ BaseTableView
+
+
+
+
+
+
+
+
+ Rels conectados: %1
+
+BugReportForm
@@ -999,10 +1028,6 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
Base de datos del modelo
-
-
- En ninguna ocasión se publicarán los modelos enviados dentro del informe. Ellos están a salvo y sólo se utilizan para fines de depuración.
-
@@ -1036,23 +1061,15 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
CastWidget
-
-
- Formulario
-
-
-
- Implícita
-
-
+ I&mplícito
- Atribuición
+ Asignación
@@ -1072,11 +1089,7 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
-
-
-
-
- Explícito
+ E&xplícito
@@ -1094,62 +1107,32 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
La función que se asignará a una conversión de <em><strong>typeA</strong></em> a <em><strong>typeB</strong></em> debe tener la siguiente firma: <em><strong>typeB</strong> function(<strong>typeA</strong>, integer, boolean)</em>.
-
- CentralWidget
-
-
- Formulario
-
-
-
- Nuevo modelo
-
-
-
- Abrir modelo
-
-
-
- Ejemplo de modoles
-
-
-
- Modelos Recientes
-
-
-
- Última sesión
-
-CodeCompletionWidget
-
-
- Hacer persistente
+
+
+
-
+
- Hace el widget que se puede cerrar solamente por tecla ESC o clic del ratón sobre otros controles.
+ Hace que el widget se puede cerrar solamente por tecla ESC o clic del ratón sobre otros controles.
-
+ Palabra clave SQL
-
+
+ (No se encontraron items.)(No se encontró ninguna.)CollationWidget
-
-
- Formulario
-
@@ -1207,10 +1190,6 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
ColumnWidget
-
-
- Formulario
-
@@ -1219,7 +1198,7 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
-
+ E&xpresión:
@@ -1231,18 +1210,6 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
-
-
- Expresión:
-
-
-
- NOT NULL
-
-
-
- Secuencia:
- ConfigurationForm
@@ -1284,7 +1251,7 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
- Valor por Defecto
+ Valores por Defecto
@@ -1298,6 +1265,16 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
+
+ En algunos casos, restaurar la configuración predeterminada relacionada con él puede resolver el problema. ¿Le gustaría hacer eso?
+
+
+
+
+ Restaurar
+
+
+ Cualquier modificación realizada hasta ahora en la sección actual se perderá! ¿Realmente desea restaurar la configuración predeterminada?
@@ -1305,129 +1282,117 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
ConnectionsConfigWidget
-
- Formulario
-
-
-
+ Contraseña:
-
+
- Alias Conexión:
+ Alias de Conexión:
-
+ BD Conexión:
-
+
- Host/Puerta:
+ Host/Puerto:
-
+
- Usuário:
+ Usuario:
-
+ Timeout:
-
+ Modo SSL:
-
+ Desactivado
-
+ Diff
-
+
- Exportar
+ Exportar
-
+
- Importar
+ Importar
-
+
-
+ Validación
-
+
-
+ Seguridad
-
+ Permitir
-
+ Requerido
-
+ Verificación de AC
-
+ Verificación Completa
-
+
-
+ Servidor Kerberos:
-
+ Certificado Cliente:
-
+ Cert. Revocados:
-
+ Clave Cliente:
-
+ Certificado Root:
-
- Opciones:
-
-
-
- Servidor Kerberus:
-
-
-
+ ~/.postgresql/root.crt
@@ -1437,42 +1402,42 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
Conexiones:
-
+ segundo(s)
-
+ Forzar a GSSAPI
-
+ ~/.postgresql/postgresql.crt
-
+ Añadir
-
+ Actualizar
-
+ Testear
-
+ ~/.postgresql/root.crl
-
+ ~/.postgresql/postgresql.key
@@ -1483,9 +1448,9 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
-
+
-
+ Editar conexiones de base de datos
@@ -1513,29 +1478,29 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
General
-
+
-
+ Otros parámetros:
-
+
-
+ 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.
-
+
-
+ 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 explorar
+ Auto explorar
@@ -1543,58 +1508,44 @@ Esto desactivará el código de todos los objetos secundarios y referenciales.
-
+ Éxito
-
-
-
+ There is a connection being created or edited! Do you want to save it?
-
+ ¡Hay una conexión que se está creando o editando! ¿Desea guardarla?
-
+ Found %1 connection(s)
-
+ Se encontró %1 conexión(es)
-
+ No connections found
-
+ No se encontraron conexiones
-
+ Edit connections
-
-
-
- There is an unsaved connection! Want to save it?
- Existe una conexión no guardado! ¿Quiere guardarla?
+ Editar conexionesConstraintWidget
-
- Form
- Formulario
- Match:
@@ -1677,29 +1628,25 @@ Versión: `%3'
Factor Rellen.:
-
-
+
+ ColumnColumn
-
-
+
+ TypeTipo
-
+ 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.Las columnas que se incluyeron por la relación no se pueden añadir / retirado manualmente de la clave principal. Si se hace este tipo de cambios que pueden elevar los errores. Para crear la clave primaria utilizando columnas incluidas por relación utilizar las siguientes opciones: campo de identificador, atributos & limitaciones ficha o pestaña clave principal en el formulario de la relación.ConversionWidget
-
- Form
- Formulario
- Source Encoding:
@@ -1729,121 +1676,215 @@ Versión: `%3'
CrashHandlerForm
-
+ Crash HandlerAccidente del Handler
-
+ Stack tracePila de traza
-
+ Input:Entrada:
-
+ Load report file for analysisCargando archivos de reporte para el análisis
-
+ Save the attached model file on the filesystemGuarde el archivo de modelo que se adjunta en el sistema de archivos
-
+ pgModeler bug report (*.bug);;All files (*.*)Reporte de Bog del pgModeler (*.bug);;Todos los archivos (*.*)
-
+ Load reportCargando reporte
-
+ Save modelSalvar modelo
-
+ Database model (*.dbm);;All files (*.*)Modelo de Bases de Datos (*.dbm);;Todos los archivo (*.*)
-
+ Crash handlerAccidente del Handler
-
+ Bug report analysis mode activated.Modo de análisis para informar de fallos activada.
-
+ Oops! pgModeler just crashed!¡Huy! pgModeler simplemente cayó!
-
+ 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.
- Pedimos disculpas por lo que pasó! Es claro que un error desagradable causada eso. Rellene el siguiente formulario describiendo sus acciones antes pgModeler cierre inesperadamente. Esto ayudará en la exterminación de insectos y mejorar el software.
+ ¡Pedimos disculpas por lo ocurrido! Es evidente que un error desagradable ha causado eso. Rellene el siguiente formulario para describir sus acciones antes de que pgModeler se cierre inesperadamente. Esto ayudará en la exterminación de errores y mejorará el software.
- CustomSQLWidget
+ CsvLoadWidget
+ Form
- Formulario
+ Formulario
-
- Add custom SQL code
-
+
+ Load CSV
+ Cargar CSV
-
- SQL code
- Código SQL
+
+ CSV File:
+ Archivo CSV:
-
- Puts an SELECT command template at current cursor position.
- Pone un comando SELECT en una plantilla en la posición actual de cursor.
+
+ Select output file
+ Seleccionar archivo de salida
-
- &SELECT
- &SELECT
+
+ ...
+ ...
-
- Puts an INSERT command template at current cursor position.
- Pone un comando INSERT en una plantilla en la posición actual de cursor.
+
+ Separator:
+ Separador:
-
- &INSERT
- &INSERT
+
+ Use the first row as column names in the CSV file. By unchecking this option the first row is used as data.
+
-
- Puts an UPDATE command template at current cursor position.
- Pone un comando UPDATE en una plantilla en la posición actual de cursor.
+
+ Columns in the first row
+
-
- &UPDATE
- &UPDATE
+
+ Load
+ Cargar
-
- Puts an DELETE command template at current cursor position.
- Pone un comando DELETE en una plantilla en la posición actual de cursor.
+
+ Semicolon (;)
+
+
+
+
+ Comma (,)
+
+
+
+
+ Space
+ Espacio
+
+
+
+ Tabulation
+
+
+
+
+ Other
+
+
+
+
+ ;
+
+
+
+
+ Text delimiter:
+
+
+
+
+ "
+
+
+
+
+ Load CSV file
+
+
+
+
+ Comma-separted values (*.csv);;All files (*.*)
+
+
+
+
+ CustomSQLWidget
+
+
+ Add custom SQL code
+
+
+
+
+ SQL code
+ Código SQL
+
+
+
+ Puts an SELECT command template at current cursor position.
+ Pone un comando SELECT en una plantilla en la posición actual de cursor.
+
+
+
+ &SELECT
+ &SELECT
+
+
+
+ Puts an INSERT command template at current cursor position.
+ Pone un comando INSERT en una plantilla en la posición actual de cursor.
+
+
+
+ &INSERT
+ &INSERT
+
+
+
+ Puts an UPDATE command template at current cursor position.
+ Pone un comando UPDATE en una plantilla en la posición actual de cursor.
+
+
+
+ &UPDATE
+ &UPDATE
+
+
+
+ Puts an DELETE command template at current cursor position.
+ Pone un comando DELETE en una plantilla en la posición actual de cursor.
@@ -1889,56 +1930,52 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT
<html><head/><body><p>Utilice comandos personalizados con extrema precaución ya que puede cambiar la semántica de todo el modelo cuando se ejecutan los procesos de validación de SQL o de exportación. Además, dependiendo de la cantidad de comandos, esos procesos pueden tener su rendimiento sensiblemente degrada.</p></body></html>
- Append / Prepend SQL code
- Adjuntar / Prefijar código SQL
-
-
-
+ Type:Tipo:
-
+ Generic INSERTINSERT genérico
-
+ Include serial columnsIncluir columnas serial
-
+ Exclude serial columnsExcluir columnas serial
-
+ Generic SELECTSELECT genérico
-
+ Table SELECTSELECT tabla
-
+ Generic UPDATE
-
+ Table UPDATEUPDATE genérico
-
+ Generic DELETEDELETE genérico
-
+ Table DELETEDELETE tabla
@@ -1956,339 +1993,329 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT
&Cerrar
- Rows returned:
- Filas devueltas:
-
-
- 0
- 0
-
-
- Maximum limit of listed rows
- Límite máximo de filas listadas
-
-
- (Limit: 0)
- (Límite: 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><></strong>. To use <strong><</strong> or <strong>></strong> as part of the value prepend the backslash character, e.g., <strong>\<</strong> or <strong>\></strong>.
- Los Valores vacíos se asumen como <strong>DEFAULT</strong>. Para utilizar los valores especiales como <strong>NULL</strong> una llamada de función como <strong>now()</strong> o un escape de datos específica, encierran valores <strong><></strong>. Usar <strong><</strong> o <strong>></strong> como parte del valor de anteponer el carácter de barra invertida, por ejemplo, <strong>\<</strong> or <strong>\></strong>.
-
-
-
+ Refresh listingRefrescar listado
-
- Refresh
- Refrescar
-
-
-
+ F5F5
-
+ Save changesSalvar cambios
-
- Save
- Salvar
-
-
-
+ Ctrl+SCtrl+S
-
- Copy the selection as CSV buffer
- Copiar la selección como buffer CSV
-
-
-
- Copy
- Copiar
-
-
-
- Ctrl+C
- Ctrl+C
-
-
-
+ Export results to CSV fileExportar resultados a archivo CSV
-
- Export
- Exportar
-
-
-
+
+ Ctrl+XCtrl+X
-
+ Undo modificationsDeshacer modificaciones
-
- Undo
- Deshacer
-
-
-
+ Ctrl+ZCtrl+Z
- Add data
- Añadir datos
-
-
-
- Add
- Añadir
-
-
-
-
+
+ InsIns
-
+ Mark the selected rows to be deletedMarque las filas seleccionadas para ser borradas
-
-
- Delete
- Borrar
-
-
-
-
-
-
-
+
+
+
+
+ DelDel
-
+ Duplicate the selected rows
-
- Duplicate
+
+ Ctrl+D
-
- Ctrl+D
+
+ Add new rows from a CSV file
-
+ Filter the result setFiltrar el conjunto de resultados
-
+ Table:Tabla:
-
+ Schema:Esquema:
-
+ in in
-
+ Hide viewsOcultar vista
-
+ Filter expressionFiltrar expresión
-
+ Order && LimitOrder && Límite
-
+ results (Use <strong>0</strong> for no limit)
-
+ Column:Columna:
-
- 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:
- Límite en:
+
+ Browse referenced tables
+
- 000000
- 000000
+
+ ASC
+ ASC
+
+
+
+ Add empty rows
+
- 100
- 100
+
+ DESC
+ DESC
- results
- resultados
+
+ Limit in:
+ Límite en:
-
+ Add ItemAñadir Item
-
+ Remove ItemEliminar Item
-
+ Clear the order by columns listDesactive el orden de lista columnas
-
+ Move selected item upMover arriba el item seleccionado
-
+ Move selected item downMover abajo el item seleccionado
-
+
+ Copy as CSV
+
+
+
+
+ Copy as text
+
+
+
+
+ Copy items
+
+
+
+
+ Pase items
+
+
+
+
+ Browse tables
+
+
+
+
+ Duplicate row(s)
+
+
+
+
+ Delete row(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>
-
+ <em>(Limit: <strong>%1</strong>)</em><em>(Límite: <strong>%1</strong>)</em>
-
+ none
-
+ No objects foundObjects 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 %1Esta fila se marca para ser %1
-
+ deletedeliminado
-
+ updatedactualizado
-
+ insertedinsertado
-
+ [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?
-
+ deleteeliminar
-
+ updateactualizar
-
+ insertinsertar
@@ -2300,23 +2327,11 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT
FormFormulario
-
- Toggles the display of system
- Cambia la visualización de objects del sistema
-
-
- Sys. objects
- Objectos del Sys
- Toggles the display of extension objectsCambia la visualización de extensión de objetos
-
- Ext. objects
- Ext. objectos
- Data &Grid
@@ -2327,27 +2342,15 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT
Alt+GAlt+G
-
- Open a new SQL execution pane.
- Abrir un nuevo panel de ejecución de SQL.
-
-
-
+
+ ......
-
- Ctrl+F5
- Ctrl+F5
-
-
- Update the objects tree.
- Actualizar el árbol de objetos.
- Toggles the display of system objects.
@@ -2371,7 +2374,7 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT
Open a new SQL execution pane
-
+ Abrir un nuevo panel de ejecución de SQL
@@ -2381,7 +2384,7 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT
Update the objects tree
-
+ Actualizar el árbol de objetos
@@ -2391,936 +2394,1059 @@ Desmarcando esto hará que el SQL que se adjunta al final del mandato CREATE DAT
Drop this database
-
+ Eliminar esta base de datos
-
+ Expands all itemsExpande todos los item
-
+ Collapses all itemsContrae 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 OIDPor OID
-
-
+
+ AttributeAtributo
-
+ ValueValor
-
+ Show raw attributes
- Show raw attributes names
- Mostrar primero nombres de atributos
-
-
-
+ (not found, OID: %1)
-
+ -- Source code not generated! Hit F7 or middle-click the item to load it. --
-
+ Admin. rolesAdmin. roles
-
+ AlignmentAlineación
-
+ Analyze func.Analizar func.
-
+ Arg. countArg. Contar
-
+ Arg. default countArg. contar por defecto
-
+ Arg. defaultsArg. por defecto
-
+ Arg. modesArg. modos
-
+ Arg. namesArg. nombres
-
+ Arg. typesArg. tipos
-
+ Behavior typeTipo de comportamiento
-
+ By valuePor valor
-
+ Cast typeTipo conversión
-
+ CategoryCategoria
-
+ CollatableIntercalable
-
+ CollationIntercalación
-
+ CommentComentario
-
+ Commutator Op.Commutador Op.
-
+ ConfigurationConfiguración
-
+ Conn. limitConn. límite
-
-
+
+ ConstraintRestricción
-
+ Create DBCrear BD
-
+ Create roleCrear rol
-
+ Curr. versionCorr. versión
-
+ DefaultPor defecto
-
+ Default valueValor por defecto
-
+ DefinitionDefinición
-
+ DelimiterDelimitador
-
+ Dest. typeDest. tipo
-
+ DimensionDimensión
-
+ DirectoryDirectorio
-
+ Dest. encodingDest. codificación
-
+ ElementElemento
-
+ EncodingCodificación
-
+ EncryptedEncriptado
-
+ EnumerationsEnumeraciones
-
+ Exec. costCosto ejec
-
+ ExpressionExpresión
-
+ Op. familyOp. familia
-
+ Final func.Final func.
-
+ FunctionFunción
-
+ Func. typeFunc. tipo
-
+ Handler func.Handler func.
-
+ Handles typeHandles tipo
-
+ HashesHashes
-
+ Index typeIndixe tipo
-
+ InheritHeredar
-
+ Ini. conditionIni. condición
-
+ Inline func.En linea func.
-
+ Input func.Entrada func.
-
+ Internal lengthLongitud interna
-
+ Interval typeIntervalo tipo
-
+ I/O castI/O cast
-
+ Join func.Join func.
-
+ LanguageLanguaje
-
+ LC COLLATELC COLLATE
-
+ LC CTYPELC CTYPE
-
+ Leak proofPrueba de fugas
-
+ Left typeTipo izquierda
-
+ LengthLongitud
-
+ LibraryBiblioteca
-
+ Can loginPuede login
-
+ MaterializedMaterializada
-
+ Member rolesRoles miembros
-
+ MergesUnir
-
+ NameNombre
-
+ Negator op.Op negador.
-
+ Not nullNo null
-
+ Object typeTipo object
-
+ OIDOID
-
+ With OIDsCon OIDs
-
+ Old versionVieja version
-
+ OperatorOperador
-
+ Operator func.Operador func.
-
+ Output func.Salida func.
-
+ OwnerDueño
-
+ Owner columnDueño columna
-
+ ParentsPadres
-
+ PasswordContraseña
-
+ PermissionsPermisos
-
+ PrecisionPrecisión
-
+ PreferredPreferido
-
+ Range attributesRango atributos
-
+ Receive func.Recibe func.
-
+ Ref. rolesRef. roles
-
+ ReplicationReplicación
-
+ Restriction func.Restricción func.
-
+ Return typeRetornar tipo
-
+ Returns SETOFRetornar SETOF
-
+ Right typeTipo a la derecha
-
+ Rows amountCantidad filas
-
+ SchemaEsquema
-
+ Security typeTipo de seguridad
-
+ Send func.Envio func.
-
+ Sort op.Op ordenación.
-
+ Source typeTipo de fuentes
-
+ Src. encodingFnt. codificación
-
+ State typeTipo estado
-
+ StorageAlmacenamiento
-
+ SuperuserSuperusuario
-
+ TablespaceTablespace
-
+ Type mod. in func.Tipo mod. entrada func.
-
+ Type mod. out func.Tipo mod. salida func.
-
+ Transition func.Transición func.
-
+ TrustedVerdadero
-
+ TypeTipo
-
+ Type attributeTipo atributos
-
+ TypesTipos
-
+ UnloggedInvitados
-
+ Validator func.Validador func.
-
+ ValidityValidez
-
+ Windows func.Func. ventana.
-
+ falsefalso
-
+ trueverdadero
-
+ Cache valueValor en cache
-
+ CycleCiclo
-
+ IncrementIncremneto
-
+ Max. valueMax. valor
-
+ Min. valueMin valor
-
+ Start valueValor inicial
-
+ Last valuePróximo valor
-
+ SubtypeSubtipo
-
+ Op. classOp. clases
-
+ Canonical func.func. canonica.
-
+ Subtype diff func.Subtipo diff func.
-
+ DeferrableDiferible
-
+ For each rowFor each row
-
+ FiringDisparadores
-
+ On insertOn insert
-
-
+
+ On deleteOn delete
-
-
+
+ On updateOn update
-
+ On truncateOn truncate
-
+ ArgumentsArgumentos
-
+ TableTabla
-
+ Trigger func.func. Trigger.
-
-
-
+
+
+ ColumnsColumnas
-
+ ConditionCondición
-
+ DefermentDiferimiento
-
+ EventEvento
-
+ Execution modeModo Ejecución
-
+ CommandsComandos
-
+ PositionPosición
-
+ Comparison typeTipo comparación
-
+ Ref. columnsRef. columnas
-
+ ExpressionsExpresiones
-
+ Fill factorFactor de relleno
-
+ No inheritNo hereda
-
+ Op. classesOp. clases
-
+ OperatorsOperador
-
+ Ref. tableTabla Ref
-
+ UniqueUnique
-
+ PredicatePredicado
-
+ CollationsIntercalaciones
-
+ InheritedHeredado
-
- Snippets
- Snippets
+
+ 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
+
+
+
+
+ Snippets
+ Snippets
+
+
+ Drop objectDrop object
-
+ Drop cascadeDrop cascade
-
+ TruncateTruncate
-
+ Trunc. cascadeTrunc. cascade
-
+ Show dataMostrar dato
-
+ Reload propertiesRecargar propiedades
-
+ UpdateActualizar
-
+ RenameRenombrar
-
+ Source codeCó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.
-
+ 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). --
- 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?
- ¿De verdad quieres borrar en <strong>cascade</strong> el objecto <strong>%1</strong> <em>(%2)</em>? ¿Esta acción se borra todos los otros objetos que dependen de ella?
+
+
+ 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?
@@ -3377,10 +3503,6 @@ Ref. column(s): %2
Spacing:Espaciado:
-
- Schemas per row
- Esquema por fila
- Spacing between objects
@@ -3391,19 +3513,11 @@ Ref. column(s): %2
Schemas per row:Esquema por fila:
-
- 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.
- Resolver algunas de las dependencias del objeto de consulta del catálogo, cuando no existe un objeto necesario en el conjunto cargado. En algunos casos es necesario combinar esta opción con otros de abajo. Esta opción no se aplica a los objetos de nivel de base de datos como el papel, espacio de tabla y el lenguaje, así como para los tipos de datos y extensiones.
- Automatically resolve dependenciesResolver dependencias automáticamente
-
- Connect and list available databases
- Conectar y listar bases de datos disponibles
-
@@ -3462,10 +3576,6 @@ Ref. column(s): %2
Ignore import errorsIgnorar errores de importación
-
- All catalog queries as well the created objects' source code are printed to standard outupt (stdout).
- Todas las consultas de catálogo, así el código fuente de los objetos creados se imprimen a la salida estándar (stdout).
- All catalog queries as well the created objects' source code are printed to standard output (stdout).
@@ -3542,72 +3652,72 @@ Ref. column(s): %2
Cancelar
-
+ &Import&Importar
-
+ &Close&Cerrar
-
+ <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>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 foundBase 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 table `%1'...
- Recuperando objetos de la tabla `%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.
@@ -3626,62 +3736,62 @@ Ref. column(s): %2
Recuperando objetos... `%1'
-
-
- Creating object `%1' (%2)...
- Creando objecto `%1' (%2)...
+
+ Creating object `%1' (%2), oid `%3'...
+
+
+
+
+ Trying to recreate object `%1' (%2), oid `%3'...
+
-
- Trying to recreate object `%1' (%2)...
- Intentar recrear objeto `%1' (%2)...
+
+ Creating object `%1' (%2)...
+ Creando objecto `%1' (%2)...
-
+ Import failed to recreate some objects in `%1' tries.Importación no pudo recrear algunos objetos en `%1' intento.
-
+ Creating permissions for object `%1' (%2)...Creación permisos por objecto `%1' (%2)...
-
+ Creating columns permissions...Creación permisos de columnas...
-
+ Updating relationships of `%1' (%2)...
-
+ Validating relationships...
-
+ Assigning sequences to columns...
- Update relationships of `%1' (%2)...
- Actualizar relaciones de `%1' (%2)...
-
-
-
+ The database import ended but some errors were generated and saved into the log file `%1'. This file will last until pgModeler quit.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...
@@ -3689,78 +3799,74 @@ 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)
-
+ 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!DatabaseWidget
-
- Form
- Formulario
- Attributes
@@ -3842,10 +3948,6 @@ Ref. column(s): %2
DomainWidget
-
- Form
- Formulario
- Default Value:
@@ -3882,12 +3984,12 @@ Ref. column(s): %2
Donate to pgModeler
-
+ Hacer una donación a pgModelerHide this widget
- Ocultar este widget
+ Ocultar este widget
@@ -3897,12 +3999,12 @@ Ref. column(s): %2
<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 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!
@@ -3913,47 +4015,47 @@ Ref. column(s): %2
Formulario
-
+ Column:Columna:
-
+ Expression:Expresión:
-
+ Collation:Colación:
-
+ Operator Class:Operador de Clases:
-
+ Operator:Operador:
-
+ Sorting:Ordenación:
-
+ AscendingAscendente
-
+ DescendingDescendente
-
+ Nulls firstNulos primeros
@@ -3983,37 +4085,33 @@ Ref. column(s): %2
Nulos Primero
-
+ CollationColación
-
+ OperatorOperador
-
+ ExpressionExpresión
-
+ YesSi
-
+ NoNoEventTriggerWidget
-
- Form
- Formulario
- Event:
@@ -4049,802 +4147,841 @@ Ref. column(s): %2
- Zero length assignment!
- Longitud asignación igual a Cero!
-
-
- Assignment of a precision greater than the length of the type!Asignación de una precisión mayor que la longitud del 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!Asignación de una precisión no válido para el tipo de tiempo, marca de tiempo o intervalo. La precisión en este caso debe ser igual o inferior a 6!
-
+ Assignment of a not allocated column to object `%1' (%2)!Asignación de una columna no asignados a objeto `%1' (%2)!
-
+ Reference to a column which index is out of the capacity of the column list!La referencia a una columna que índice está fuera de la capacidad de la lista de columnas!
-
+ Assignment of not allocated object!Asignación de objeto no asignado!
-
+ Assignment of a not allocated schema to object `%1' (%2)!Asignación de un esquema no asignado al objeto `%1' (%2)!
-
+ The object `%1' (%2) has inconsistent SQL or XML definition!El objeto `%1' (%2) tiene la configuración inconsistente (definición SQL / XML no válido)!
-
+ The object `%1' (%2) already exists on `%3' (%4)!El objeto `%1' (%2) ya existe en `%3' (%4)!
-
+ The object `%1' (%2) cannot be assigned because there is already exists in the container object `%3'!El objeto `%1' (%2) no puede ser asignado porque ya se existe en el objeto contenedor `%3'!
-
+ Assigning object of an invalid type!Asignación de objeto de un tipo no válido!
-
+ Removing an object of an invalid type!Eliminación de un objeto de un tipo no válido!
-
+ Obtaining an object of an invalid type!Obtención de un objeto de un tipo no válido!
-
+ Assignment of empty name to table return type!Asignación de nombre vacío de tipo de tabla de retorno!
-
+ The insertion of the parameter `%1' will not be possible because there is another parameter with same name in the function `%2'!La inserción del parámetro `%1' no será posible porque no hay otro parámetro con el mismo nombre en la función `%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'!La inserción del tipo de tabla de retorno `%1' no será posible porque hay otro tipo de retorno con el mismo nombre en el `%2'!
-
+ Reference to a parameter which index is out of the parameter list bounds!La referencia a un evento que no pertenece a disparar!
-
+ Reference to an event which does not belongs to trigger!La referencia a un evento que no pertenece al trigger!
-
+ The column `%1' cannot be assigned to the trigger `%2' because they belongs to different parent tables!La columna `%1' no puede ser asignada a un Trigger `%2' porque no pertenece a la tabla padre!
-
+ Assignment of a not allocated function to object `%1' (%2)!Asignación de una función no asignada a objeto `%1' (%2)!
-
+ Assignment of a function which return type is different from `%1'!Asignación de una función que tipo de retorno es diferente de `%1'!
-
+ Assignment of a function which parameter count is invalid to the object `%1' (%2)!Asignación de una función que cuente parámetro no es válido para el objeto `%1' (%2)!
-
+ Assignment of a function which language is invalid!Asignación de una función que el lenguaje no es válido!
-
+ Event trigger function must be coded in any language other than SQL!Función de disparo de eventos debe estar codificado en cualquier idioma que no sea SQL!
-
+ Assignment of not allocated table to object `%1' (%2)!Asignación de tabla no asignado a objeto `%1' (%2)!
-
+ Reference to an argument which index is out of argument list bounds!La referencia a un argumento que el índice está fuera de la capacidad de la lista de argumentos!
-
+ Assignment of empty name to an object!Asignación de nombre vacío a un objeto!
-
+ Assignment of a name which contains invalid characters!Asignación de nombre no válido a un objeto!
-
+ Assignment of a name which length exceeds the maximum of 63 characters!Asignación de un nombre cuya longitud supera el máximo de 63 caracteres!
-
+ Assignment of schema object which type is invalid!Asignación de objeto que tipo de esquema no válido!
-
+ Assignment of tablespace object with invalid type!Asignación de objeto de tablespace con tipo no válido!
-
+ Assignment of tablespace to an invalid object!Asignación de tablespace a un objeto no vá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!Asignación de espacio de tabla a una restricción de qué tipo es válido! Para pertenecer a un espacio de tabla la restricción debe ser una clave primaria o único!
-
+ Assignment of owner object which type is invalid!Asignación de objeto que tipo de propietario no es válido!
-
+ Assignment of owner to an invalid object!Asignación de propietario para un objeto no válido!
-
+ Assignment of appended or prepended SQL to an invalid object!Asignación de SQL añadido o preañadido a un objeto no válido!
-
+ Reference to a function with invalid type!La referencia a una función con tipo no válido!
-
+ Reference to an argument of the operator with invalid type!La referencia a un argumento del operador con el tipo no válido!
-
+ Reference to an operator with invalid type!La referencia a un operador con tipo no válido!
-
+ Assignment of value to an invalid option type on role!Asignación de valor a un tipo de opción no válida en el rol!
-
+ Reference to an invalid role type!La referencia a un tipo de rol no válido!
-
+ The insertion of the role `%1' is not possible because this is already being referenced by role `%2'!La inserción del rol `%1' no es posible porque esto ya está siendo referenciado por rol `%2'!
-
+ Reference redundancy detected by having the role `%1' referencing the role `%2'!Referencia redundancia detecta por tener el rol `%1' referencia al rol `%2'!
-
+ The role `%1' can not be listed as a member of itself!El rol `%1' no puede ser listado como un miembro de sí mismo!
-
+ Reference to a role which index is out of role list bounds!La referencia a un rol el índice del cual está fuera de la lista de rol límites!
-
+ Insertion of empty command to the rule!Inserción de comando nulo en la regla!
-
+ Reference to a command which index is out of the command list bounds!La referencia a un comando que el índice está fuera de la capacidad de la lista de comandos!
-
+ Is not possible to create a self generalization/copy relationship! The table can not inherit or copy their own attributes!No es posible crear una relación de auto generalización / dependecy! La tabla no puede heredar o copiar sus propios atributos!
-
+ Assignment of an object that already belongs to another table!Asignación de un objeto que ya pertenece a otra tabla!
-
+ Assignment of a schema to the sequence which differs from the schema of the owner table!Asignación de un esquema de la secuencia que se diferencia del esquema de la tabla dueño!
-
+ Assignment of an invalid value to one of the sequence attributes!Asignación de un valor no válido para uno de los atributos de secuencia!
-
+ Assignment of a minimum value to the sequence which is greater than the maximum value!Asignación de un valor mínimo a la secuencia que es mayor que el valor máximo!
-
+ Assignment of a start value to the sequence which is extrapolating the range defined by minimum and maximum values!Asignación de un valor de inicio a la secuencia que se extrapolando el rango definido por valores mínimo y máximo!
-
+ Assignment of a null increment value to the sequence!Asignación de un valor nulo de incremento a la secuencia!
-
+ Assignment of null cache value to the sequence!Asignación de cache de secuencia con valor nulo!
-
+ Assignment of owner table which is not in the same schema as the sequence `%1'!Asignación de dueño de tabla que no está en el mismo esquema que la secuencia `%1'!
-
+ Assignment of owner table which does not belong to the same owner of the sequence `%1'!Asignación de dueño de tabla que no pertenece al mismo dueño de la secuencia `%1'!
-
+ Assignment of a nonexistent owner column to the sequence `%1'!Asignación de una dueño inexistente a una columna para secuencia `%1'!
-
+ Assignment of an owner column to the sequence `%1' that is not related to any table!Asignación de una dueño a una columna para la secuencia `%1' que no está relacionada a ninguna tabla!
-
+ Reference to a label which index is out of labels list bounds!Referencia a una etiqueta que el índice está fuera de límites de la lista de etiquetas!
-
+ Allocation of object with invalid type!Asignación del objeto con tipo no válido!
-
+ Assignment of a function with invalid return type to object `%1' (%2)!Asignación de función con tipo de retorno inválido a objeto `%1' (%2)!
-
+ Assignment of a function with invalid parameter(s) type(s) to object `%1' (%2)!Asignación de función con tipo de parâmetro(s) inválido(s) a objeto `%1' (%2)!
-
+ Assignment of not allocated language!Asignación de el lenguaje no asignado!
-
+ Assignment of language object which type is invalid!Asignación de objeto de lenguaje que el tipo no es válido!
-
+ Reference to data type with an index outside the capacity of data types list!Referencia al tipo de datos con un índice fuera de la capacidad de la lista actualizada tipos!
-
+ Assignment of a null type to object `%1' (%2)!
-
+ Unable to write the file `%1' due to one or more errors in the definition generation process!
-
+ 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!
-
+
+ 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!
+
+
+
+ Reference to a tuple with an invalid index or the result is empty (no tuples)!
-
+ Invalid use of a view reference as whole SQL definition! The assigned reference must be an 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!
-
+ Reference to a function id which is incompatible with the user define type configuration!
-
+
+ Unsupported PostgreSQL version (%1) detected! Valid versions are between %2 and %3.
+
+
+
+ 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.
+
+
+
+ Assignment of an invalid object to `%1' (%2)! The assigned object must be of 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!
-
+ 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.
-
+ 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'!
- Assignment of a null type to to object `%1' (%2)!
- Asignación de un tipo nulo de oponerse a `%1' (%2)!
+
+ Failed to drop the database `%1' because it is defined as the default database for the connection `%2'!
+
-
+ Assignment of invalid type to the object!Asignación de un tipo inválido a objeto!
-
+ Assignment of an empty directory to object `%1' (%2)!Asignación de un diretório vacio a objeto: `%1' (%2)!
-
+ Obtaining types with invalid quantity!Obtención de tipos con una cantidad no válida!
-
+ Insertion of item which already exists in the attributes list of the type!Inserción de objeto que ya existe en la lista del tipo de atributos!
-
+ Insertion of invalid item in the attributes list of the type!Inserción de item inválido en la lista del tipo de atibutos!
-
+ Insertion of item which already exists in the enumarations list of the type!Inserción de item ya existente en la lista del tipo de enumeraciones!
-
+ Insertion of invalid item in the enumerations list of the type!Inserción de item inválido en laa lista del tipo de enumeraciones!
-
+ Reference to an attribute which index is out of the attributes list bounds!Referencia a un atributo que el índice está fuera de la capacidad de la lista de atributos!
-
+ Reference to an enumeration which index is out of the enumerations list bounds!Referencia a una enumeración con índice fuera de la capacidad de la lista de enumeraciones!
-
+ Assignment of invalid configuration to the type!Asignación de configuración no válida para el tipo!
- The data type `%1' can not be assigned because it already exists in the types list of the aggregate function `%2'!
- El tipo de dato `%1' no puede ser asignado pues el mismo ya existente en la lista de tipos de la función de agregación `%2'!
-
-
-
+ Assignment of an operator which input type count is invalid to aggregate function!Asignación de operador a una función de agregacíon con cantidad de tipos de entrada inválida!
-
+ Assignment of an operator which types of arguments is invalid!Asignación de operador con argumentos de tipos inválidos!
-
+ Assignment of system reserved name to the object `%1' (%2)!Asignación de nombre reservado por el sistema a objeto `%1' (%2)!
-
+ One function with invalid configuration is been used by the object `%1' (%2)!Una función de configuración inválido está siendo usada por el objeto `%1' (%2)!
-
+ Assignment of an invalid strategy/support number to an operator class element!Asignación de un número inválido de estratégia/suporte del elemento de clase de operadores!
-
+ Insertion of element which already exists in the element list!Inserción de elemento ya existente en la lista de elementos!
-
+ Reference to an element which index is out of element list bounds!Referencia a un elemento con índice fuera de límites de la lista de elementos!
-
+ Reference to an object which index is out of object list bounds!La referencia a un objeto que el índice está fuera de límites de la lista de objetos!
-
+ Removal of an object not allocated!Eliminación de un objeto no asignado!
-
+ The object `%1' (%2) can not be removed because it is being referenced by object `%3' (%4)!El objeto `%1' (%2) no puede ser removido pues está siendo referenciado por el 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)!El objeto `%1' (%2) no pode ser removido pues está siendo referenciado por el objeto `%3' (%4) perteneciente a `%5' (%6)!
-
+ Operation with object(s) which type(s) is invalid!Operación con objeto(s) de tipo(s) inválido(s)!
-
+ Reference to object with invalid type!Referencia a un objeto con tipo inválido!
-
+ Operation with object not allocated!Operación con objeto no asignado!
-
+ 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 criación de la Relación `%1' entre las tabla `%2' y `%3' no puede ser hecha pues una de ellas no posee una llave primária. Si la relación es del tipo n-n ambas tablas deben tener claves principales!
-
+ 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!La relación del tipo 1-1, donde ambas tablas son la participación obligatoria no se aplica, ya que requiere la fusión entre las tablas que rompe el modelado realizado por el usuario!
-
+ Assignment of an invalid expression to the object!Asignación de expresión inválida a objeto!
-
+ Assignment of a primary key to a table which already has one!Asignación de llave primaria a una tabla la cual ya poseia una!
-
+ Identifier relationship can not be created for a self relationship, relationships of the type n-n, copy or generalization!Identificador relación no se puede crear de una relación autorelaciones del tipo n-n, dependencia o la generalización!
-
+ Unable to create a copy relationship because the column `%1' in table `%2' already exists in table `%3'!Imposible crear una Relación de dependencia pues la columna `%1' de la tabla `%2' ya existe en la tabla `%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!Imposible crear una Relación de generalización pues la columna `%1' de la tabla `%2' no puede ser funcionada con la columna `%3' de la tabla `%4' por ser de tipos incompatibles!
-
+ 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!Un atributo no puede ser adicionado a una Relación de generalización o dependencia!
-
+ A foreign key can not be added to a relationship because is created automatically when this is connected!Una llave estrangera no puede ser adicionado a um Relación pues esta es creada automaticamente en el momento de la conexión de la mismo!
-
+ The object `%1' (%2) is referencing the object `%3' (%4) which was not found in the model!El objeto `%1' (%2) está referenciando el objeto `%3' (%4) el cual no fue encontrado en la lista de objetos del mismo tipo en el modelo!
-
+ Reference to an user-defined data type that not exists in the model!Referencia un tipo de dato definido por el usuário el cual no existe en el modelo!
-
+ Assignment of invalid maximum size to operation list!Asignación de tamaño máximo inválido a lista de operaciones!
-
+ 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!
- Unable to write the file `%1'' due to one or more errors in the definition generation process!
- Imposible escribir el modelo en el archivo `%1'' debido a uno o más errores en el proceso de geración de la definición de el 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!
- 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 configuración de la Relación `%1' genera una redundancia entre las Relaciones `%2'. Redundancia de Relaciones identificadores o de generalización/dependencia no son acetados pues resulta en una propagación incorreta de columnas tornando el 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!Uno o más objetos fueron invalidadas y se eliminan de forma automática, ya que se hacer referencia a columnas de tabla que se incluyeron a través de relaciones y que ya no existe debido a la desconexión de las relaciones o la exclusión de tales columnas generadas!
-
+ The primary key `%1' can only be allocated if declared within a block of code that defines a table or relationship!La llave primaria `%1' sólo puede ser asignada si es declarada dentro de un bloque de código que define una tabla o Relación!
-
+ Reference to an invalid privilege type!Referencia a un tipo de privilégio inválido!
-
+ Insertion of a role which already exists in the role list of the permission!La inserción de un rol que ya existe en la lista de roles de los permisos!
-
+ Assignment of privilege incompatible with the type of object referenced by permission!Asignación de privilegios incompatibles con el tipo de objeto al que hace referencia el permiso!
-
+ 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!Ya existe una permiso sobre el objeto `%1' (%2) que tiene uno o más iguales roles de de aquellos presentes en el permiso para ser asignado al objeto!
-
+ A permission is referencing the object `%1' (%2) which was not found in the model!Una permiso está referenciando al objeto `%1' (%2) el cual no fue encontrado en el modelo!
-
+ The object `%1' (%2) can not be created because its not being assigned to any schema!El objeto `%1' (%2) no puede ser creado por no estar asignado a ningun esquema!
-
+ The tablespace `%1' can not be inserted into the model because it points to the same directory as the tablespace `%2'!El tablespace `%1' no puede ser insertado en el modelo pues apunta para el mismo diretório que el tablespace '%2'!
-
+ It is not possible to create arrays of domains or sequences (dimension >= 1)! PostgreSQL does not yet implement this feature!No es posíble crear arreglos de domínios o secuencias (dimención >= 1)! PostgreSQL todavía no implementa esta funcionalidad!
-
+ 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 función `%1' no puede obtener un código fuente como una definición, porque su lenguaje se establece en C. Use el símbolo de atributos y la biblioteca dinámica en su lugar!
-
+ 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 función %1' puede tener el símbolo de atributos y la biblioteca dinámica configurada sólo si el idioma se establece en C. Para todos los demás casos se debe especificar un código fuente que lo define en el SGBD!
-
+ The operator `%1' can not be assigned as a comutator of operator `%2' because it has incompatible settings!El operador %1'; no puede ser asignado como comutador de operador `%2' porque tiene configuración incompatibles!
-
+ The operator `%1' can not be assigned as negator of operator `%2' because it has incompatible settings!El operador `%1' no puede ser asignado como negador del operador `%2' porque tiene configuración 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!El tipo `%1' no puede ser referenciado en los atributos `elementos' o `tipo cópia' o ser usado como tipo de dato de un atributo en la configuración de tipo compuesto!
-
+ Assignment of invalid element to type `%1'!Asignación de elemento no válido con el tipo `%1'!
-
+ Assignment of invalid alignment to type `%1'!Asignación de elemento no válido con el tipo `%1'!
-
+ Assignment of invalid name to the table generated from N-N relationship!Asignación de nombre no válido a la tabla genera a partir de la relación N-N!
-
+ 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 Relación `%1' no puede hacer uso de la clave primaria especial. Sólo las relaciones de generalización / dependencia tienen acceso a este recurso!
-
+ 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.El objeto `%1' (%2) no puede ser editado o eliminado porque estaba incluido automáticamente a través de una relación! Para manipular el objeto es necesario hacerlo desde el formulario de edición de la relación que mantiene.
-
+ The object `%1' (%2) can not be deleted because it is protected!El objeto `%1' (%2) no puede ser excluído por estar protegido!
-
+ The group `%1' has already been declared earlier!El grupo `%1' ya fue declarado anteriormente!
-
+ The group `%1' can not be built in the groups declaration block (%2)!El grupo `%1' no puede ser construído en el bloque de declaración de grupos (%2)!
-
+ The group `%1' was built but not declared in the groups declaration block (%2)!El grupo `%1' fue construído pero no declarado en el bloque de declaración de grupos (%2)!
-
+ The group `%1' can not be built without possessing child elements!El grupo `%1' no se puede construir sin poseer elementos hijos!
-
+ The group `%1' can not be built once more because this was done in previous blocks!El grupo `%1' no puede ser construído nuevamente debido a que ya fue construído en el bloque anteriores!
-
+ The group `%1' has been declared but not built!El grupo `%1' fue declarado pero no construído!
-
+ Reference to a column of the objects table with invalid index!
-
+ Reference to a row of the objects table with invalid index!Referencia a uaa columna de la tabla de objetos con índice inválido!
-
+ 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!El objeto `%1' (%2) no puede ser manipulado porque está reservado para PostgreSQL! Este objeto está presente en el modelo de base de datos sólo como una referencia!
-
+ 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 nueva configuración de la función invalida El objeto `%1' (%2)! En este caso se necesita para deshacer la relación entre el objeto afectado y la función de forma que la nueva configuración de este último tenga efecto!
-
+ A view reference must be used in at least one these SQL scopes: View Definition, SELECT-FROM, FROM-WHERE or After WHERE!Una Referencia de Vista debe tener por lo menos una aplicación SQL: SELECT-FROM, FROM-WHERE o despué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!Restricciones como clave primaria, clave externa o único deben tener al menos una columna relacionada con ellos! Para las claves externas se deben seleccionar, además, el columnas 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!
- Imposible cargar uno o más archivos de configuración! Por favor verifique si los archivos existen en la carpeta de configuración y si no se corrompen a la prevención de este error que se produzca de nuevo en el siguiente inicio!
-
-
- Could not find the default settings file `%1'! To restore default settings check the existence of the file and try again!No fue posíble encontrar el archivo de configuración por defecto `%1'! Para restaurar la configuración predeterminada comprobar la existencia del archivo y vuelva a intentarlo!
-
+ 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: **
@@ -4852,378 +4989,295 @@ Ref. column(s): %2
%1
El proceso de exportación falló debido a un error provocado por el servidor PostgreSQL en un intento de ejecutar un comando SQL. Para más detalles sobre el error verificar la excepción pila!
-** Comando SQL ejecutado: **
-
-%1
-
-
-
- Could not load the plugin `%1' from the library `%2'! Message returned by plugin manager: `%3'
- No fue posible cargar el plugin `%1' a partir de la biblioteca `%2'! Mensaje devuelto por el administrador de plugins: `%3'
-
-
-
- One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details.
- Uno o más plugins no se activan debido a errores durante el proceso de carga! Compruebe la pila de la excepción para obtener más detalles.
-
-
-
- Invalid syntax in file %1, line %2, column %3!
- Sintaxis inválida en el archivo %1, fila %2, columna %3!
-
-
-
- Invalid instruction `%1' on file %2, line %3, column %4!
- Instrución inválida `%1' en el archivo %2, linea %3, columna %4!
-
-
-
- Unknown attribute `%1' in file %2, line %3, column %4!
- Atributo `%1' desconocido en el archivo %2, linea %3, columna %4!
-
-
-
- Invalid metacharacter `%1' in file %2, line %3, column %4!
- Inválido metacaracter `%1' en el archivo %2, linea %3, columna %4!
+** Comando SQL ejecutado: **
+
+%1
-
- Invalid operator `%1' in comparison expression, file %2, line %3, column %4!
- Operador no válido `%1' en la expresión de comparación, el archivo %2, línea %3, columna %4!
+
+ Could not load the plugin `%1' from the library `%2'! Message returned by plugin manager: `%3'
+ No fue posible cargar el plugin `%1' a partir de la biblioteca `%2'! Mensaje devuelto por el administrador de plugins: `%3'
-
- Attribute `%1' with an undefined value in file %2, line %3, column %4!
- Atributo `%1' con valor indefinido en el archivo %2, linea %3, columna %4!
+
+ One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details.
+ Uno o más plugins no se activan debido a errores durante el proceso de carga! Compruebe la pila de la excepción para obtener más detalles.
- Attribute `%1' with an invalid name in file %2, line %3, column %4!
- Atributo `%1' con un nombre invalido el archivo file %2, linea %3, columna %4!
-
-
- Assignment of empty XML buffer to parser!Asignación de buffer de código XML vacio o parser!
- Could not access the file or directory %1! Make sure that it exists or if the user has access permissions on it!
- No se pudo acceder al archivo o directorio% 1! Asegúrese de que existe o si el usuario tiene permisos de acceso sobre el mismo!
-
-
- Assignment of empty DTD file name!Asignación de nombre de archivo DTD vacio!
-
+ Assignment of empty name to the DTD declaration!Asignación de nombre vacio para la declaración DTD!
-
+ Error while interpreting XML buffer at line %1 column %2.
Message generated by the parser: %3. %4Error mientras se interpretar búfer XML en línea %1 columna %2.
Mensage generada por el 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!Operación de árbol de elementos sin asignar! Es necesario para cargar el tampón parser XML e interpretar de manera que se genera el árbol!
- Could not load file %1. The same appears to be inconsistent or one of its dependencies (DTD files) has errors or is missing!
- No se pudo cargar el archivo %1. El mismo parece ser inconsistente o una de sus dependencias (archivos DTD) tiene errores o no se encuentra!
-
-
- Operation with unallocated tree element!Operación con elemento de árbol sin asignar!
-
+ Operation with element which does not exists in the element tree currently loaded!Existe Funcionamiento con elemento que no lo hace en el árbol de elementos cargados actualmente!
-
+ Assignment of a value to an invalid connection parameter!Asignación de un valor a un parámetro de conexión no válido!
-
+ Operation on connection not established!Operación en la conexión no se ha establecido!
-
+ Attempt to connect without define configuration parameters!Intenta conectarse sin definir los parámetros de configuración!
-
+ Attempt to start a connection already stablished!Intenta iniciar una conexión ya establecida!
-
+ Could not connect to the database.
Message returned: `%1'No se pudo conectar a la base de datos.
Mensage retornada: `%1'
-
+ Assignment of not allocated SQL command result!Asignación de no asignados resultado de comandos SQL!
-
+ Unable to allocate the result of the SQL command because the response from the DBMS was not understood by the client!No se puede asignar el resultado del comando SQL porque la respuesta de los DBMS no fue entendido por el cliente!
-
+ Unable to allocate command result for the SQL because the server has generated a fatal error!
Message returned by the DBMS: `%1'No se puede asignar resultado de comandos para el SQL porque el servidor ha generado un error fatal!
Mensage retornada por el SGBD: `%1'
-
+ Reference to a column of tuple with invalid index!Referencia a una columna de tupla con índice no válido!
-
+ Reference to a column of tuple with invalid name!Referencia a una columna de tupla con nombre no válido!
- Reference to a tuple with index invalid or the result is empty (no tuples)!
- La referencia a una tupla con índice no válido o el resultado es vacías (no hay tuplas)!
-
-
-
+ Reference to a column of a tuple which was not yet initialized (tuple navigation not started)!Referencia a una columna de una tupla que aún no se ha inicializado (navegación de tupla no iniciado)!
-
+ Could not execute the SQL command.
Message returned: `%1'No se pudo ejecutar el comando SQL.
Mensage retornada: %1
- Invalid use of a view referece as whole SQL definition! The assigned reference must be an expression!
- Uso inválido de un referece vista como la definición de SQL entera! La referencia asignado debe ser una expresión!
-
-
-
+ Assignment of a second definition expression to the view!Asignación de una segunda expresión definición a la vista!
-
+ It is not possible mix ordinary references (SELECT-FROM, FROM-WHERE, After WHERE) with references used as view SQL definition!No es posible la mezcla referencias ordinarias (SELECT-FROM, FROM-WHERE, After WHERE) con referencias utilizadas como definición SQL de la vista!
-
+ Assignment of collation object which type is invalid!Asignación de objeto que tipo de colación no es válido!
- 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 `Indentifier' or the tab `Primary key' on relationship editing form!
- Por el momento pgModeler no admite la creación de las claves principales que algunas columnas se generaron por la conexión relación. Para crear claves primarias con esta característica, puede usar el campo `Indentifidor' o en la ficha `Clave primaria' en el formulario de edición de la relación!
-
-
-
+ Collations must be created at least with attributes LC_COLLATE and LC_CTYPE defined!Colaciones deben crear al menos con los atributos definidos LC_COLLATE y LC_CTYPE!
-
+ The object `%1' (%2) cannot reference itself! This operation is not permitted for this kind of object!El objecto `%1' (%2) no se puede hacer referencia a sí mismo! No se permite esta operación para este tipo de objeto!
-
+ Only operator families which uses `btree' as indexing method are accepted by operator class elements!Sólo las familias de operadores que utiliza ``btree' como método de indexación son aceptados por elementos de clase operador!
-
+ Reference to an invalid copy table option!Referencia a una opción de tabla de copia no válida!
-
+ 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!Copia relación entre las tablas %1' y `%2' no se puede hacer porque el primero ya copias de los atributos `%3'! Las tablas pueden tener sólo una mesa de copia!
-
+ The INSTEAD OF mode cannot be used on triggers that belongs to tables! This is available only for view triggers!El modo INSTEAD OF no se puede utilizar en los triggers que pertenece a tabla! Este servicio está disponible sólo para ver triggers!
-
+ The TRUNCATE event can only be used when the trigger executes for each statement and belongs to a table!El evento TRUNCATE sólo se puede utilizar cuando el disparador se ejecuta para cada declaración y pertenece a una mesa!
-
+ The INSTEAD OF mode cannot be used on view triggers that executes for each statement!El modo INSTEAD OF no puede ser utilizado en vista desencadenantes que ejecuta para cada declaración!
-
+ Constraint triggers can only be executed on AFTER events and for each row!Restricciones de triggers de sólo pueden ejecutarse en eventos AFTER y para cada fila!
-
+ A view trigger cannot be AFTER/BEFORE when it executes for each row!Un trigger de vista no puede ser AFTER/BEFORE cuando se ejecuta para cada fila!
-
+ A trigger cannot make reference to columns when using INSTEAD OF mode and UPDATE event!Un trigger no puede hacer referencia a las columnas cuando se utiliza el modo INSTEAD OF y el evento UPDATE!
-
+ Assignment of a column which has no parent table to the object `%1' (%2)!Asignación de una columna que no tiene ninguna tabla padre al objeto `%1' (%2)!
-
+ Only constraint triggers can be deferrable or reference another table!Solo las restricción de triggers pueden ser prorrogable o hacer referencia a otra tabla!
- Reference to a function id which is incompatible whit the user define type configuration!
- Referencia a un identificador de función que es la pizca incompatibles al usuario definir la configuración de tipo!
-
-
-
+ The operator class assigned to the object `%1' (%2) must use `btree' as indexing method!El operador de clase asignado al objeto `%1' (%2) puede usar `btree' como metodo de indexado!
- Unsupported PostgreSQL version (%1) detected! Valid versions are: %2
- Incompatible versión (%1) de PostgreSQL detectada! Versiones válidos son: %2
-
-
- The validation process failed due to an error triggered by the validation helper. For more details about the error check the exception stack!El proceso de validación ha fallado debido a un error provocado por el ayudante de validación. Para más detalles sobre el error verificar la excepción pila!
-
+ The extension `%1' is registered as a data type and cannot have the attribute `handles datatype' modified!La extensión `%1' se registra como un tipo de datos y no se puede tener el atributo `handles datatype' modificado!
-
+ The fk relationship `%1' cannot be created because the foreign-key that represents it was not created on table `%2'!La relación fk `%1' no se puede crear porque la clave externa que representa no se ha creado en la tabla `%2'!
-
+ Assignement of an invalid object name pattern to the relationship `%1'!Asignacion de un patrón de nombre de objeto no válido a la relación `%1'!
-
+ Reference to an invalid object name pattern id on the relationship `%1'!Referencia a un inválido nombre del objeto patrón Identificación de la relación `%1'!
- Invalid use of variadic parameter mode! This mode can be used only with array data types!
- Uso no válido de modo de parámetros variadic! Este modo sólo se puede utilizar con los tipos de datos serie!
-
-
-
+ Mixing incompatibles DBMS export modes: `ignore object duplications', `drop database' or `drop objects' cannot be used with `simulate export'!Mezcla incompatibles del SGDB en modos de exportación: `ignore object duplications', `drop database' or `drop objects' no se puede utilizar con `simulate export'!
-
+ Mixing incompatibles DROP options: `drop database' and `drop objects' cannot be used at the same time!Mezcla incompatibles en la opción DROP: `drop database' y `drop objects' no puede ser utilizado al mismo tiempo!
-
+ Invalid object id swapping operation! The objects involved are the same!Invalida operación de intercambio del objeto id! Los objetos involucrados son lo mismo!
-
+ Invalid object id swapping operation! The database itself, tablespaces or roles cannot have the ids swapped!Invalida operación de intercambio del objeto id! La propia base de datos, tablespaces o roles no pueden tener los ids de intercambiar!
-
+ The widget already has a parent and cannot be assigned to a different object!El widget de ya cuenta con uno de los padres y no puede ser asignado a un objeto diferente!
- The object `%1' (%2) could not be imported due to one or more errors! Check the exception stack for more details.
- El objeto `%1' (%2) no podía ser importado debido a uno o más errores! Compruebe la pila de la excepción para obtener más detalles.
-
-
- 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.No se pudo cargar el archivo de modelo de base de datos `%1'. Compruebe la pila de errores para ver los detalles. Intente ejecutar `pgmodeler-cli --fix-model' con el fin de corregir la estructura del archivo si ese es el caso.
-
+ The column `%1' cannot reference it's parent table `%2' as data type!La columna `%1' no puede hacer referencia es la tabla padre `%2' como tipo de datos!
-
+ Operation with an invalid element id `%1'!Operación con un elemento id `%1' no válido!
-
+ Reference to an invalid color id `%1' for element `%2'!La referencia a un id `%1' de color no válido para el elemento `%2'!
- Assignment of an invalid object to `%1' (%2)! The assigned object must be of type `%3'
- Asignación de un objeto no válido a %1' (%2)! El objeto asignado debe ser de tipo `%3'
-
-
-
+ 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 secuencia `%1' no puede ser asignada a la columna `%2' debido a que el tipo de datos de este último es incompatible. El tipo que se utiliza debe ser un número entero!
-
+ The option to generate temporary object names can only be used in simulation mode!La opción para generar nombres de objeto temporal sólo se puede utilizar en el modo de simulación!
- 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!
- No es posible convertir el tipo de la columna `%1' a serial! Debe tener una tipo de base `integer' y su valor por defecto debe ser una llamada a la función `nextval(seq_name::regclass)'!
-
-
-
+ Could not assign the variable `%1' to event trigger's filter. Currently, PostgreSQL supports only the `TAG' variable!No se pudo asignar la variable `%1' al filtrar el evento trigger's. Actualmente, PostgreSQL soporta sólo la variable `TAG'!
-
+ Could not perform the `%1' operation on `%2' using the data on row `%3'! All changes were rolled back.
** Returned error **
@@ -5236,31 +5290,23 @@ Mensage retornada por el SGBD: `%1'
%4
-
+ Malformed unescaped value on row `%1' column `%2'!Valor sin escapar con formato incorrecto en la fila `%1' columna `%2'!
- Trying to undo/redo an invalid operation over an object that does not exists anymore! The operations history will be cleaned up.
- Intenta deshacer/rehacer una operación no válida sobre un objeto que no existe más! La historia operaciones se limpiará.
-
-
-
+ 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.El objeto `%1' (%2) no se pueden manejar debido a que algunos campos necesarios no están ajustados! Por favor, asegúrese de llenar al menos la requiere campos con el fin de crear o actualizar correctamente el objeto.
-
+ A relationship can only be swapped by other object of the same kind!Una relación sólo puede ser intercambiado por otro objeto del mismo tipo!ExtensionWidget
-
- Form
- Formulario
- Version:
@@ -5290,87 +5336,83 @@ Mensage retornada por el SGBD: `%1'
Formulario
-
+ Replace one occurrenceReemplazar una ocurrencia
-
+ ReplaceReemplazar
-
+ Replace all occurrencesReemplazar todas las ocurrencias
-
+ Replace AllReemplazar todas
-
+ Replace the selection and find the next oneReemplace la selección y buscar la siguiente
-
+ Replace && FindReemplazar && Buscar
-
+ Replace:Reemplazar:
-
+ Find:Buscar:
-
+ Find previousBuscar anterior
-
+ Shift+F3Shift+F3
-
+ Find nextBuscar siguiente
-
+ F3F3
-
+ Case sensitiveCaso sensible
-
+ Regular expressionExpresón regular
-
+ Whole wordsPalabras completasFunctionWidget
-
- Form
- Formulario
- Attributes
@@ -5391,11 +5433,6 @@ Mensage retornada por el SGBD: `%1'
Rows Returned:Filas Retornadas:
-
-
- Langague:
- Lenguaje:
- Return Method:
@@ -5406,18 +5443,15 @@ Mensage retornada por el SGBD: `%1'
Behavior:Comportamiento:
-
- Simple
- Simples
- SetConjunto
- Table
- Tabla
+
+ Language:
+
@@ -5519,539 +5553,609 @@ Mensage retornada por el SGBD: `%1'
Diseño && General
-
+ GeneralGeneral
-
- The opened models will be saved periodically
- Los modelos abiertos se guardarán periódicamente
-
-
-
- Autosave interval:
- Interval Autosalva:
-
-
-
+ Operation history:
- Histórico Operaciones:
-
-
-
- minute(s)
- minuto(s)
-
-
-
- items
- items
+ Histórico de operaciones:
-
+ Check if there is a new version on serverCompruebe si hay una nueva versión en el servidor
-
- Check for updates at startup
- Comprobar actualizaciones en el arranque
-
-
-
- pixels
- pixeles
-
-
-
- Grid size:
- Tamaño Cuadrícula:
-
-
-
+ DesignDiseño
-
+ Graphical objects (table, views and textboxes) will be created in a single step without the need to click on canvas Los objetos gráficos (mesa, puntos de vista y los cuadros de texto) se crearán en un solo paso sin la necesidad de hacer clic sobre lienzo
-
+ Simplify creation of graphical objectsSimplificar la creación de objetos gráficos
-
+ After loading the model the last zoom and position on canvas will be restoredDespués de cargar el modelo se restaurará el último zoom y la posición en la lona
-
+ Save and restore last position and zoomSalvar y restaurar la última posición y el zoom
- Disable antialiasing for lines and texts improving performance on huge models (requires restart)
- Deshabilitar antialiasing de líneas y textos mejorar el rendimiento en los modelos grandes (requiere reiniciar)
-
-
-
+ Disable render smoothness
+ Deshabilitar renderizado suaveDeshabilitar render suave
-
+ Hide the object that represents the relationship nameOcultar el objeto que representa el nombre de relación
-
+ Hide relationship nameOcultar nombre de la relación
- Operations like save, export and diff will be executed without asking user to validate the model
- Operaciones como guardar, exportar y diff se ejecutarán sin preguntar el usuario para validar el modelo
-
-
-
+ Validate before save, export or diffValidar antes de guardar, exportar o diff
-
- Hide the object which represents the tag assigned to the table
- Ocultar el objeto que representa la etiqueta asignada a la tabla
+
+ Hide the object which represents the tag assigned to the table
+ Ocultar el objeto que representa la etiqueta asignada a la tabla
+
+
+
+ Hide table tags
+ Ocultar etiquetas de tabla
+
+
+
+ Start move the canvas when the cursor is on the canvas edges
+ Iniciar mover el lienzo cuando el cursor está en los bordes de la lona
+
+
+
+ Move canvas by keep mouse on corners
+ Mueva la lona por el ratón torreón en las esquinas
+
+
+
+ Hide the portion of table which represent triggers, indexes and rules
+ Ocultar la parte de la tabla que representan triggers, índices y reglas
+
+
+
+ Hide table extended attributes
+ Ocultar atributos de tabla extendida
+
+
+
+ Enable SQL code completion
+ Activar autocompletado de código SQL
+
+
+
+ Printing && Code
+ Imprimir && Cógigo
+
+
+
+ pt
+ pt
+
+
+
+ Size:
+ Tamaño:
+
+
+
+ Font:
+ Fuente:
+
+
+
+ Printing
+ Imprimiendo
+
+
+
+
+ Options:
+ Opciones:
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
-
- Hide table tags
- Ocultar etiquetas de tabla
+
+ Canvas grid size:
+
-
- Start move the canvas when the cursor is on the canvas edges
- Iniciar mover el lienzo cuando el cursor está en los bordes de la lona
+
+ Defines the vertical and horizontal grid size. This value affects the spacing of objects when using object grid alignment feature.
+
-
- Move canvas by keep mouse on corners
- Mueva la lona por el ratón torreón en las esquinas
+
+ 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.
+
-
- Hide the portion of table which represent triggers, indexes and rules
- Ocultar la parte de la tabla que representan triggers, índices y reglas
+
+ Trigger range selection with a single click
+
-
- Hide table extended attributes
- Ocultar atributos de tabla extendida
+
+ Defines the maximum amount of elements held in the operation history. Once reached the maximum number the history is automatically cleaned.
+
-
- By default panning mode is triggered with left click and range selection with Shift + left click.
- Por defecto el modo de paneo se activa con un clic izquierdo y selección de rango con Shift + clic izquierdo.
+
+ Defines the period when the opened models will be saved automatically.
+
-
- Swap panning and range selection triggers
- Paneo de Swap y rango de selección disparadores de triggers
+
+ Autosave interval (minutes):
+
- Toggles the code completion in all fields that accepts the input of SQL commads.
- Alterna la finalización de código en todos los campos que acepta la entrada de commads SQL.
+
+ Replaces any straight line in relationship by curved ones in order to improve the model's visualization.
+
-
- Enable SQL code completion
- Activar autocompletado de código SQL
+
+ Use curved lines for relationships
+
-
- Printing && Code
- Imprimir && Cógigo
+
+ SQL history max. length:
+
- Code font style
- Estilo de la fuente del código
+
+ Souce code editor:
+
-
- pt
- pt
+
+ lines
+ lineas
-
- Size:
- Tamaño:
+
+ Clear the entire SQL comand history.
+
-
- Font:
- Fuente:
+
+ Clear history
+ Limpiar historial
-
- Printing
- Imprimiendo
+
+ Configurations directory:
+ Directorio de configuraciones:
-
-
- Options:
- Opciones:
+
+ Browse the source code editor application
+ Examinar la aplicación del editor de código fuente
-
- Disable antialiasing for lines and texts improving performance when handling huge models.
-
+
+ Open in file manager
+ Abrir en el administrador de archivos
-
- Triggers a dialog asking the user to validate the model before a save, export or diff operation.
-
+
+ Check updates at startup
+ Comprobar actualizaciones al inicio
-
- 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).
+
+ Souce code editor args:
-
- Use placeholders when moving tables
-
+
+ User interface language:
+ Idioma de la interfaz de usuario:
-
- Toggles the code completion in all fields that accepts the input of SQL commands.
+
+ 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.
-
+ Code style
-
+ Colors:Colores:
-
+ Display line numbers
-
+ Highlight lines at cursor's position
-
+ Custom tab width:
-
+ Print gridImprimir cuadrícula
-
+ Print page numbersImprimir número de página
-
+ Paper:Papel:
-
+ A0 (841 x 1189 mm)A0 (841 x 1189 mm)
-
+ 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)Ejecutivo (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)Carta (216 x 279 mm)
-
+ Tabloid (279 x 432 mm)Tabloid (279 x 432 mm)
-
+ CustomPersonalizar
-
+ Orientation:Orientación:
-
+ LandscapeLandscape
-
+ PortraitPortrait
-
+ Unity:Unidad:
-
+ Custom Size:Tamaño Personalizado:
-
+ Width:Ancho:
-
+ Height:Altura:
-
+ Page Margins:Márgenes de página:
-
+ Left:Izquierdo:
-
+ Left marginMargen izquierdo
-
+ Top:Superior:
-
+ Top marginMargen superior
-
+ Right:Derecho:
-
+ Right marginMargen derecho
-
+ Bottom:Inferior:
-
+ Bottom marginMargen inferior
-
+ MilimetersMilímetros
-
+ PixelsPixeles
-
+ InchesPulgadas
-
+ CentimeterCentímetros
-
+ Line numbers' font color
-
+ Line numbers' background color
-
+ Highlighted line color
-
+ The little brown fox jumps over the lazy dog
+
+
+ System default
+
+
+
+
+ All files (*.*)
+
+
+
+
+ Load file
+
+
- GraphicalView
+ GenericSQLWidget
-
- Connected rels: %1
- Rels conectados: %1
+
+ SQL code
+ Código SQL
@@ -6064,10 +6168,6 @@ Mensage retornada por el SGBD: `%1'
IndexWidget
-
- Form
- Formulario
- Attributes
@@ -6121,10 +6221,6 @@ Mensage retornada por el SGBD: `%1'
LanguageWidget
-
- Form
- Formulario
- Trusted:
@@ -6219,843 +6315,709 @@ Mensage retornada por el SGBD: `%1'
Ctrl+F
- msg
- msg
-
-
-
+ &File&Archivo
-
+ &Edit&Editar
- Help
- A&yuda
-
-
-
+ &Show&Mostrar
- &Plugins
- &Plugins
-
-
-
+ GeneralGeneral
-
+ ControlsControles
-
+ &Load&Cargar
-
+ Sa&ve as
-
+ E&xit
-
+ &Salir
-
+ Exit pgModeler
-
+ Salir de pgModeler
-
+ &About pgModeler
-
+ &Acerca de pgModeler
-
+ &Print
-
+ Im&primir
-
+ Print model
-
+ Imprimir modelo
-
+ &Undo
-
+ Undo operation
-
+ &Redo
-
+ Redo operation
-
+ &Export&Exportar
-
+ Ctrl+Shift+E
-
+ &Show grid
-
+ Mostrar &grid
-
+ &Close&Cerrar
-
+ &Normal zoom
-
+ &Align to grid
-
+ &Alinear a la cuadrícula
-
+ Show &delimiters
-
+ Mostrar &delimitadores
-
+ &Settings
-
+ &Configuración
-
+ F12F12
-
+ &Overview
-
+ &Support
-
+ &Soporte
-
+ Access the support page
-
+ Acceder a la página de soporte
-
+ NewNuevo
-
+ &Diff
-
+ &Diff
-
+ Design database models
-
+ Shift+D
-
+ Shift+M
-
+ &Bug report
-
+ Report a bug
-
+ Reportar un error
-
+ Donate
-
+ Donar
-
+ Help pgModeler by donating!
-
+ ¡Ayuda a pgModeler donando!
-
+ Objects me&tadata
-
+ Objects metadata
-
- Ctrl+N
- Ctrl+N
+
+ Arrange objects
+
- Save
- Guardar
+
+ Rearrange objects on the canvas hierarchically
+ Reorganizar los objetos en el lienzo jerárquicamente
+
+
+
+ Ctrl+N
+ Ctrl+N
-
+ Ctrl+SCtrl+S
-
+ Zoom inZoom +
-
+ Ctrl+=Ctrl+=
-
+ Zoom outZoom -
-
+ Zoom -Zoom -
-
+ He&lp
-
+ A&yuda
-
+ Pl&ugins
-
+ &New
-
+ &Nuevo
-
+ New modelNuevo modelo
-
+ &Save&Guardar
-
+ &Zoom in
-
+ Zoo&m out
-
+ Ctrl+->Ctrl+-
- Load
- Cargar
-
-
-
+ Ctrl+OCtrl+O
- Save as
- Guardar como
-
-
- Exit
- Salir
-
-
-
+ Ctrl+QCtrl+Q
- About pgModeler
- Acerca de pgModeler
-
-
-
+ F4F4
- Print
- Imprimir
-
-
-
+ Ctrl+PCtrl+P
- Undo
- Deshacer
-
-
-
+ Ctrl+ZCtrl+Z
- Redo
- Rehacer
-
-
-
+ Ctrl+YCtrl+Y
- Export
- Exportar
-
-
-
+ Export the current opened model in different modesExportar el modelo abierto actual en diferentes modos
-
+ &Recent Models
-
+ &Modelos Recientes
-
+ &Import&Importar
-
+ Rest&ore Session
-
+ &Restaurar Sesión
-
+ &Fix a model
-
+ Arreglar un modelo
-
+ &Check for update
-
+ &Buscar actualizaciones
-
+ Ctrl+Shift+SCtrl+Shift+S
-
+ Show gridMostrar cuadrícula
-
+ Ctrl+GCtrl+G
- Close
- Cerrar
-
-
-
+ Close current modelCerrar modelo actual
-
+ Ctrl+WCtrl+W
- Normal zoom
- Zoom normal
-
-
-
+ Ctrl+0Ctrl+0
- Align to grid
- Alinear a la cuadrícula
-
-
-
+ Align objects position to grid
- Alinear objetos posición de cuadrícula
+ Alinear la posición de los objetos con la cuadrícula
-
+ Ctrl+HCtrl+H
- Show delimiters
- Mostrar delimitadores
-
-
-
+ Show the page delimiters
- Mostrar los delimitadores página
+ Mostrar los delimitadores de la página
-
+ Ctrl+LCtrl+L
- Settings
- Configuraciones
-
-
-
+ Edit pgModeler settingsEditar configuraciones de pgModeler
-
+ Save all
- Guardar todos
-
-
- Overview
- Vista General
+ Guardar todo
-
+ Show the model overview
- Mostrar el visión general modelo
+ Mostrar visión general del modelo
-
+ F10F10
- Wiki
- Wiki
-
-
- Access the wiki pages
- Accesos a las páginas wiki
-
-
-
+ F1F1
-
+ New object
-
+ PluginsPlugins
-
+ Access the list of loaded pluginsAcceda a la lista de plugins cargados
- Recent Models
- Modelos Recientes
-
-
-
+ Load recently opened model
- Cargar modelo abiertos recientes
-
-
- Import
- Importar
+ Cargar modelos abiertos recientemente
-
+ Import existing database to new model (reverse engineering)Importación de base de datos existente para nuevo modelo (ingeniería inversa)
-
+ Ctrl+Shift+ICtrl+Shift+I
- Restore Session
- Restaurar sesión
-
-
- Fix a model
- Fijar un modelo
-
-
-
+ New version found!Nueva versión encontrado!
-
+ Update for the current version is available on project's siteActualización para la versión actual está disponible en el sitio del proyecto
- Check for update
- Buscar actualizaciones
-
-
-
+ action_main_menuaction_main_menu
-
+ Main menuMenú principal
-
+ Show expanded
- Mostrar expandió
+ Mostrar expandido
-
+ Expands the main menu bar in classical modeExpande la barra de menú principal en el modo clásico
-
+ Hide main menuOcultar menú principal
-
+ Hides the main menu bar and put the action on a separated actionOculta la barra de menú principal y poner la acción en una acción separada
-
+ Ctrl+Shift+HCtrl+Shift+H
- Diff
- Diff
-
-
-
+ Determine the changes between model and databaseDeterminar los cambios entre el modelo y la base de datos
-
+ Ctrl+Shift+D
-
+ WelcomeBienvenidos
-
+ Welcome screenPantalla de bienvenida
-
+ Shift+W
-
+ DesignDiseño
- Design datase models
- Modelos Diseño datase
-
-
-
+ ManageAdministrar
-
+ Manage existent databases
- Administrar base de datos existente
-
-
- Bug report
- Reporte de Bug
+ Administrar base de datos existentes
-
+ (Demo) (Demo)
-
- Save all models
- Guardar todos los modelos
-
-
- Some models were modified! Do you really want to quit pgModeler without save them?
- Se modificaron algunos modelos! ¿De verdad quiere dejar de fumar pgModeler sin salvarlos?
- Saving temp. modelsGuardando modelos temp
-
+ Clear MenuLimpiar 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 modelGuardar Modelo
- The model was modified! Do you really want to close without save it?
- El modelo fue modificado! ¿De verdad quiere cerrar sin guardarlo?
-
-
-
+ 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?
-
-
+
+ WarningAdvertencia
-
+ 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!
-
-
-
+
+
+ ConfirmationConfirmació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 anywayGuardar de todos modos
-
-
-
+
+
+ ValidateValidar
-
+ 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/>
- You're running a demonstration version! The model export feature can be tested twice per pgModeler execution!
- Usted está ejecutando una versión de demostración! La función de exportación modelo puede ser probado dos veces por la ejecución pgModeler!
+
+ 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 para validar el fin de crear correctamente los objetos en el servidor de base de datos!
+ <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!
-
+ Export anywayExportar de todas modos
- You're running a demonstration version! The database import (reverse engineering) feature is available only in the full version!
- Usted está ejecutando una versión de demostración! La importación de base de datos característica (ingeniería inversa) sólo está disponible en la versión completa!
-
-
- You're running a demonstration version! The model-database diff feature is available only in the full version!
- Usted está ejecutando una versión de demostración! La función diff modelo de base de datos sólo está disponible en la versión completa!
-
-
-
+ <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 anywayDiff de todas modo
-
+ Database model printingImprimir 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 modelCargar 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 modelFijar modelo
-
+ CancelCancelar
- Open Wiki pages
- Abrir páginas wiki
-
-
-
+ 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 encontradas)
-
-
- 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/>
- Usted está ejecutando una versión de demostración! Tenga en cuenta que y apos; va a ser capaz de crear solamente una instancia <strong>%1</strong> de cada tipo de objeto y algunas características clave se desactivarán!<br/><br/>Usted puede comprar una copia binaria total o obtener el código fuente de <a href='http://pgmodeler.com.br'>pgmodeler.com.br</a>.
-<strong>NOTA:</strong> pgModeler es un software de código abierto, pero la compra de copias binarias o proporcionar algunas donaciones apoyará el proyecto y cubrir todos los costos de desarrollo.<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!
- La ejecución de la versión de demostración ha terminado! ¿Te ha gustado pgModeler y quiere comprarlo? Utilice los siguientes promocodes y recibir buenos descuentos:<br/><br/> <strong>D3M02BR0NZ3</strong> (Descuento un paquete de bronce)<br/> <strong>D3M02S1LV3R</strong> (Descuento un paquete de plata)<br/> <strong>D3M02G0LD</strong> (Descuento un paquete de oro)<br/> <strong>D3M02PL4T1NUM</strong> (Descuento un paquete de platino)<br/> <strong>D3M02D14M0ND</strong> (Descuento un paquete de diamante)<br/> <br/>Gracias por probar pgModeler!
+ (no hay ejemplos encontrados)
-
+ saveguardar
-
+ exportexportar
-
+ diffdiff
-
+ Executing pending <strong>%1</strong> operation...Ejecución de operarienes pendientes <strong>%1</strong>...
@@ -7073,69 +7035,69 @@ Mensage retornada por el SGBD: `%1'
msg
-
+ ExceptionsExcepciones
-
+ 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
-
+ CancelCancelar
-
+ &Ok&Ok
-
+ &Cancel&Cancelar
-
+ ErrorError
-
+ AlertAlerta
-
+ InformationInformación
-
+ ConfirmationConfirmación
@@ -7183,174 +7145,214 @@ Mensage retornada por el SGBD: `%1'
Opciones
-
+ 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.
-
+ Objects' protection status
-
+ Handles the objects' SQL disabled status in the metadata file.
-
+ Objects' SQL disabled status
- Handles the objects' custom SQL commands in the metadata file.
+ Handles the objects' fade out status in the metadata file.
- Custom SQL commands
+ Objects' fade out status
- Save textboxes to the output file when extracting metadata. When loading the file textboxes are recreated and duplicated ones are ignored.
+ Save tags to the output file when extracting metadata. When loading the file, the tags are recreated and duplicated ones are ignored.
-
- Textbox objects
+
+ Save textboxes to the output file when extracting metadata. When loading the file, the textboxes are recreated and duplicated ones are ignored.
-
- Save tags to the output file when extracting metadata. When loading the file tags are recreated and duplicated ones are ignored.
+
+ Handles the objects' custom SQL commands in the metadata file.
+
+
+
+
+ Custom SQL commands
+ Textbox objects
+
+
+
+ Tag objects
-
+
+ Handles the tables' and views' extended attributes display status in the metadata file.
+
+
+
+
+ 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:
-
+ OutputSalida
-
+ Progress label...
-
-
+
+ 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 (*.*)
@@ -7373,406 +7375,399 @@ Mensage retornada por el SGBD: `%1'
Configuraciones
-
+ Input databaseBase de datos de entrada
-
+ Connection:Conexión:
- Connect and list available databases
- Conectar y listar las bases de datos disponibles
-
-
-
+ ......
-
+ Database:bases de datos:
-
- Options
- Opciones
-
-
- Ignores as many as possible errors on import step. This option generates a incomplete diff.
- Ignora mayor número posible de errores en la etapa de importación. Esta opción genera un diff incompleta.
-
-
-
+ Ignore import errorsIgnorar errores de importación
- 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.
- Borra los datos de todas las tablas que se han modificado las columnas. Esto es útil para evitar errores relacionados con el tipo de conversión. <strong>ADVERTENCIA:</strong> NO use esta opción en el servidor de producción y siempre hacer una copia de seguridad antes de utilizar esta opción.
-
-
-
+ Trucate tables before alter columnsTrucate tablas antes alterar las columnas
- Import system (built in) objects. Use this if the import step is returning errors.
- Sistema de Importación (incorporada) objetos. Utilice esta opción si el paso de importación está volviendo errores.
-
-
-
+ Import system objectsImportar objectos del sistema
- Import extension objects. Use this if the import step is returning errors even importing built in ones.
- Importar extensión de objecto. Utilice esta opción si el paso de importación está volviendo errores incluso importadora construidas en unos.
-
-
-
+ Import extension objectsImportar 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 modeDrop 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 permissionsMantenga 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 objectsMantenga objetos clúster
-
+ Recreate only unmodifiable objectsRecrear objetos sólo no modificables
- 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.
- En lugar de utilizar el comando ALTER para modificar un cierto tipo de objetos un DROP y CREATE serán utilizados con el fin de hacer una modificación completa. Esta opción no afecta a los objetos de base de datos.
-
-
-
+ Force recreation of objectsForzar 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 errorsIgnorar 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 columnsReciclar secuencias sobre columnas de serial
-
+ Diff modeModo 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.
- Store in SQL file
- Almacenar en archivo SQL
-
-
-
+ File:Archivo:
-
+ Select output fileSeleccionar 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.
- Apply on server
- Aplicar en el servidor
-
-
-
+ 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
-
+ Appl&y on server
-
+
+ Diff
+ Diff
+
+
+
+ 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
+
+
+
+ OutputSalida
-
+ Changes:Cambios:
-
+ CancelCancelar
-
+ 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 createdObjetos que se creen
-
-
-
-
+
+
+
+ 00
-
+ Objects to be droppedObjetos que se borran
-
+ Possible objects to be changedObjetos posibles de ser cambiados
-
+ Ignored objects (system ones or with sql disabled)Objetos ignorados (los del sistema o con sql disabilitado)
-
+ Diff PreviewVista 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>...
-
+ ConfirmationConfirmació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 diffAplicar diff
-
+ Preview diffVista previa Diff
-
+ Exporting diff to database <strong>%1</strong>...Exportando diff a base de datos <strong>%1</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 (*.*)
@@ -7795,227 +7790,217 @@ Mensage retornada por el SGBD: `%1'
Configuración
-
+ Database serverServidor de Bases de datos
-
+ 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.El pgModeler ignora los errores generados por objetos duplicados y sólo crea objetos del modelo que no existen en la base de datos. Esta opción se puede usar cuando un objeto fue creado después de una exportación de modelo posterior.
-
+ Ignore object duplicityIgnorar duplicidad de objetos
-
+ Connection:Conexión:
-
+ 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.PostgreSQL versión en la que se debe generar el código SQL. Se recomienda seleccionar esta opción sólo cuando la versión del SGDB, de alguna manera, no es identificable o si usted necesita para generar una versión específica de código SQL con fines de prueba.
-
-
+
+ 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.Si <strong>BD</strong> se comprueba pgModeler destruirá la base de datos si ya existe en el servidor. Cuando <strong>Objetos</strong> se comprueba pgModeler ejecutará el comando DROP unido a objetos de SQL-habilitado. <strong>ADVERTENCIA:</strong> esta opción conduce a la pérdida de datos, así que asegúrese de tener una copia de seguridad primero.
-
+ Drop:Borrar:
-
+ DBBD
- Objects
- Objectos
-
-
-
+ 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 destruirá la base de datos si ya existe en el servidor. Asegúrese de tener una copia de seguridad antes de usar esta opción porque se perderán todos los datos.
- PNG Image
- Imagen PNG
-
-
-
+ Zoom:Zoom:
-
+ Show gridMostrar cuadrícula
-
+ Show delimitersMostrar delimitadores
-
+ 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.Exportación de la página modelo por página generará archivos con un <strong>_p[n]</strong> sufijo donde <strong>n</strong> es el identificador de página. Compruebe si el usuario actual tiene permiso de escritura en la carpeta de salida.
-
+ Page by pagePágina por página
-
-
+
+ Select target fileSeleccionar archivo de destino
-
-
+
+ ......
- Image:
- Imagen:
-
-
-
+ SQL fileArchivo SQL
-
-
+
+ File:Archivo:
-
+ Ob&jects
-
+ Graphics file
-
- Image (PNG)
-
-
-
-
+ Type:Tipo:
-
- Vectorial (SVG)
+
+ PostgreSQL version in which the SQL code should be generated
+ PostgreSQL versión en la que se debe generar el código SQL
+
+
+
+ I&mage (PNG)
-
- PostgreSQL version in which the SQL code should be generated
- PostgreSQL versión en la que se debe generar el código SQL
+
+ &Vectorial (SVG)
+
-
+ OutputSalida
-
+ CancelCancelar
-
+ Progress label...Etiqueta de progreso...
-
+ &Export&Exportar
-
+ &Close&Cerrar
-
+ Error code <strong>%1</strong> found and ignored. Proceeding with export.Error de código encontrado en <strong>%1</strong> y ignorado. Procediendo con la exportación.
-
+ Initializing model export...Inicializando exportación del modelo...
-
+ Saving file '%1'Guardar archivo '%1'
-
-
+
+ Exporting process aborted!Porceso de exportación abortado!
-
+ Export model as...Exportar modelo como...
-
+ SQL script (*.sql);;All files (*.*)
-
+ Portable Network Graphics (*.png);;All files (*.*)
-
+ Scalable Vector Graphics (*.svg);;All files (*.*)
- SQL code (*.sql);;All files (*.*)
- Código SQL(*.sql);;Todos los archivos (*.*)
-
-
- Imagen PNG (*.png);;Todos los archivos (*.*)
- Imagen PNG (*.png);;Todos los archivos (*.*)
-
-
-
+ Exporting process canceled by user!Proceso de exportación cancelada por el usuario!
-
+ Exporting process sucessfuly ended!Proceso de exportación terminó satisfactoriamente!
@@ -8023,156 +8008,140 @@ Mensage retornada por el SGBD: `%1'
ModelExportHelper
-
+ Generating SQL code for PostgreSQL `%1'Generación de código SQL para PostgreSQL `%1'
-
+ Output SQL file `%1' successfully written.Archivo SQL de salida `%1' escrito satisfactoriamente.
-
+ Rendering objects to page %1/%2.Renderiando objetos a la página %1/%2.
-
+ Output image `%1' successfully written.Imagen de salida `%1' escrito satisfactoriamente.
-
+ Exporting model to SVG file.
-
+ SVG representation of database model
-
+ SVG file generated by pgModeler
-
+ Output file `%1' successfully written.
-
+ Starting export to DBMS.Comenzando exportación a SGDB.
-
+ PostgreSQL version detection overridden. Using version `%1'.Versión detección PostgreSQL anulado. Al usar la versión. Usar la versión `%1'.
-
+ PostgreSQL `%1' server detected.Servidor PostgreSQL `%1' detectado.
-
+ Generating temporary names for database, roles and tablespaces.Generar nombres temporales para bases de datos, roles y tablespaces.
-
+ Enabling the SQL code for database `%1' to avoid errors.Habilitar el código SQL para la base de datos `%1' para evitar errores.
-
+ Ignoring object duplication errors.Ignorando los errores de duplicación de objetos.
-
+ Ignoring the following error code(s): `%1'.Ignorando el código de error siguiente (s): `%1'.
-
+ Trying to drop database `%1'.Tratando de borrarr la base de datos `%1'.
-
+ Simulation mode activated.Modo de simulación activado.
- Creating object `%1' (%2).
- Creación de objetos `%1' (%2).
-
-
- Creating database `%1'.
- Creando basea de datos `%1'.
-
-
- Connecting to database `%1'.
- Conectando a base de datos`%1'.
-
-
-
+ 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.
- Dropping object `%1' (%2).
- Borrando objetos `%1' (%2).
-
-
-
-
-
+
+
+ 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.
@@ -8250,18 +8219,6 @@ p, li { white-space: pre-wrap; }
Fix tries:Fijar intentos:
-
- <!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;">Proceso que espera para iniciar...</p></body></html>
- Select input file
@@ -8321,30 +8278,22 @@ p, li { white-space: pre-wrap; }
-
+ Alt+C
-
- Ctrl+Up
- Ctrl+Up
- Next modelSiguiente modelo
- Ctrl+Down
- Ctrl+Down
-
-
-
+ Close modelCerrar modelo
-
+ ......
@@ -8490,6 +8439,12 @@ p, li { white-space: pre-wrap; }
Model overviewVista general del 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
@@ -8543,20 +8498,16 @@ p, li { white-space: pre-wrap; }
&Restore&Restaurar
-
- Modified: %1
- Modificado: %1
- 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.
@@ -8569,143 +8520,123 @@ p, li { white-space: pre-wrap; }
Formulario
-
+ 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.Advertencias: no previene modelo para ser salvos.
-
-
+
+ 00
-
+ Errors: model will not be saved while there are validation errors.Errores: modelo no se guardará mientras que hay errores de validación.
-
+ Hide this widgetOcultar este widget
-
+ ......
- Use unique temporary names for database, role and tablespace objects
- Utilice nombres temporales únicos para objetos de base de datos, de rol y tablespace
-
-
- Enable validation of SQL code on DBMS (requires connection)
- Habilitar validación de código SQL en DBMS (requiere conexión)
-
-
-
+ SQL Validation:Validación de SQL:
- Connection alias
- Alias de conexión
-
-
-
+ PostgreSQL versionVersión PostgreSQL
- SQL validation, if enabled, will occur only on the last step or when there are no warnings.
- Validación de SQL, si está habilitado, se producirá sólo en el último paso o cuando no hay advertencias.
-
-
- Using temporary names will avoid object duplication errors when running the SQL validation.
- El uso de nombres temporales evitará errores de duplicación de objetos cuando se ejecuta la validación de SQL.
-
-
-
+ Try to resolve the reported issues.Trate de resolver los problemas comunicados.
-
+ Apply FixAplicar Fijar
-
+ Ctrl+SCtrl+S
-
+ Clear validation resultsLimpiar resultados de la validación
-
+ ClearLimpiar
-
+ Try to apply a fix on the selected validation info.Trate de aplicar una solución en la información de validación seleccionado.
-
+ OptionsOpciones
-
+ Cancel the SQL validation in progress.Cancelar la validación de SQL en curso.
-
+ CancelCancelar
-
+ EscEsc
-
+ Change the creation order for two objects by swapping their idsCambiar el orden de la creación de dos objetos mediante el canje de sus ids
-
+ Swap IdsIntercambiar Ids
-
+ Va&lidateVa&lidar
@@ -8715,84 +8646,72 @@ p, li { white-space: pre-wrap; }
Autodetectar
-
+ The object <strong>%1</strong> <em>(%2)</em> [id: %3] is being referenced by <strong>%4</strong> object(s) before its creation.El objeto <strong>%1</strong> <em>(%2)</em> [id:% 3] está siendo referenciado por <strong>%4</strong> objeto(s) antes de su creación.
-
+ 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.El objeto <strong>%1</strong> <em>(%2)</em> se hace referencia a las columnas creadas por <strong>%5</strong> relación (es), pero se crea ante ellos.
-
+ The object <strong>%1</strong> <em>(%2)</em> has a name that conflicts with <strong>%3</strong> object's name(s).El objeto <strong>%1</strong> <em>(%2)</em> tiene un nombre que entre en conflicto con <strong>%3</strong> nombre(s) de objteto(s).
-
+ The relationship <strong>%1</strong> [id: %2] is in a permanent invalidation state and needs to be relocated.
-
+ <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.
-
+ SQL validation not executed! No connection defined.
-
+ Database model successfully validated.
- The relationship <strong>%1</strong> [id: %2] is in a permanent invalidation state and need to be rellocated.
- La relación <strong>%1</strong> [id: %2] está en un estado permanente invalidación y necesitan ser recargado.
-
-
-
+ 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>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>
- <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> intentar cambiar la relación mencionada por otro con el fin de resolver esta situación. Tenga en cuenta que otros objetos se pueden perder en este proceso.
-
-
-
+ <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].
- Database model sucessfully validated.
- Modelo de base de datos con éxito validado.
-
-
-
+ Running SQL commands on server...Ejecución de comandos SQL en el servidor...
-
+ Processing object: %1Procesando object: %1
@@ -8800,397 +8719,493 @@ p, li { white-space: pre-wrap; }
ModelWidget
-
+ One to One (1-1)Uno a Uno (1-1)
-
+ One to Many (1-n)
- Uno a Mucho (1-n)
+ Uno a Muchos (1-n)
-
+ Many to Many (n-n)Mucho a Mucho (n-n)
-
-
+
+ CopyCopiar
- Generalization
- Generalización
-
-
-
+ InheritanceHerencia
-
+ <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!
-
+ SourceFuente
-
+ Alt+SAlt+S
-
+ Show object source codeExibir el código-Fuente del objeto
-
-
+
+ PropertiesPropiedades
-
+ SpaceEspacio
-
+ Edit the object propertiesEdita las propriedades del objeto
-
-
+
+ ProtectProteger
-
-
+
+ UnprotectDesproteger
-
+ Protects object(s) from modificationsProtege objeto(s) a partir de las modificaciones
-
-
+
+ DeleteEliminar
-
+ DelDel
-
-
+
+ Del. cascadeDel. cascada
-
+ Shift+DelShift+Del
-
+ Select allSeleccionar todos
-
+ Ctrl+ACtrl+A
-
+ Selects all the graphical objects in the modelSelecciona todos los objetos gráficos en el modelo
-
+ ConvertConvertir
-
+ Ctrl+CCtrl+C
-
+ PastePegar
-
+ Ctrl+VCtrl+V
-
+ CutCortar
-
+ Ctrl+XCtrl+X
-
+ Deps && ReferrersDeps && Referreridos
-
+ NewNuevo
-
+ Add a new object in the modelAdicionar un nuevo objeto en el modelo
-
+ QuickRápido
-
+ Quick action for the selected objectAcciones rápidas para la selección de objecto
-
+ RenameRenombrar
-
+ F2F2
-
+ Quick rename the objectRenombrar rápida del objeto
-
+ Move to schemaMover al esquema
-
+ Set tagConfigurar tag
-
+ Edit permissionsEditar permisos
-
+ Ctrl+ECtrl+E
-
+ Change ownerCambiar propietario
-
+ Select childrenSeleccione los hijos
-
+
+ Select tagged
+
+
+
+ HighlightAspecto interesante
-
+ Open relationshipAbrir relación
-
+ Custom SQL
- Personalizas SQL
+ Personalizar SQL
-
+ Alt+QAlt+Q
-
+ Convert to sequenceConverir a secuencia
-
+ Convert to serial
- Converir a seral
+ Converir a serial
-
+ Break lineSaltos de líena
-
+ Remove pointsRemover puntos
-
+ Enable SQLHabilitar SQL
-
+ Disable SQL
- Deshaabilitar SQL
+ Deshabilitar SQL
-
+
+ Duplicate
+ Duplicar
+
+
+
+ Ctrl+D
+
+
+
+
+ Extended attributes
+ Atributos extendidos
+
+
+
+ Show
+ Mostrar
+
+
+
+ Hide
+ Ocultar
+
+
+
+ Jump to table
+ Ir a tabla
+
+
+
+ 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 modelCargando modelo de base de datos
-
+ Saving database modelGuardando modelo de base de datos
-
+ 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.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)
-
+ Source codeCódigo fuente
-
+ ConstraintsRestricciones
@@ -9198,39 +9213,35 @@ p, li { white-space: pre-wrap; }
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...
-
- Comparison between model and database finished.
- Comparación entre el modelo y la base de datos terminado.
- NewObjectOverlayWidget
@@ -9256,7 +9267,7 @@ p, li { white-space: pre-wrap; }
-
+ AA
@@ -9286,7 +9297,7 @@ p, li { white-space: pre-wrap; }
Esquema
-
+ DomainDominio
@@ -9296,268 +9307,278 @@ p, li { white-space: pre-wrap; }
Conversión
-
+ AggregateAgregado
-
+ CollationCollation
-
+ TableTabla
-
+ TypeTipo
-
+ Op. FamilyOp. Familia
-
+ SequenceSequencia
-
+ ExtensionExtensión
-
+ FunctionFunción
-
+ Op. ClassOp. Clase
-
+ OperatorOperador
-
+ ViewVista
-
-
+
+ PermissionsPermisos
-
+ RuleRegla
-
+ IndexIndice
-
+ ColumnColumna
-
+ ConstraintRestricción
-
+
+ Generic SQL
+
+
+
+ TriggerTrigger
-
+ Many-to-many
- Mucho-a-mucho
+ Muchos-a-muchos
-
+ One-to-many
- Uno-a-mucho
+ Uno-a-muchos
-
+ One-to-oneUno-a-uno
-
+ InheritanceHerencia
-
+ CopyCopia
-
+ GG
-
+ KK
-
+ HH
-
+ JJ
-
+ DD
-
+ EE
-
+ FF
-
+ LL
-
+ OO
-
+ UU
-
+ II
-
+ RR
-
+ SS
-
+ QQ
-
+ TT
-
+ PP
-
+ MM
-
+ YY
-
+ WW
-
+ 99
-
+ ZZ
-
+ XX
-
+ CC
-
+ VV
-
+ BB
+ 8
+ 8
+
+
+ 11
-
+ 22
-
+ 33
-
+ 55
-
+ 44
-
+ 00
@@ -9565,84 +9586,121 @@ p, li { white-space: pre-wrap; }
NumberedTextEditor
-
+
+
+ Load file
+
+
+
+
+ Load the object's source code from an external file
+
+
+
+
+ Edit source
+
+
+
+
+ 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.
+
+
+
+
+ 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
- Formulario
- DependenciesDependencias
-
-
+
+ IDID
-
-
+
+ ObjectObjecto
-
-
+
+ TypeTipo
-
-
+
+ Parent ObjectObjeto Padre
-
-
+
+ Parent TypeTipo del Padre
-
+ Exclude indirect dependenciesExcluir dependencias indirectas
-
+ ReferencesReferencias
-
+ Include indirect referencesIncluir referencias indirectas
-
+ This object does not exists anymore. The dependencies and references listing are disabled.Este objeto no existe más. Las dependencias y referencias listadas se deshabilitan.
@@ -9665,7 +9723,7 @@ p, li { white-space: pre-wrap; }
Patrón:
-
+ FindBuscar
@@ -9708,7 +9766,7 @@ p, li { white-space: pre-wrap; }
Hide this widget
- Ocultar este widget
+ Ocultar este widget
@@ -9736,37 +9794,37 @@ p, li { white-space: pre-wrap; }
Sensible Case
-
+ IDID
-
+ ObjectObjecto
-
+ TypeTipo
-
+ Parent ObjectObjecto Padre
-
+ Parent TypeTipo del Padre
-
+ Found <strong>%1</strong> object(s).Encontrado objecto(s) <strong>%1</strong>.
-
+ No objects found.Objetos no encontrados.
@@ -9872,86 +9930,88 @@ p, li { white-space: pre-wrap; }
+ Duplicate item
+
+
+
+
+ Ctrl+D
+
+
+
+ Edit ItemEditar Item
-
+ SpaceEspacio
-
+ Move UpMover Arriba
-
+ Ctrl+UpCtrl+Up
-
+ Move DownMover Abajo
-
+ Ctrl+DownCtrl+Down
-
+ Move to startMover al inicio
-
+ Ctrl+HomeCtrl+Home
-
+ Move to endMover al final
-
+ Ctrl+End, Ctrl+SCtrl+End, Ctrl+S
-
-
+
+ ConfirmationConfirmación
-
+ Do you really want to remove the selected item?¿Realmente desea eliminar el elemento seleccionado?
-
- Do you really want to remove the all items?
- ¿Realmente desea eliminar los todos los artículos?
+
+ Do you really want to remove all the items?
+ OperationList
-
+ (invalid object)(objeto no válido)
-
- Undoing change on object `%1' (%2).
- Deshacer el cambio en el objeto `%1' (%2).
-
-
- Redoing change on object `%1' (%2).
- Rehacer el cambio en el objeto `%1' (%2).
- OperationListWidget
@@ -10008,65 +10068,53 @@ p, li { white-space: pre-wrap; }
Rehacer
-
+ Object: %1Objecto: %1
-
+ Name: %1Nambre: %1
-
+ createdcreado
-
+ removedremovido
-
+ modifiedmodificado
-
+ movedmovido
-
+ Operation: %1Operación: %1
- Undoing operations...
- Deshacer operaciones...
-
-
- Redoing operations...
- Rehacer operaciones...
-
-
-
+ Operation history exclusionExclusión del historia de Operación
-
+ Delete the executed operations history is an irreversible action, do you want to continue?Eliminar el historial de operaciones ejecutadas es una acción irreversible, es lo que quieres continuar?OperatorClassWidget
-
- Form
- Formulario
- Default Class:
@@ -10151,10 +10199,6 @@ p, li { white-space: pre-wrap; }
OperatorFamilyWidget
-
- Form
- Formulario
- Indexing:
@@ -10163,10 +10207,6 @@ p, li { white-space: pre-wrap; }
OperatorWidget
-
- Form
- Formulario
- MERGES
@@ -10235,10 +10275,6 @@ p, li { white-space: pre-wrap; }
ParameterWidget
-
- Form
- Formulario
- Default Value:
@@ -10267,10 +10303,6 @@ p, li { white-space: pre-wrap; }
PermissionWidget
-
- Form
- Formulario
-
@@ -10299,14 +10331,6 @@ p, li { white-space: pre-wrap; }
PrivilegesPrivilégios
-
- Grant
- Grant
-
-
- Revoke
- Revoke
- Edit permissions
@@ -10358,446 +10382,417 @@ p, li { white-space: pre-wrap; }
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>.
-
-
-
- -- 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!
-
-
-
- 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:
-
-
-
- %1, %2=[FILE] Input model file (.dbm). Mandatory use when fixing a model or exporting it.
- %1, %2=[FILE] Archivo de modelo de entrada (.dbm).Uso obligatorio al fijar un modelo o exportarlo.
-
-
-
- %1, %2=[FILE] Output file. Mandatory use when fixing model or export to file or png.
- %1, %2=[FILE] Archivo de salida. Disponible sólo en la exportación a un archivo o png.
-
-
-
- %1, %2 Try to fix the structure of the input model file in order to make it loadable again.
- %1, %2 Trate de fijar la estructura del archivo de modelo de entrada con el fin de hacer que se puede cargar de nuevo.
-
-
-
- %1, %2 Model fix tries. When reaching the maximum count the invalid objects will be discard.
- %1, %2 Trata fijar Modelo. Al alcanzar el número máximo se descartan los objetos no válidos.
-
-
-
- %1, %2 Export to a sql script file.
- %1, %2 Exportar a un archivo de secuencia de comandos SQL.
-
-
-
- %1, %2 Export to a png image.
- %1, %2 Exportar una imagen a png.
-
-
-
- %1, %2 Export directly to a PostgreSQL server.
- %1, %2 Exportar directamente a un servidor PostgreSQL.
-
-
-
- %1, %2 List available connections on %3 file.
- %1, %2 Lista de conexiones disponibles en archivo %3.
-
-
-
- %1, %2 Version of generated SQL code. Only for file or dbms export.
- %1, %2 Versión de código SQL generado. Sólo para archivo o dbms exportación.
-
-
-
- %1, %2 Silent execution. Only critical errors are shown during process.
- %1, %2 Ejecución silenciosa. Sólo los errores críticos se muestran durante el proceso.
-
-
-
- %1, %2 Show this help menu.
- %1, %2 Mostrar este menú de ayuda.
-
-
- PNG export options:
- opciones de exportación PNG:
+
+ Type:
+ Tipo:
-
- %1, %2 Draws the grid on the exported png image.
- %1, %2 Dibuja la cuadrícula en la imagen PNG exportado.
+
+ Role
+ Rol
-
- %1, %2 Draws the page delimiters on the exported png image.
- %1, %2 Dibuja los delimitadores de página en la imagen PNG exportado.
+
+ Id
+ Id
- %1, %2 Each page will be exported on a separated png image.
- %1, %2 Cada página se exportará en una imagen png separada.
+
+ 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>.
- %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4
- %1, %2=[FACTOR] Aplica un zoom (en porcentaje) antes de la exportación a la imagen png. Intervalo de zoom aceptado: %3-%4
+
+ -- No permissions defined for the specified object!
+ -- No hay permisos definidos para el objeto especificado!
-
- DBMS export options:
- Opciones de exportación del SGDB:
+
+ /* Could not generate the SQL code preview for permissions!
+ / * No se pudo generar el código SQL para previsualización permisos!
+
+
+ PgModelerCLI
-
- %1, %2 Ignores errors related to duplicated objects that eventually exists on server side.
- %1, %2 Ignora los errores relacionados con los objetos duplicados que existe el tiempo en el lado del servidor.
+
+ Unrecognized option '%1'.
+ Opción no reconocido '%1'.
-
- %1, %2 Drop the database before execute a export process.
- %1, %2 Borar la base de datos antes de ejecutar un proceso de exportación.
+
+ Value not specified for option '%1'.
+ El valor no se especifica para la opción '%1'.
-
- %1, %2 Runs the DROP commands attached to SQL-enabled objects.
- %1, %2 Ejecuta los comandos DROP unidos a objetos de SQL-habilitado.
+
+ Option '%1' does not accept values.
+ Opción '%1' no acepta valores.
-
- %1, %2 Simulates a export process. Actually executes all steps but undoing any modification.
- %1, %2 Simula un proceso de exportación. En realidad ejecuta todos los pasos pero deshacer cualquier modificación.
+
+ 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.
-
- %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode.
- > %1, %2 Genera nombres temporales para bases de datos, funciones y espacios de tabla cuando en el modo de simulación.
+
+ Usage: pgmodeler-cli [OPTIONS]
+ El uso: pgmodeler-cli [OPTIONS]
-
- %1, %2=[ALIAS] Connection configuration alias to be used.
- %1, %2=[ALIAS] Alias de configuración de conexión a utilizar.
+
+
+ command line interface.
+ interfaz de línea de comandos.
-
- %1, %2=[HOST] PostgreSQL host which export will operate.
- %1, %2=[HOST] Host PostgreSQL cuya exportación funcionará.
+
+ PostgreSQL Database Modeler Project - pgmodeler.com.br
+ Proyecto Modelador Base de datos PostgreSQL - pgmodeler.com.br
-
- %1, %2=[PORT] PostgreSQL host listening port.
- %1, %2=[PORT] PostgreSQL host puerto de escucha.
+
+ Copyright 2006-2015 Raphael A. Silva <raphael@pgmodeler.com.br>
+ Copyright 2006-2013 Raphael A. Silva <rkhaotix@gmail.com>
- %1, %2=[USER] PosrgreSQL username.
- %1, %2=[USER] Nombre de usuario PosrgreSQL.
+
+ 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.
- %1, %2=[PASSWORD] PosrgreSQL user password.
- %1, %2=[PASSWORD] Contraseña de usuario PosrgreSQL.
+
+ General options:
+ Opciones Generales:
-
- %1, %2=[DBNAME] Connection's initial database.
- %1, %2=[DBNAME] Base de datos inicial de conexión.
+
+ DBMS export options:
+ Opciones de exportación del SGDB:
-
+ Miscellaneous options: Otros Opciones:
-
- %1, %2=[ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4].
- %1, %2=[ACTION] Maneja la asociación de archivos a .dbm archivos. La acción puede ser [%3 | %4].
-
-
-
+ 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!
- Multiple export mode especified!
- Modo de exportación múltiple especifidado!
-
-
-
+ 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 ...
-
+ Loading input file: Cargando archivo de entrada:
-
+ Fixed model file: Fijando archivo de modelo:
-
+ Model successfully fixed!Modelo fijado correctamente!
- Mime database sucessfully updated.
- Base de datos de Mime actualizada correctamente.
+
+ PNG and SVG export options:
+
-
- 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] Input model file (.dbm). Mandatory use when fixing a model or exporting it.
+
+
+
+
+ %1, %2=[FILE] Output file. Mandatory use when fixing model or export to file or png.
+
+
+
+
+ %1, %2 Try to fix the structure of the input model file in order to make it loadable again.
- %1, %2 Export to a svg file.
+ %1, %2 Model fix tries. When reaching the maximum count the invalid objects will be discard.
+
+
+
+
+ %1, %2 Export to a sql script file.
+
+
+
+
+ %1, %2 Export to a png image.
+
+
+
+
+ %1, %2 Export to a svg file.
+
+
+
+
+ %1, %2 Export directly to a PostgreSQL server.
+
+
+
+
+ %1, %2 List available connections on %3 file.
+
+
+
+
+ %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.
-
- %1, %2 Each page will be exported on a separated png image. (Only for PNG)
+
+ %1, %2 Show this help menu.
- %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG)
+ %1, %2 Draws the grid on the exported png image.
+
+
+
+
+ %1, %2 Draws the page delimiters on the exported png image.
+
+
+
+
+ %1, %2 Each page will be exported on a separated png image. (Only for PNG)
+
+
+
+
+ %1, %2=[FACTOR] Applies a zoom (in percent) before export to png image. Accepted zoom interval: %3-%4 (Only for PNG)
+
+
+
+
+ %1, %2 Ignores errors related to duplicated objects that eventually exists on server side.
+
+
+
+
+ %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 a export process. Actually executes all steps but undoing any modification.
- %1, %2=[USER] PostgreSQL username.
+ %1, %2 Generates temporary names for database, roles and tablespaces when in simulation mode.
- %1, %2=[PASSWORD] PostgreSQL user password.
+ %1, %2=[ALIAS] Connection configuration alias to be used.
+
+
+
+
+ %1, %2=[HOST] PostgreSQL host which export 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.
+
+
+
+
+ %1, %2=[ACTION] Handles the file association to .dbm files. The ACTION can be [%3 | %4].
+
+
+
+ Multiple export mode specified!
-
+ Mime database successfully updated.
-
+ Export to PNG image: Exportar a imagen PNG:
-
+ Export to SVG file:
-
+ Export to SQL script file: Exportar a archivo de comandos SQL:
-
+ Export to DBMS: Exportar a SGDB:
-
+ Export successfully ended!Exportación terminó correctamente!
-
+ 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:
-
+ 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)
-
+ 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: %1Operació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...
@@ -10823,17 +10818,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.
-
+ disablingdeshabilitando
-
+ enablinghabilitando
@@ -10848,7 +10843,7 @@ modos se describen a continuación.
Data Type
- Tipo de Dado
+ Tipo de Dato
@@ -10929,7 +10924,7 @@ modos se describen a continuación.
[ ]:
-
+ NONENONE
@@ -10980,10 +10975,10 @@ modos se describen a continuación.
new_database
-
-
-
-
+
+
+
+ %1 (line: %2)%1 (line: %2)
@@ -11029,158 +11024,178 @@ modos se describen a continuación.
Modo de Conexión
-
- 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.
- Este modo está disponible sólo para <strong>uno-a-uno</strong>, <strong>uno-a-muchos</strong> y <strong>relaciones fk</strong> pero proporciona una mejor semántica al vincular tablas mediante la colocación de las líneas en el punto exacto donde se produce la relación.
-
-
-
+ Connect FK to PK columnsConecte FK a columnas PK
-
- This mode is the classical one. It connects the relationship to tables through their central points.
- Este modo es el clásico. Se conecta la relación a las tablas a través de sus puntos centrales.
+
+ 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 pointsConecte tabla a puntos central
-
+ FK Settings && PatternsConfigurar FK && Patrones
-
+ Foreign key settingsConfigurar llave foránea
-
+ Deferral:Diferimiento:
-
+ Deferrable:Diferible:
-
+ ON DELETE:ON DELETE:
-
+ ON UPDATE:ON UPDATE:
-
+ Name patternsNombre patrones
-
+ 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).Patrón de llave foránea generada basa en pk de las tablas de referencia (1-1 y 1-n) o basada en pk (nn) de las tablas de origen.
-
+ Foreign Key (Source):Llave Foránea (Fuente):
-
+ Relationship type:Tipo de relación:
-
+ Pattern for columns generated based upon target table's pk (n-n).Patrón de columnas generadas basa en pk (nn) de las tablas de destino.
-
+ Column (Target):Columna (Target):
-
+ 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)muchos a muchos (n:n)
-
+ GeneralizationGeneralización
-
+ CopyCopia
-
+ Pattern for columns generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n).Patrón de columnas generadas basa en pk de las tablas de referencia (1-1 y 1-n) o basada en pk (nn) de las tablas de origen.
-
+ Column (Source):Column (Fuente):
-
+ Pattern for foreign key generated based upon target table's pk (n-n).Patrón de llave foránea generada basa en pk (nn) de las tablaa de destino.
-
+ Foreign Key (Target):Lave Foránea (Destino):
-
+ Pattern for unique key generated by the relationship.Patrón de llave única generada por la relación.
-
+ Unique Key Name:Nombre Llave Única:
-
-
+
+ Pattern for primary key generated by identifier relationship.Patrón para la llave primaria generada por la relación identificador.
-
+ Primary Key Name:Nombre Llave Primaria:
-
+ Primary Key Column:Columna Llave Primaria:
-
+ Defaultpor Defecto
@@ -11188,331 +11203,311 @@ modos se describen a continuación.
RelationshipWidget
- Form
- Formulario
-
-
-
+ GeneralGeneral
-
+ Table 1:Tabla 1:
-
+ Name PatternsNombre Patrones
-
-
+
+ Use the values defined on settings dialogs for the fields belowUtilice los valores definidos en la configuración de los cuadros de diálogo de los campos siguientes
-
-
+
+ Use global settings for these fieldsUtilice la configuración global de estos campos
-
+ Pattern for columns generated based upon reference table's pk (1-1 and 1-n) or based upon source table's pk (n-n).Patrón de columnas generadas basa en pk de las tablas de referencia (1-1 y 1-n) o basada en pk (nn) de las tablas de origen.
-
+ Column (Source):Columna (Fuente):
-
+ Pattern for columns generated based upon target table's pk (n-n).Patrón de columnas generadas basa en pk (nn) de las tablas de destino.
- Column (Destino):
- Columna (Destino):
-
-
-
+ Column (Target):Columna (Target):
-
+ 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).Patrón de llave foránea generada basa en pk de las tablas de referencia (1-1 y 1-n) o basada en pk (nn) de las tablas de origen.
-
+ Foreign Key (Source):Llave Foránea (Fuente):
-
+ Pattern for foreign key generated based upon target table's pk (n-n).Patrón de llave foránea generada basa en pk (nn) de tabla de destino.
-
+ Foreign Key (Target):Llave Foránea (Destino):
-
-
+
+ Pattern for primary key generated by identifier relationship.Patrón para la llave primaria generada por la relación identificador.
-
+ Primary Key Name:Nombre Llave Primaria:
-
+ Pattern for unique key generated by the relationship.Patrón de llave única generada por la relación.
-
+ Unique Key Name:Nombra Llave Única:
-
+ Primay Key Column:Columna Llave Primaria:
-
+ Cardinality:Cardinalidad:
-
-
+
+ Name of the table generated from many to many relationshipNombre de la tabla generada a partir de relación muchos a muchos
-
+ Gen. Table Name:Nombre tabla Gen.:
-
+ Rel. Type:Tipo Rel.:
-
+ Table 2:Tabla 2:
-
+ [SRC] is required[SRC] es requirido
-
+ [DST] is required[DST] es requirido
-
+ Foreign key SettingsConfiguración de Llave Foránea
-
+ Deferrable:Diferible:
-
+ Deferral:Diferimiento:
-
+ ON DELETE:
-
+ ON UPDATE:ON DELETE:
-
+ One to one relationshipRelación uno a uno
-
+ &1-1
-
+ &gen
-
+ E&XCLUDING
- 1-1
- 1-1
-
-
-
+ One to many relationshipRelación de uno a muchos
-
+ 1-n1-n
-
+ Many to many relationshipRelación de muchos a muchos
-
+ n-nn-n
-
+ Generalization relationship (inheritance)Relación de generalización (herencia)
- gen
- gen
-
-
-
+ Dependency / Copy relationshipRelación de Dependencia / Copia
-
+ depdep
-
+ Relationship generated via foreign keyRelación generada a través de clave externa
-
+ fkfk
-
+ The receiver's primary key will be composed by the generated foreign key columns.Clave principal del receptor estará compuesta por las columnas llave foránea generadas.
-
+ IdentifierIdentificador
-
+ Instead of create a multi-valued primary key with the generated foreign keys columns a single column is created and used as primary key.En lugar de crear una clave principal de varios valores con las teclas extranjero generada columnas se crea una sola columna y se utiliza como clave principal.
-
+ Single PK columnUna sola columna PK
-
+ Custom Color:Color personalizado:
-
+ Copy OptionsOpciones de copia
-
+ INDEXESINDEXES
-
+ COMMENTSCOMMENTS
-
+ INCLUDINGINCLUDING
-
+ DEFAULTSDEFAULTS
- EXCLUDING
- EXCLUDING
-
-
-
+ CONSTRAINTSCONSTRAINTS
-
+ Use defaultsUsar valores predeterminados
-
+ ALLALL
-
+ STORAGESTORAGE
-
+ AttributesAtributos
-
+ ConstraintsResticciones
-
+ Primary keyLlave Primaria
-
+ AdvancedAvanzado
@@ -11548,10 +11543,6 @@ modos se describen a continuación.
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 pestaña avanzado muestra los objetos (columnas o tabla) de automóviles creados por la conexión de la relación, así las claves externas que representa el enlace entre las mesas de los participantes.
-
- 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>
- Fichas disponibles para definir patrones de nombre:<br/> <strong>%1</strong> = Referencia (fuente) nombre de la columna de clave principal. <em>(Ignorado en los patrones de restricción)</em><br/> <strong>%2</strong> = Referencia (fuente) nombre de la tabla.<br/> <strong>%3</strong> = Receptor (destino) nombre de la tabla.<br/> <strong>%4</strong> = Nombre de la tabla generada. <em>(Sólo para relaciones n: n)</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>
@@ -11563,80 +11554,76 @@ 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 requeridoRoleWidget
-
- Form
- Formulario
- yyyy-MMM-dd hh:mm:ss
@@ -11716,12 +11703,6 @@ modos se describen a continuación.
EncryptedEncriptada
-
- 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.
- Asignación <strong><em>-1</em></strong> pra <strong><em>Conexiones/em></strong> crea un rol sin límite de conexión.<br
->
-Desmarcando <strong><em>Validity</em></strong> crea un rol que nunca expire.
- 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.
@@ -11735,10 +11716,6 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
RuleWidget
-
- Form
- Formulario
- Event:
@@ -11783,225 +11760,264 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
Formulario
-
- Load SQL script
- Cargar script de comandos SQL
+
+ Save SQL commands
+ Guardar comandos SQL
-
- &Load
- &Cargar
+
+ Search in SQL code
+
-
-
- Save SQL commands
- Guardar comandos SQL
+
+ Close the current SQL script
+
-
- &Save
- &Guardar
+
+ SQL script currently handled
+
-
- Search in SQL code
+
+ (not saved)
+
+
+
+
+ Handle external SQL script
-
- &Find
- &Buscar
+
+ &Script
+
-
+ Alt+FAlt+F
-
+
+ Fi&nd
+
+
+
+
+ Ctrl+S
+ Ctrl+S
+
+
+ Run the specified SQL commandEjecutar un comando SQL especificada
-
+ Run SQLEjecutar SQL
-
+ F6F6
-
+ Clear sql input field and resultsLimpiar campo de entrada de SQL y resultados
-
+ Clear AllLimpiar Todos
-
-
+
+ Export results to a CSV fileExportar resultados a un acchivo CSV
-
+ Snippe&tsSnippe&ts
-
+ E&xportE&xportar
-
+ Toggles the output pane
-
+ &Output
-
+ Alt+OAlt+O
-
-
-
- Results
+
+ Current working database
-
- Messages
+
+
+
+ Results
-
- History
+
+ Messages
- Shows the command history
- Mostrar histórico de comandos
-
-
- &History
- &Histórico
-
-
- Alt+H
- Alt+H
-
-
- Command History
- Histórico de Comandos
-
-
- Clear sql input field and results.
- Limpiar campo de entrada sql y los resultados.
-
-
- Clear
- Limpiar
+
+ History
+
-
-
+
+
+ ......
- 0
- 0
+
+ SQL file (*.sql);;All files (*.*)
+ Archivo SQL (*.sql);;Todos los archivos (*.*)
- Rows returned:
- Filas retornadas:
+
+ Load
+ Cargar
-
- SQL file (*.sql);;All files (*.*)
- Archivo SQL (*.sql);;Todos los archivos (*.*)
+
+ Save
+
-
- [binary data]
- [datos binarios]
+
+ Save as
+ Guardar como
- [<strong>%1</strong>] SQL command successfully executed. <em>Rows affected <strong>%2</strong></em>
- [<strong>%1</strong>] Comando SQL ejecutado con éxito. <em>Filas afectadas <strong>%2</strong></em>
+
+ [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>
-
+ Rows affected
-
+ Rows retrieved
-
+ Load SQL commandsCargar comandos SQL
-
+ Save CSV fileGuardar 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 selectionCopiar 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?
@@ -12013,110 +12029,125 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
Formulario
-
+ Database explorerExplorar Base de Datos
-
+ Disconnect from all databases
-
+ Update the database list
-
+ Toggle the object's attributes grid
-
+ AttributesAtributos
-
+ Alt+RAlt+R
-
+ Toggle the display of source code pane
-
-
+
+ Source codeCódigo fuente
- Connect to server
- Conectar al servidor
-
-
-
-
+
+ ......
- Disconnect from server
- Desconectar del servidor
+
+ SQL execution
+ Ejecutar SQL
- Browse selected database.
- Explorar base de datos seleccionada.
+
+ Warning
+ Advertencia
- Drop the selected database
- Borrar base de datos seleccionada
+
+ <strong>ATTENTION:</strong> Disconnect from all databases will close any opened tab in this view! Do you really want to proceed?
+
+
+
+ SceneInfoWidget
- Shift+Del
- Shift+Del
+
+ Form
+ Formulario
- Update the database list.
- Actualizar listado de base de datos.
+
+
+ Current position of the mouse in the canvas
+
-
- SQL execution
- Ejecutar SQL
+
+
+
+
+ -
+
-
-
-
- Warning
- Advertencia
+
+
+ Currently selected object(s)
+
-
- <strong>ATTENTION:</strong> Disconnect from all databases will close any opened tab in this view! Do you really want to proceed?
+
+
+ Dimensions of the selected object(s)
-
- <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?
+
+
+ Current zoom factor
+
-
- 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!
+
+ No selection
+
+
+
+
+ N/A
+
+
+
+
+ Sel. objects: %1
+ SchemaWidget
-
- Form
- Formulario
- Fill color:
@@ -12130,10 +12161,6 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
SequenceWidget
-
- Form
- Formulario
- Cyclic:
@@ -12334,10 +12361,6 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
SourceCodeWidget
-
- Form
- Formulario
- Version:
@@ -12349,47 +12372,47 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
PostgreSQL
-
+ iconecodigoiconecodigo
-
+ SQLSQL
-
+ Code display:Visualización de Código:
-
+ OriginalOriginales
-
+ Original + depedencies' SQLOriginales + SQL dependientes
-
+ Original + children's SQLOriginales + SQL hijos
-
+ Save the SQL code to a file.Guardar el código SQL code para un archivo.
-
+ Save SQLGuardar SQL
-
+ XMLXML
@@ -12403,10 +12426,6 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
Source code visualizationVisualización del código fuente
-
- <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>Originales:</strong> muestra sólo el código SQL del objeto original.<br/><br/><strong>Dependencias:</strong> muestra el código original, incluyendo todas las dependencias necesarias para crear correctamente el objeto seleccionado. <br/><br/><strong>Hijos:</strong> muestra el código original incluyendo el código SQL de todos los hijos. Esta opción sólo se utiliza por esquemas, tablas y vistas.
- <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.
@@ -12459,14 +12478,6 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
-- SQL code purposely truncated at this point in demo version!
-
-
-
--- SQL code purposely truncated at this point on demo version!
-
-
--- Código SQL propósito trunca en este punto en versión demo!
- -- SQL code unavailable for this type of object --
@@ -12480,10 +12491,6 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
SwapObjectsIdsWidget
-
- Form
- Formulario
- Change objects creation order
@@ -12496,27 +12503,67 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
-
+ ID:ID:
-
+ Before:Anterior:
-
- 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.
- Se recomienda utilizar esta función sólo cuando la validación de SQL falla en los casos cuando un objeto se hace referencia en las partes donde la validación ordinario no podría alcanzar, por ejemplo, en el interior de un comando regla o el chequeo de la expresión de restricción.
+
+ 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
+ ID
+
+
+
+ Object
+ Objecto
+
+
+
+ Type
+ Tipo
+
+
+
+ Parent Object
+
+
+
+
+ Parent Type
+ Tipo del Padre
-
+ Swap the values of the fieldsCambie los valores de los campos
-
+ Swap valuesCambie los valores
@@ -12524,12 +12571,12 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
Table
-
+ new_tablenueva_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'
@@ -12542,154 +12589,120 @@ Desmarcando <strong><em>Validity</em></strong> crea un r
-
+ Add empty rows
-
-
- Add
+
+ Ins
+ Ins
+
+
+
+ Fills the grid using a CSV file
-
- Ins
- Ins
+
+ <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>
+
-
+ 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
-
+ Remove all rows from the grid preserving columns
-
-
- Clear
- Limpiar
-
-
-
+ Shift+DelShift+Del
-
+ Delete the selected rows
-
-
- Delete
-
-
-
-
-
+
+ DelDel
-
- <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
-
+ 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
-
-
- (no columns)
-
- TableObjectView
-
+
Relationship: %1
Relación: %1
-
- TableView
-
-
- Connected rels: %1
- Rels conectados: %1
-
-TableWidget
-
- Form
- Formulario
- Options
@@ -12718,7 +12731,7 @@ Relación: %1
&Columns
-
+ &Columnas
@@ -12733,59 +12746,35 @@ Relación: %1
&Rules
-
+ &Reglas&Indexes
-
+ &Indíces&Tables
-
-
-
- Columns
- Columnas
-
-
- Constraints
- Restricciones
-
-
- Triggers
- Triggers
-
-
- Rules
- Reglas
-
-
- Indexes
- Índices
-
-
- Tables
- Tablas
+ &TablasEdit data
-
+ Editar datosDefine initial data for the table
-
+ Definir los datos iniciales de la tabla
-
-
-
+
-
+
+
+ NameNombre
@@ -12796,68 +12785,83 @@ Relación: %1
-
-
+
+ TypeTipo
-
+
+ PK
+
+
+
+ Default ValueValor por defecto
-
- Attribute
- Atributos
+
+ 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 DELETEON DELETE
-
+ ON UPDATEON UPDATE
-
+ Refer. TableTabla Refer
-
+ FiringFiring
-
+ EventsEventos
-
+ ExecutionEjecución
-
+ EventEvento
-
+ IndexingIndezado
-
+ ParentPadre
-
+ CopyCopia
@@ -12877,10 +12881,6 @@ Relación: %1
TagWidget
-
- Form
- Formulario
- Colors
@@ -12915,23 +12915,19 @@ Relación: %1
TaskProgressWidget
-
+ Executing tasksEjecutando tareas
-
-
+
+ Waiting task to start...Esperando tarea para empezar...TextboxWidget
-
- Form
- Formulario
- Font:
@@ -12975,10 +12971,6 @@ Relación: %1
TriggerWidget
-
- Form
- Formulario
- Constraint
@@ -13065,22 +13057,18 @@ Relación: %1
Ejecución:
-
+ ColumnColumna
-
+ TypeTipoTypeWidget
-
- Form
- Formulario
- Range
@@ -13223,10 +13211,6 @@ Relación: %1
Co&mposite
-
- Composite
- Compuesto
- Enumerations
@@ -13297,12 +13281,6 @@ Relación: %1
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>
-
- 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 f
- unction(internal)</em></td> <tr> </table>
- Las funciones que se asignará a un tipo deben ser escritos en lenguaje C y poseen, respectivamente, las siguientes firmas:<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>bool
- ean 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>
@@ -13316,10 +13294,6 @@ Relación: %1
Update NotifierNotificación de Actualizaciones
-
- New update found!
- Nueva actualización encontrado!
- Hide this widget
@@ -13340,10 +13314,6 @@ Relación: %1
mmm dd, yyyymmm dd, yyyy
-
- Version:
- Versión:
- Update found!
@@ -13385,52 +13355,34 @@ Relación: %1
Obtener el código fuente
- <strong>Note:</strong> Both actions below will open a new web browser window
- <strong>Note:</strong> Ambas acciones continuación se abrirá una nueva ventana del navegador web
-
-
-
- Recover a package
- Recuperar un paquete
-
-
-
- Purchase a new package
- Comprar un nuevo paquete
-
-
-
-
+
+ Failed to check updatesNo se ha podido comprobar las actualizaciones
-
- The update notifier failed to check for new versions! Please, verify your internet connectivity and try again! Connection error returned: <strong>%1</strong>.
- El notificador de actualización no pudo comprobar si hay nuevas versiones! Por favor, verifique su conexión a Internet y vuelve a intentarlo! Error de conexión devuelto: <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 foundNo se encontraron actualizaciones
-
+ You are running the most recent pgModeler version! No update needed.Está ejecutando la versión más reciente pgModeler! Ninguna actualización necesaria.
-
+ The update notifier failed to check for new versions! A HTTP status code was returned: <strong>%1</strong>El notificador de actualización no pudo comprobar si hay nuevas versiones! Un código de estado HTTP fue devuelto: <strong>%1</strong>ViewWidget
-
- Form
- Formulario
- References
@@ -13462,12 +13414,12 @@ Relación: %1
Usado en:
-
+ ColumnColumna
-
+ ExpressionExpresión
@@ -13507,126 +13459,129 @@ Relación: %1
Alias de Columna:
-
+ TriggersTriggers
-
+ RulesReglas
-
+
+ Indexes
+ Índices
+
+
+ Table ExpressionExpresión de tabla
-
+ Code PreviewVista previa código
-
+ OptionsOpciones
-
+ Tag:Tag:
-
+ Mode:Modo:
-
+ OrdinaryOrdinario
-
+ Recursi&ve
-
+ &Materialized
- Recursive
- Recursivo
-
-
- Materialized
- Materializada
-
-
-
+ With no dataSin datos
-
+ Col./Expr.Col./Expr.
-
+ AliasAlias
-
+ Alias Col.Alias Col.
-
+ Flags: SF FW AW VDBanderas: 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].[tablel].*</strong></em>
- Para hacer referencia a todas las columnas de una tabla (*) simplemente no llenar el campo <strong>Column</strong>, este es el mismo que el de escritura <em><strong>[schema].[tablel].*</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>
+
-
-
+
+
+ NameNombre
-
+ Refer. TableRefer. Tabla
-
+ FiringFiring
-
+ EventsEventos
-
+
+ Indexing
+ Indexación
+
+
+ ExecutionEjecución
-
+ EventEvento
-
+ /* 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!
@@ -13651,17 +13606,17 @@ Relación: %1
Sample models
- Ejemplo de modoles
+ Ejemplo de modelosRecent models
- Modelos Recientes
+ Modelos recientesLast session
- Última sesión
+ Última sesión
diff --git a/libobjrenderer/src/baseobjectview.cpp b/libobjrenderer/src/baseobjectview.cpp
index a3ffe261d..1a21cd06a 100644
--- a/libobjrenderer/src/baseobjectview.cpp
+++ b/libobjrenderer/src/baseobjectview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -344,8 +344,8 @@ QLinearGradient BaseObjectView::getFillStyle(const QString &id)
{
if(id==ParsersAttributes::OBJ_SELECTION || id==ParsersAttributes::PLACEHOLDER)
{
- colors[0].setAlpha(128);
- colors[1].setAlpha(128);
+ colors[0].setAlpha(OBJ_ALPHA_CHANNEL);
+ colors[1].setAlpha(OBJ_ALPHA_CHANNEL);
}
grad.setCoordinateMode(QGradient::ObjectBoundingMode);
@@ -369,7 +369,7 @@ QPen BaseObjectView::getBorderStyle(const QString &id)
if(!colors.empty())
{
if(id==ParsersAttributes::OBJ_SELECTION)
- colors[2].setAlpha(128);
+ colors[2].setAlpha(OBJ_ALPHA_CHANNEL);
pen.setWidthF(OBJ_BORDER_WIDTH);
pen.setColor(colors[2]);
@@ -631,17 +631,19 @@ void BaseObjectView::togglePlaceholder(bool visible)
}
}
-float BaseObjectView::getFontFactor(void)
+double BaseObjectView::getFontFactor(void)
{
return(font_config[ParsersAttributes::GLOBAL].font().pointSizeF()/DEFAULT_FONT_SIZE);
}
-float BaseObjectView::getScreenDpiFactor(void)
+double BaseObjectView::getScreenDpiFactor(void)
{
- float 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 cc201a138..5a7aba761 100644
--- a/libobjrenderer/src/baseobjectview.h
+++ b/libobjrenderer/src/baseobjectview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -114,7 +114,9 @@ class BaseObjectView: public QObject, public QGraphicsItemGroup {
static constexpr double VERT_SPACING=2.0f,
HORIZ_SPACING=2.0f,
DEFAULT_FONT_SIZE=9.0f,
- OBJ_BORDER_WIDTH=0.80f;
+ OBJ_BORDER_WIDTH=0.85f;
+
+ static constexpr int OBJ_ALPHA_CHANNEL=128;
BaseObjectView(BaseObject *object=nullptr);
virtual ~BaseObjectView(void);
@@ -176,10 +178,10 @@ class BaseObjectView: public QObject, public QGraphicsItemGroup {
/*! \brief Returns the current font DPI factor of the screen. This factor is used to resize
* objects according to the screen's resolution/font dpi */
- static float getScreenDpiFactor(void);
+ static double getScreenDpiFactor(void);
//! \brief Returns the current factor between the default font size and the current defined one
- static float getFontFactor(void);
+ static double getFontFactor(void);
protected slots:
//! \brief Make the basic object operations
diff --git a/libobjrenderer/src/basetableview.cpp b/libobjrenderer/src/basetableview.cpp
index 4fa5ac7e3..362d3f76f 100644
--- a/libobjrenderer/src/basetableview.cpp
+++ b/libobjrenderer/src/basetableview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -74,8 +74,6 @@ BaseTableView::BaseTableView(BaseTable *base_tab) : BaseObjectView(base_tab)
this->setAcceptHoverEvents(true);
sel_child_obj=nullptr;
- connected_rels=0;
-
configurePlaceholder();
}
@@ -159,6 +157,8 @@ void BaseTableView::mousePressEvent(QGraphicsSceneMouseEvent *event)
if(!this->isSelected() && event->buttons()==Qt::LeftButton &&
this->ext_attribs_toggler->boundingRect().contains(pnt))
{
+ Schema *schema = dynamic_cast(this->getSourceObject()->getSchema());
+
//We need to force the object to be not selectable so further calls to mousePressEvent doesn't select the object
this->setFlag(QGraphicsItem::ItemIsSelectable, false);
@@ -173,6 +173,9 @@ void BaseTableView::mousePressEvent(QGraphicsSceneMouseEvent *event)
// Using a single shot time to restore the selectable flag
QTimer::singleShot(300, [&]{ this->setFlag(QGraphicsItem::ItemIsSelectable, true); });
+ //Updating the schema box that holds the object (if visible)
+ schema->setModified(true);
+
emit s_extAttributesToggled();
}
@@ -260,10 +263,48 @@ void BaseTableView::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
}
}
-void BaseTableView::updateConnectedRelsCount(int inc)
+void BaseTableView::addConnectedRelationship(BaseRelationship *base_rel)
+{
+ BaseTable *tab = dynamic_cast(getSourceObject());
+
+ if(!base_rel ||
+ (base_rel &&
+ base_rel->getTable(BaseRelationship::SRC_TABLE) != tab &&
+ base_rel->getTable(BaseRelationship::DST_TABLE) != tab))
+ return;
+
+ connected_rels.push_back(base_rel);
+}
+
+void BaseTableView::removeConnectedRelationship(BaseRelationship *base_rel)
+{
+ connected_rels.erase(std::find(connected_rels.begin(), connected_rels.end(), base_rel));
+}
+
+int BaseTableView::getConnectedRelationshipIndex(BaseRelationship *base_rel)
+{
+ vector::iterator itr = std::find(connected_rels.begin(), connected_rels.end(), base_rel);
+
+ if(itr != connected_rels.end())
+ return(itr - connected_rels.begin());
+
+ return(-1);
+}
+
+unsigned BaseTableView::getConnectedRelsCount(BaseTable *src_tab, BaseTable *dst_tab)
{
- connected_rels+=inc;
- if(connected_rels < 0) connected_rels=0;
+ unsigned count = 0;
+
+ for(auto &rel : connected_rels)
+ {
+ if((rel->getTable(BaseRelationship::SRC_TABLE) == src_tab &&
+ rel->getTable(BaseRelationship::DST_TABLE) == dst_tab) ||
+ (rel->getTable(BaseRelationship::SRC_TABLE) == dst_tab &&
+ rel->getTable(BaseRelationship::DST_TABLE) == src_tab))
+ count++;
+ }
+
+ return(count);
}
void BaseTableView::configureTag(void)
@@ -315,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())
{
@@ -342,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));
@@ -427,7 +469,7 @@ float BaseTableView::calculateWidth(void)
int BaseTableView::getConnectRelsCount(void)
{
- return(connected_rels);
+ return(connected_rels.size());
}
void BaseTableView::requestRelationshipsUpdate(void)
@@ -437,6 +479,6 @@ void BaseTableView::requestRelationshipsUpdate(void)
void BaseTableView::togglePlaceholder(bool value)
{
- BaseObjectView::togglePlaceholder(connected_rels > 0 && value);
+ BaseObjectView::togglePlaceholder(!connected_rels.empty() && value);
}
diff --git a/libobjrenderer/src/basetableview.h b/libobjrenderer/src/basetableview.h
index 261f2e108..67b6b75f0 100644
--- a/libobjrenderer/src/basetableview.h
+++ b/libobjrenderer/src/basetableview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -30,14 +30,14 @@
#include "tabletitleview.h"
#include "tableobjectview.h"
#include "roundedrectitem.h"
+#include "baserelationship.h"
class BaseTableView: public BaseObjectView {
private:
Q_OBJECT
- /*! \brief Stores the number of relationships connected to this table. This attribute is used
- by the rearrange method on ModelWidget */
- int connected_rels;
+ /*! \brief Stores the references to the relationships connected to this table. */
+ vector connected_rels;
protected:
//! \brief Item groups that stores columns and extended attributes, respectively
@@ -71,8 +71,11 @@ class BaseTableView: public BaseObjectView {
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
- //! \brief Updates the current connected relationship count
- void updateConnectedRelsCount(int inc);
+ void addConnectedRelationship(BaseRelationship *base_rel);
+
+ void removeConnectedRelationship(BaseRelationship *base_rel);
+
+ int getConnectedRelationshipIndex(BaseRelationship *base_rel);
//! \brief Configures the tag object when the source object has one.
void configureTag(void);
@@ -116,6 +119,8 @@ class BaseTableView: public BaseObjectView {
//! \brief Toggles the placeholder object when there is at least one relationship connected to the object
virtual void togglePlaceholder(bool value);
+ unsigned getConnectedRelsCount(BaseTable *src_tab, BaseTable *dst_tab);
+
signals:
//! \brief Signal emitted when a table is moved over the scene
void s_objectMoved(void);
diff --git a/libobjrenderer/src/beziercurveitem.cpp b/libobjrenderer/src/beziercurveitem.cpp
index 34b7efd0e..d18f64662 100644
--- a/libobjrenderer/src/beziercurveitem.cpp
+++ b/libobjrenderer/src/beziercurveitem.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -21,7 +21,7 @@
BezierCurveItem::BezierCurveItem(QGraphicsItem *parent) : QGraphicsPathItem(parent)
{
- simple_curve = false;
+ invert_cpoints = simple_curve = straight_line = false;
}
void BezierCurveItem::setPath(const QPainterPath &path)
@@ -31,61 +31,83 @@ void BezierCurveItem::setPath(const QPainterPath &path)
stroke = ps.createStroke(path);
}
-void BezierCurveItem::setLine(const QLineF &line, bool simple_curve, unsigned rel_type)
+void BezierCurveItem::setLine(const QLineF &line, bool simple_curve, bool invert_cpoints)
{
QPainterPath path;
- QRectF brect;
- QPointF control_pnt;
+ this->straight_line = false;
+ this->invert_cpoints = invert_cpoints;
this->simple_curve = simple_curve;
- if(simple_curve)
+ if(line.dx() == 0 || line.dy() == 0)
{
- if(rel_type == BaseRelationship::RELATIONSHIP_FK)
+ path = QPainterPath(line.p1());
+ path.lineTo(line.p2());
+ this->straight_line = true;
+ }
+ else
+ {
+ if(simple_curve)
{
- brect.setTopLeft(line.p1());
- brect.setBottomRight(line.p2());
- control_pnt = QPointF(brect.right(), brect.top());
+ QPointF cp1, start, end;
+
+ start = line.p1();
+ end = line.p2();
+
+ if(!invert_cpoints)
+ cp1 = QPointF(start.x(), end.y());
+ else
+ cp1 = QPointF(end.x(), start.y());
+
+ path = QPainterPath(start);
+ path.quadTo(cp1, end);
}
else
{
- if(line.angle() >= 0 && line.angle() <= 180)
+ QRectF brect;
+
+ if(!invert_cpoints)
{
brect.setTopLeft(line.p1());
brect.setBottomRight(line.p2());
- control_pnt = QPointF(brect.left(), brect.bottom());
+ path = QPainterPath(brect.topLeft());
+
+ path.cubicTo(QPointF(brect.center().x(), brect.top()),
+ QPointF(brect.center().x(), brect.bottom()),
+ brect.bottomRight());
}
else
{
- brect.setTopLeft(line.p2());
- brect.setBottomRight(line.p1());
- control_pnt = QPointF(brect.right(), brect.top());
+ brect.setBottomLeft(line.p1());
+ brect.setTopRight(line.p2());
+ path = QPainterPath(brect.topRight());
+
+ path.cubicTo(QPointF(brect.right(), brect.center().y()),
+ QPointF(brect.left(), brect.center().y()),
+ brect.bottomLeft());
+
}
}
}
- else
- {
- brect.setTopLeft(line.p1());
- brect.setBottomRight(line.p2());
- }
-
- path = QPainterPath(brect.topLeft());
-
- if(simple_curve)
- path.quadTo(control_pnt, brect.bottomRight());
- else
- path.cubicTo(QPointF(brect.center().x(), brect.top()),
- QPointF(brect.center().x(), brect.bottom()),
- brect.bottomRight());
this->setPath(path);
}
+bool BezierCurveItem::isControlPointsInverted(void)
+{
+ return(invert_cpoints);
+}
+
bool BezierCurveItem::isSimpleCurve(void)
{
return(simple_curve);
}
+bool BezierCurveItem::isStraightLine(void)
+{
+ return(straight_line);
+}
+
bool BezierCurveItem::contains(const QPointF &pnt) const
{
return(stroke.contains(pnt));
diff --git a/libobjrenderer/src/beziercurveitem.h b/libobjrenderer/src/beziercurveitem.h
index 95601908c..7f8da09c6 100644
--- a/libobjrenderer/src/beziercurveitem.h
+++ b/libobjrenderer/src/beziercurveitem.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -33,24 +33,37 @@ class BezierCurveItem: public QGraphicsPathItem {
* This object is used to do a better colision detection */
QPainterPath stroke;
- /*! \brief Indicate if the curve is a simple one.
- * Simple curves in this case are quadratic ones where only a single
- * control point is used. Non-simple curves are cubic where two control points are used.
- * See QPainterPath::quadTo and QPainterPath::cubicTo for details. */
+ bool invert_cpoints;
+
bool simple_curve;
+ bool straight_line;
+
protected:
void setPath(const QPainterPath &path);
public:
BezierCurveItem(QGraphicsItem *parent = 0);
- //! \brief Configures the curve based upon a straight line.
- void setLine(const QLineF &line, bool simple_curve, unsigned rel_type);
+ /*! \brief Configures the curve based upon a straight line.
+ *
+ * The simple_curve param causes the curve to be drawn using the quadratic mode and one control point.
+ * Non-simple curves are cubic ones where two control points are used.
+ * See QPainterPath::quadTo and QPainterPath::cubicTo for details.
+ *
+ * The invert_cpoints param causes the control points of the curve to be inverted
+ * making the curve to be drawn inverted. */
+ void setLine(const QLineF &line, bool simple_curve, bool invert_cpoints);
- //! \brief Returns if the curve is a simple one (quardatic - one control point) or not (cubic - two control points)
+ //! \brief Returns if the curve has the control points inverted
+ bool isControlPointsInverted(void);
+
+ //! \brief Returns if the curve is a simple one (with only one control point)
bool isSimpleCurve(void);
+ //! \brief Returns if the curve object was created from a straight line (90 or 180 degrees)
+ bool isStraightLine(void);
+
//! \brief Returns if the specified point is contained by the curve (specifically, by the stroke)
virtual bool contains(const QPointF &pnt) const;
diff --git a/libobjrenderer/src/graphicalview.cpp b/libobjrenderer/src/graphicalview.cpp
index 12b832ac1..d1dccd584 100644
--- a/libobjrenderer/src/graphicalview.cpp
+++ b/libobjrenderer/src/graphicalview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/graphicalview.h b/libobjrenderer/src/graphicalview.h
index 5c1f962c9..74f559582 100644
--- a/libobjrenderer/src/graphicalview.h
+++ b/libobjrenderer/src/graphicalview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/objectsscene.cpp b/libobjrenderer/src/objectsscene.cpp
index 71d67e9fc..64bb7337a 100644
--- a/libobjrenderer/src/objectsscene.cpp
+++ b/libobjrenderer/src/objectsscene.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -477,10 +477,21 @@ void ObjectsScene::removeItem(QGraphicsItem *item)
}
}
+void ObjectsScene::blockItemsSignals(bool block)
+{
+ BaseObjectView *obj_view = nullptr;
+
+ for(auto &item : this->items())
+ {
+ obj_view = dynamic_cast(item);
+ if(obj_view)
+ obj_view->blockSignals(block);
+ }
+}
+
void ObjectsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mouseDoubleClickEvent(event);
- //enablePannigMode(false);
if(this->selectedItems().size()==1 && event->buttons()==Qt::LeftButton && !rel_line->isVisible())
{
@@ -499,6 +510,7 @@ void ObjectsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
//Gets the item at mouse position
QGraphicsItem* item=this->itemAt(event->scenePos().x(), event->scenePos().y(), QTransform());
+ bool is_deselection = !this->selectedItems().isEmpty() && !this->itemAt(event->scenePos(), QTransform());
if(selectedItems().empty())
emit s_objectsScenePressed(event->buttons());
@@ -510,8 +522,17 @@ void ObjectsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
if(rel_line->isVisible())
event->setModifiers(Qt::ControlModifier);
+ if(is_deselection)
+ this->blockItemsSignals(true);
+
QGraphicsScene::mousePressEvent(event);
+ if(is_deselection)
+ {
+ this->blockItemsSignals(false);
+ emit s_objectSelected(nullptr, false);
+ }
+
if(event->buttons()==Qt::LeftButton)
{
sel_ini_pnt=event->scenePos();
@@ -834,12 +855,18 @@ void ObjectsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
QPainterPath sel_area;
sel_area.addRect(selection_rect->polygon().boundingRect());
+
+ this->blockItemsSignals(true);
this->setSelectionArea(sel_area, Qt::IntersectsItemShape);
+ this->blockItemsSignals(false);
selection_rect->setVisible(false);
selection_rect->setPolygon(pol);
sel_ini_pnt.setX(NAN);
sel_ini_pnt.setY(NAN);
+
+ if(!this->selectedItems().isEmpty())
+ emit s_objectsSelectedInRange();
}
}
@@ -853,11 +880,12 @@ void ObjectsScene::finishObjectsMove(const QPointF &pnt_end)
vector points;
vector::iterator itr;
vector rels, base_rels;
+ QSet schemas;
BaseRelationship *base_rel=nullptr;
RelationshipView *rel=nullptr;
BaseObjectView *obj_view=nullptr;
BaseTableView *tab_view=nullptr;
- QList tables;
+ QSet tables;
//Gathering the relationships inside the selected schemsa in order to move their points too
for(auto &item : items)
@@ -870,7 +898,7 @@ void ObjectsScene::finishObjectsMove(const QPointF &pnt_end)
obj_view->togglePlaceholder(false);
if(tab_view)
- tables.push_back(tab_view);
+ tables.insert(tab_view);
else if(sch_view)
{
//Get the schema object
@@ -894,7 +922,7 @@ void ObjectsScene::finishObjectsMove(const QPointF &pnt_end)
rel_list.push_back(dynamic_cast(base_rel->getReceiverObject()));
}
- tables.append(sch_view->getChildren());
+ tables.unite(sch_view->getChildren().toSet());
}
}
}
@@ -980,18 +1008,25 @@ void ObjectsScene::finishObjectsMove(const QPointF &pnt_end)
this->setSceneRect(rect);
}
- if(BaseObjectView::isPlaceholderEnabled())
+ for(auto &obj : tables)
{
- /* Updating relationships related to moved tables. Converting the list of table to a set
- in order to remove the duplicated elements */
- for(auto &obj : tables.toSet())
+ tab_view=dynamic_cast(obj);
+
+ //Realign tables if the parent schema had the position adjusted too
+ if(align_objs_grid)
{
- tab_view=dynamic_cast(obj);
- if(tab_view)
- tab_view->requestRelationshipsUpdate();
+ tab_view->setPos(alignPointToGrid(tab_view->pos()));
+ schemas.insert(dynamic_cast(tab_view->getSourceObject()->getSchema()));
}
+
+ if(BaseObjectView::isPlaceholderEnabled())
+ tab_view->requestRelationshipsUpdate();
}
+ //Updating schemas bounding rects after moving objects
+ for(auto &obj : schemas)
+ obj->setModified(true);
+
emit s_objectsMoved(true);
moving_objs=false;
sel_ini_pnt.setX(NAN);
diff --git a/libobjrenderer/src/objectsscene.h b/libobjrenderer/src/objectsscene.h
index 8cfda9fa7..ff080597e 100644
--- a/libobjrenderer/src/objectsscene.h
+++ b/libobjrenderer/src/objectsscene.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -136,6 +136,8 @@ class ObjectsScene: public QGraphicsScene {
//! \brief Draws a line from the point 'p_start' to the cursor position and simulates the relationship creation
void showRelationshipLine(bool value, const QPointF &p_start=QPointF(NAN,NAN));
+ void blockItemsSignals(bool block);
+
public:
ObjectsScene(void);
~ObjectsScene(void);
@@ -225,6 +227,9 @@ class ObjectsScene: public QGraphicsScene {
//! \brief Signal emitted when a object is selected
void s_objectSelected(BaseGraphicObject *objeto, bool selecionado);
+ //! \brief Signal emitted when objects are selected via range selection
+ void s_objectsSelectedInRange(void);
+
//! \brief Signal emtted when a blank area of the canvas is pressed
void s_objectsScenePressed(Qt::MouseButtons);
diff --git a/libobjrenderer/src/relationshipview.cpp b/libobjrenderer/src/relationshipview.cpp
index 8e01c50f2..56f02bc64 100644
--- a/libobjrenderer/src/relationshipview.cpp
+++ b/libobjrenderer/src/relationshipview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -20,6 +20,7 @@
bool RelationshipView::hide_name_label=false;
bool RelationshipView::use_curved_lines=true;
+bool RelationshipView::use_crows_foot=false;
unsigned RelationshipView::line_conn_mode=RelationshipView::CONNECT_FK_TO_PK;
RelationshipView::RelationshipView(BaseRelationship *rel) : BaseObjectView(rel)
@@ -28,12 +29,12 @@ RelationshipView::RelationshipView(BaseRelationship *rel) : BaseObjectView(rel)
throw Exception(ERR_ASG_NOT_ALOC_OBJECT, __PRETTY_FUNCTION__, __FILE__, __LINE__);
for(unsigned i=BaseRelationship::SRC_CARD_LABEL;
- i <= BaseRelationship::REL_NAME_LABEL; i++)
+ i <= BaseRelationship::REL_NAME_LABEL; i++)
{
if(rel->getLabel(i))
{
labels[i]=new TextboxView(rel->getLabel(i), true);
- labels[i]->setZValue(i==BaseRelationship::REL_NAME_LABEL ? 0 : 1);
+ labels[i]->setZValue(i==BaseRelationship::REL_NAME_LABEL ? 1 : 2);
this->addToGroup(labels[i]);
}
else
@@ -62,6 +63,9 @@ RelationshipView::RelationshipView(BaseRelationship *rel) : BaseObjectView(rel)
for(unsigned i=0; i < 2; i++)
{
+ round_cf_descriptors[i] = nullptr;
+ cf_descriptors[i] = nullptr;
+
line_circles[i]=new QGraphicsEllipseItem;
line_circles[i]->setRect(QRectF(0,0,GRAPHIC_PNT_RADIUS,GRAPHIC_PNT_RADIUS));
line_circles[i]->setZValue(0);
@@ -77,6 +81,7 @@ RelationshipView::RelationshipView(BaseRelationship *rel) : BaseObjectView(rel)
RelationshipView::~RelationshipView(void)
{
QGraphicsItem *item=nullptr;
+ vector *> rel_lines = { &lines, &fk_lines, &pk_lines, &src_cf_lines, &dst_cf_lines };
while(!curves.empty())
{
@@ -101,40 +106,43 @@ RelationshipView::~RelationshipView(void)
}
}
- while(!lines.empty())
+ while(!attributes.empty())
{
- item=lines.back();
+ item=attributes.back();
this->removeFromGroup(item);
- lines.pop_back();
+ attributes.pop_back();
delete(item);
}
- while(!fk_lines.empty())
+ for(auto &lines : rel_lines)
{
- item=fk_lines.back();
- this->removeFromGroup(item);
- fk_lines.pop_back();
- delete(item);
+ while(!lines->empty())
+ {
+ item = lines->back();
+ this->removeFromGroup(item);
+ lines->pop_back();
+ delete(item);
+ }
}
- while(!pk_lines.empty())
- {
- item=pk_lines.back();
- this->removeFromGroup(item);
- pk_lines.pop_back();
- delete(item);
- }
+ this->removeFromGroup(descriptor);
+ delete(descriptor);
- while(!attributes.empty())
+ for(int i =0; i < 2; i++)
{
- item=attributes.back();
- this->removeFromGroup(item);
- attributes.pop_back();
- delete(item);
- }
+ if(cf_descriptors[i])
+ {
+ for(auto &item : cf_descriptors[i]->childItems())
+ {
+ cf_descriptors[i]->removeFromGroup(item);
+ this->removeFromGroup(item);
+ delete(item);
+ }
- this->removeFromGroup(descriptor);
- delete(descriptor);
+ this->removeFromGroup(cf_descriptors[i]);
+ delete(cf_descriptors[i]);
+ }
+ }
}
void RelationshipView::setHideNameLabel(bool value)
@@ -157,12 +165,30 @@ bool RelationshipView::isCurvedLines(void)
return(use_curved_lines);
}
+void RelationshipView::setCrowsFoot(bool value)
+{
+ use_crows_foot = value;
+
+ if(value)
+ line_conn_mode=RelationshipView::CONNECT_TABLE_EGDES;
+}
+
+bool RelationshipView::isCrowsFoot(void)
+{
+ return(use_crows_foot);
+}
+
void RelationshipView::setLineConnectionMode(unsigned mode)
{
- if(mode > CONNECT_FK_TO_PK)
- mode=CONNECT_FK_TO_PK;
+ if(use_crows_foot)
+ line_conn_mode=CONNECT_TABLE_EGDES;
+ else
+ {
+ if(mode > CONNECT_TABLE_EGDES)
+ mode=CONNECT_TABLE_EGDES;
- line_conn_mode=mode;
+ line_conn_mode=mode;
+ }
}
unsigned RelationshipView::getLineConnectinMode(void)
@@ -207,7 +233,7 @@ QVariant RelationshipView::itemChange(GraphicsItemChange change, const QVariant
this->setSelectionOrder(value.toBool());
pos_info_rect->setVisible(value.toBool());
pos_info_txt->setVisible(value.toBool());
- obj_selection->setVisible(value.toBool());
+ obj_selection->setVisible(value.toBool() && descriptor->isVisible());
this->configurePositionInfo();
for(i=0; i < 3; i++)
@@ -238,6 +264,7 @@ QVariant RelationshipView::itemChange(GraphicsItemChange change, const QVariant
else
color=line_color;
+ color.setAlpha(255);
rel_lines=lines;
rel_lines.insert(rel_lines.end(), fk_lines.begin(), fk_lines.end());
rel_lines.insert(rel_lines.end(), pk_lines.begin(), pk_lines.end());
@@ -256,6 +283,51 @@ QVariant RelationshipView::itemChange(GraphicsItemChange change, const QVariant
curve->setPen(pen);
}
+ //If the crow's foot descriptors are allocated we change their border color
+ if(cf_descriptors[0] != nullptr)
+ {
+ vector lines;
+ QVector grad_stops = descriptor->brush().gradient()->stops();
+ QColor sel_color = BaseObjectView::getBorderStyle(ParsersAttributes::OBJ_SELECTION).color();
+ QLinearGradient grad(QPointF(0,0),QPointF(0,1));
+ int color_id = 0;
+
+ grad.setCoordinateMode(QGradient::ObjectBoundingMode);
+ lines.assign(src_cf_lines.begin(), src_cf_lines.end());
+ lines.insert(lines.end(), dst_cf_lines.begin(), dst_cf_lines.end());
+
+ for(auto &line : lines)
+ line->setPen(pen);
+
+ for(int idx = 0; idx < 2; idx++)
+ {
+ /* If we have a circle that describes optional cardinality we should
+ * merge its color with the object selection color in order to simulate the
+ * that the descriptor is selected as well */
+ if(value.toBool())
+ {
+ color_id = 0;
+ for(auto &stop : grad_stops)
+ {
+ color = stop.second;
+ color.setRedF((color.redF() + sel_color.greenF())/2.0f);
+ color.setGreenF((color.greenF() + sel_color.greenF())/2.0f);
+ color.setBlueF((color.blueF() + sel_color.blueF())/2.0f);
+ grad.setColorAt(color_id++, color);
+ }
+
+ round_cf_descriptors[idx]->setBrush(grad);
+ }
+ else
+ round_cf_descriptors[idx]->setBrush(descriptor->brush());
+
+ if(this->getSourceObject()->getRelationshipType() == BaseRelationship::RELATIONSHIP_FK)
+ pen.setStyle(Qt::DashLine);
+
+ round_cf_descriptors[idx]->setPen(pen);
+ }
+ }
+
//Shows/hides the attribute's selection
count=attributes.size();
for(i=0; i < count; i++)
@@ -279,7 +351,7 @@ void RelationshipView::mousePressEvent(QGraphicsSceneMouseEvent *event)
BaseRelationship *base_rel=this->getSourceObject();
//Resets the labels position when mid-button is pressed
- if(event->buttons()==Qt::LeftButton && event->modifiers()==(Qt::AltModifier | Qt::ControlModifier))
+ if(event->buttons()==Qt::LeftButton && event->modifiers()==(Qt::AltModifier | Qt::ShiftModifier))
{
base_rel->resetLabelsDistance();
this->configureLabels();
@@ -393,12 +465,21 @@ void RelationshipView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if(dynamic_cast(sel_object))
{
- BaseRelationship *rel_base=this->getSourceObject();
- vector points=rel_base->getPoints();
+ QRectF brect = QRectF(tables[0]->pos() - QPointF(20,20),
+ tables[0]->pos() + QPointF(tables[0]->boundingRect().width() + 20, tables[0]->boundingRect().height() + 20)),
+ brect1 = QRectF(tables[1]->pos() - QPointF(20,20),
+ tables[1]->pos() + QPointF(tables[1]->boundingRect().width() + 20, tables[1]->boundingRect().height() + 20));
- points[sel_object_idx]=event->pos();
- rel_base->setPoints(points);
- this->configureLine();
+ //We only include the point if it is not inside the tables' bounding rect
+ if(!brect.contains(event->pos()) && !brect1.contains(event->pos()))
+ {
+ BaseRelationship *rel_base=this->getSourceObject();
+ vector points=rel_base->getPoints();
+
+ points[sel_object_idx]=event->pos();
+ rel_base->setPoints(points);
+ this->configureLine();
+ }
}
else if(dynamic_cast(sel_object))
sel_object->setPos(event->pos());
@@ -417,7 +498,7 @@ void RelationshipView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
//Calculates the displacement of the label from the initial pos to the current
base_rel->setLabelDistance(sel_object_idx,
- QPointF(sel_object->pos() - labels_ini_pos[sel_object_idx]));
+ QPointF(sel_object->pos() - labels_ini_pos[sel_object_idx]));
}
sel_object_idx=-1;
@@ -432,10 +513,11 @@ void RelationshipView::disconnectTables(void)
if(tables[0] && tables[1])
{
BaseRelationship *rel_base=this->getSourceObject();
- tables[0]->updateConnectedRelsCount(-1);
+
+ tables[0]->removeConnectedRelationship(rel_base);
if(!rel_base->isSelfRelationship())
- tables[1]->updateConnectedRelsCount(-1);
+ tables[1]->removeConnectedRelationship(rel_base);
for(unsigned i=0; i < 2; i++)
{
@@ -470,10 +552,10 @@ void RelationshipView::configureObject(void)
tables[0]=dynamic_cast(rel_base->getTable(BaseRelationship::SRC_TABLE)->getReceiverObject());
tables[1]=dynamic_cast(rel_base->getTable(BaseRelationship::DST_TABLE)->getReceiverObject());
- tables[0]->updateConnectedRelsCount(1);
+ tables[0]->addConnectedRelationship(rel_base);
if(!rel_base->isSelfRelationship())
- tables[1]->updateConnectedRelsCount(1);
+ tables[1]->addConnectedRelationship(rel_base);
configureLine();
connectTables();
@@ -488,7 +570,7 @@ void RelationshipView::configurePositionInfo(void)
pos_info_txt->setPos(descriptor->pos().x(),
descriptor->pos().y() - pos_info_txt->boundingRect().height());
pos_info_rect->setPos(descriptor->pos().x(),
- descriptor->pos().y() - pos_info_rect->boundingRect().height());
+ descriptor->pos().y() - pos_info_rect->boundingRect().height());
}
}
@@ -515,14 +597,19 @@ void RelationshipView::configureLine(void)
QString tool_tip;
QGraphicsItem *item=nullptr;
int i, i1, count, idx_lin_desc=0;
- bool conn_same_sides = false, bidirectional=base_rel->isBidirectional();
+ bool conn_same_sides = false,
+ conn_horiz_sides[2] = { false, false }, conn_vert_sides[2] = { false, false };
+ unsigned rel_type = base_rel->getRelationshipType();
configuring_line=true;
pen.setCapStyle(Qt::RoundCap);
if(base_rel->isSelfRelationship())
{
- double fator=font_config[ParsersAttributes::GLOBAL].font().pointSizeF()/DEFAULT_FONT_SIZE;
+ double fnt_factor=font_config[ParsersAttributes::GLOBAL].font().pointSizeF()/DEFAULT_FONT_SIZE,
+ pos_factor = 0, offset = 0;
+ unsigned rel_cnt = tables[0]->getConnectedRelsCount(base_rel->getTable(BaseRelationship::SRC_TABLE),
+ base_rel->getTable(BaseRelationship::DST_TABLE));
/* Sefl-relationshihp line format:
@@ -536,24 +623,40 @@ void RelationshipView::configureLine(void)
pos=tables[0]->pos();
rect=tables[0]->boundingRect();
- p_central[0].setX(pos.x() + rect.width());
- p_central[0].setY(pos.y() + (rect.height()/2.5f));
+ if(rel_cnt > 1)
+ {
+ int idx = tables[0]->getConnectedRelationshipIndex(base_rel);
+ double min_val = min(rect.width(), rect.height());
+
+ if(idx < 0) idx =0;
+ pos_factor = min_val * 0.08f * idx;
+ }
- p_central[1].setX(pos.x() + (rect.width()/1.5f));
+ p_central[0].setX(pos.x() + rect.width());
+ p_central[0].setY(pos.y() + (rect.height() / 3.0f) + pos_factor);
+ p_central[1].setX(pos.x() + (rect.width() / 1.5f) - pos_factor);
p_central[1].setY(pos.y());
- points.push_back(QPointF(p_central[0].x() + (11 * fator), p_central[0].y()));
- points.push_back(QPointF(p_central[0].x() + (11 * fator), p_central[1].y() - (11 * fator)));
- points.push_back(QPointF(p_central[1].x(), p_central[1].y() - (11 * fator)));
+ if(p_central[0].y() > pos.y() + rect.height())
+ p_central[0].setY(pos.y() + rect.height());
+
+ if(p_central[1].x() < pos.x())
+ p_central[1].setX(pos.x());
+
+ offset = use_crows_foot ? 23 : 11;
+
+ points.push_back(QPointF(p_central[0].x() + (offset * fnt_factor) + pos_factor, p_central[0].y()));
+ points.push_back(QPointF(p_central[0].x() + (offset * fnt_factor) + pos_factor, p_central[1].y() - (offset * fnt_factor) - pos_factor));
+ points.push_back(QPointF(p_central[1].x(), p_central[1].y() - (offset * fnt_factor) - pos_factor));
+
base_rel->setPoints(points);
}
else
{
Relationship *rel=dynamic_cast(base_rel);
- bool rel_1n=(!bidirectional &&
- (base_rel->getRelationshipType()==Relationship::RELATIONSHIP_11 ||
- base_rel->getRelationshipType()==Relationship::RELATIONSHIP_1N ||
- base_rel->getRelationshipType()==Relationship::RELATIONSHIP_FK));
+ bool rel_1n= (rel_type==Relationship::RELATIONSHIP_11 ||
+ rel_type==Relationship::RELATIONSHIP_1N ||
+ rel_type==Relationship::RELATIONSHIP_FK);
if(rel &&
rel->getRelationshipType()==Relationship::RELATIONSHIP_11 &&
@@ -563,7 +666,7 @@ void RelationshipView::configureLine(void)
tables[1]=dynamic_cast(rel->getReceiverTable()->getReceiverObject());
}
- if(line_conn_mode==CONNECT_CENTER_PNTS || !rel_1n)
+ if(line_conn_mode==CONNECT_CENTER_PNTS || line_conn_mode==CONNECT_TABLE_EGDES || !rel_1n)
{
vector *> ref_lines={ &fk_lines, &pk_lines };
@@ -612,7 +715,7 @@ void RelationshipView::configureLine(void)
//In this case the receiver table rect Y must be equal to reference table Y in order to do the correct comparison
rec_tab_rect=QRectF(QPointF(rec_tab_view->pos().x(),
- ref_tab_view->pos().y()), rec_tab_view->boundingRect().size());
+ ref_tab_view->pos().y()), rec_tab_view->boundingRect().size());
if(ref_tab_rect.intersects(rec_tab_rect))
{
@@ -665,7 +768,7 @@ void RelationshipView::configureLine(void)
pk_pnt=this->mapFromItem(ref_tab_view, QPointF(pk_px + pk_dx, pk_py/pk_points.size()));
fk_pnt=this->mapFromItem(rec_tab_view, QPointF(fk_px + fk_dx, fk_py/fk_points.size()));
- if(base_rel->getRelationshipType()==Relationship::RELATIONSHIP_FK)
+ if(rel_type==Relationship::RELATIONSHIP_FK)
{
p_central[1]=pk_pnt;
p_central[0]=fk_pnt;
@@ -683,7 +786,7 @@ void RelationshipView::configureLine(void)
* This situation may happen when the relationship is being validated and the needed fks was not
* created yet. In a second interaction of the rel. validation they are created
* and the relationship is properly configured */
- if(base_rel->getRelationshipType()==Relationship::RELATIONSHIP_FK)
+ if(rel_type==Relationship::RELATIONSHIP_FK)
{
p_central[1]=pk_pnt=ref_tab_view->getCenter();
p_central[0]=fk_pnt=rec_tab_view->getCenter();
@@ -733,8 +836,162 @@ void RelationshipView::configureLine(void)
}
}
- conn_points[0]=p_central[0];
- conn_points[1]=p_central[1];
+ if(base_rel->isSelfRelationship() || line_conn_mode != CONNECT_TABLE_EGDES)
+ {
+ conn_points[0]=p_central[0];
+ conn_points[1]=p_central[1];
+
+ points.insert(points.begin(),p_central[0]);
+ points.push_back(p_central[1]);
+ }
+ else if(line_conn_mode == CONNECT_TABLE_EGDES)
+ {
+ QRectF brect;
+ QPolygonF pol;
+ QLineF edge, line = QLineF(tables[0]->getCenter(), tables[1]->getCenter());
+ QPointF pi, center, p_aux[2];
+ double font_factor=(font_config[ParsersAttributes::GLOBAL].font().pointSizeF()/DEFAULT_FONT_SIZE) * BaseObjectView::getScreenDpiFactor(),
+ size_factor = 1,
+ border_factor = CONN_LINE_LENGTH * 0.30,
+ min_lim = 0, max_lim = 0,
+ conn_rels_factors[2] = { 0, 0 };
+ unsigned conn_rels_cnt[2] = { 0, 0 };
+
+ for(int tab_idx = 0; tab_idx < 2; tab_idx++)
+ {
+ conn_rels_cnt[tab_idx] = tables[tab_idx]->getConnectedRelsCount(base_rel->getTable(BaseRelationship::SRC_TABLE),
+ base_rel->getTable(BaseRelationship::DST_TABLE));
+ conn_rels_factors[tab_idx] = conn_rels_cnt[tab_idx] == 1 ? 1 : 0.08f * (tables[tab_idx]->getConnectedRelationshipIndex(base_rel));
+
+ if(!points.empty())
+ {
+ if(tab_idx == 0)
+ line = QLineF(tables[0]->getCenter(), points[0]);
+ else
+ line = QLineF(tables[1]->getCenter(), points[points.size() - 1]);
+ }
+
+ if(rel_type==BaseRelationship::RELATIONSHIP_GEN || rel_type==BaseRelationship::RELATIONSHIP_DEP)
+ size_factor = 0.40;
+ else if(use_crows_foot)
+ {
+ if(rel_type==BaseRelationship::RELATIONSHIP_NN ||
+ (tab_idx == 1 && rel_type==BaseRelationship::RELATIONSHIP_FK) ||
+ (tab_idx == 0 && rel_type==BaseRelationship::RELATIONSHIP_1N && base_rel->isTableMandatory(BaseRelationship::SRC_TABLE)) ||
+ (tab_idx == 0 && rel_type==BaseRelationship::RELATIONSHIP_11 && base_rel->isTableMandatory(BaseRelationship::SRC_TABLE)) ||
+ (tab_idx == 1 && rel_type==BaseRelationship::RELATIONSHIP_11 && base_rel->isTableMandatory(BaseRelationship::DST_TABLE)))
+ size_factor = 1 * font_factor;
+ else
+ size_factor = 1.5 * font_factor;
+
+ if(rel_type == BaseRelationship::RELATIONSHIP_GEN ||
+ rel_type == BaseRelationship::RELATIONSHIP_DEP ||
+ rel_type == BaseRelationship::RELATIONSHIP_11 ||
+ (tab_idx == 0 && rel_type == BaseRelationship::RELATIONSHIP_1N) ||
+ (tab_idx == 1 && rel_type == BaseRelationship::RELATIONSHIP_FK))
+ border_factor = CONN_LINE_LENGTH * 0.30;
+ else
+ border_factor = CONN_LINE_LENGTH * 0.75;
+ }
+ else
+ size_factor = 0.65 * font_factor;
+
+ brect = QRectF(tables[tab_idx]->pos(), tables[tab_idx]->boundingRect().size());
+ pol = QPolygonF(brect);
+ center = tables[tab_idx]->getCenter();
+
+ for(int idx = 0; idx < pol.size() - 1; idx++)
+ {
+ edge.setP1(pol.at(idx));
+ edge.setP2(pol.at(idx + 1));
+
+ if(line.intersect(edge, &pi)==QLineF::BoundedIntersection)
+ {
+ /* Adjusting the intersection point if there're more than one relationship connected the current table
+ * this will cause all relationships to be aligned together */
+ if(conn_rels_cnt[tab_idx] > 1)
+ {
+ double max_dim = max(brect.height(), brect.width());
+ int signal = 0;
+
+ if(edge.dx() == 0)
+ {
+ signal = edge.dy()/fabs(edge.dy()) * (tab_idx == 0 ? 1 : -1);
+ pi.setY(pi.y() - (conn_rels_factors[tab_idx] * max_dim) * signal);
+
+ // Adjusting the position of the interesection point to make is as close to the center of the edge as possible
+ pi.setY(pi.y() + (max_dim * 0.05) * signal);
+ }
+
+ if(edge.dy() == 0)
+ {
+ signal = edge.dx()/fabs(edge.dx()) * (tab_idx == 0 ? 1 : -1);
+ pi.setX(pi.x() - (conn_rels_factors[tab_idx] * max_dim) * signal);
+
+ // Adjusting the position of the interesection point to make is as close to the center of the edge as possible
+ pi.setX(pi.x() + (max_dim * 0.05) * signal);
+ }
+ }
+
+ //Avoiding the line to be exposed in the rounded corners of the tables
+ if(edge.dx() == 0)
+ {
+ min_lim = brect.top() + border_factor;
+ max_lim = brect.bottom() - border_factor;
+
+ if(pi.y() < min_lim)
+ pi.setY(min_lim);
+ else if(pi.y() > max_lim)
+ pi.setY(max_lim);
+ }
+ else
+ {
+ min_lim = brect.left() + border_factor;
+ max_lim = brect.right() - border_factor;
+
+ if(pi.x() < min_lim)
+ pi.setX(min_lim);
+ else if(pi.x() > max_lim)
+ pi.setX(max_lim);
+ }
+
+ conn_points[tab_idx] = p_central[tab_idx] = pi;
+
+ if(edge.dx() == 0)
+ {
+ if(pi.x() < center.x())
+ pi.setX(pi.x() - CONN_LINE_LENGTH * size_factor);
+ else
+ pi.setX(pi.x() + CONN_LINE_LENGTH * size_factor);
+
+ conn_vert_sides[tab_idx] = true;
+ }
+ else
+ {
+ if(pi.y() < center.y())
+ pi.setY(pi.y() - CONN_LINE_LENGTH * size_factor);
+ else
+ pi.setY(pi.y() + CONN_LINE_LENGTH * size_factor);
+
+ conn_horiz_sides[tab_idx] = true;
+ }
+
+ p_aux[tab_idx] = pi;
+ break;
+ }
+ else
+ {
+ p_aux[tab_idx] = p_central[tab_idx];
+ }
+ }
+ }
+
+ points.insert(points.begin(), p_central[0]);
+ points.insert(points.begin() + 1, p_aux[0]);
+
+ points.push_back(p_aux[1]);
+ points.push_back(p_central[1]);
+ }
//If the relationship is selected we do not change the lines colors
if(this->isSelected() && !lines.empty())
@@ -751,12 +1008,9 @@ void RelationshipView::configureLine(void)
}
//For dependency relationships the line is dashed
- if(base_rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_DEP)
+ if(rel_type==BaseRelationship::RELATIONSHIP_DEP)
pen.setStyle(Qt::DashLine);
- points.insert(points.begin(),p_central[0]);
- points.push_back(p_central[1]);
-
/* For identifier relationships an additional point is created on the center of the
line that supports the descriptor in order to modify the line thickness on the
weak entity side */
@@ -806,9 +1060,9 @@ void RelationshipView::configureLine(void)
//If the relationship is identifier or bidirectional, the line has its thickness modified
if(rel && (rel->isIdentifier() && vet_idx==0))
- pen.setWidthF(1.75f);
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.90f);
else
- pen.setWidthF(1.15f);
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.45f);
lin->setLine(QLineF(ref_pnt->at(i), ref_points[vet_idx]));
lin->setPen(pen);
@@ -842,10 +1096,10 @@ void RelationshipView::configureLine(void)
lin=lines[i];
//If the relationship is identifier or bidirectional, the line has its thickness modified
- if(bidirectional || (rel && (rel->isIdentifier() && i >= idx_lin_desc)))
- pen.setWidthF(1.75f);
+ if(rel && (rel->isIdentifier() && i >= idx_lin_desc))
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.90f);
else
- pen.setWidthF(1.15f);
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.45f);
lin->setLine(QLineF(points[i], points[i+1]));
lin->setPen(pen);
@@ -867,11 +1121,11 @@ void RelationshipView::configureLine(void)
}
//Exposing the line ending circles
- if((!base_rel->isSelfRelationship() && line_conn_mode==CONNECT_CENTER_PNTS) ||
+ if((!base_rel->isSelfRelationship() && line_conn_mode==CONNECT_CENTER_PNTS && !use_crows_foot) ||
(!base_rel->isSelfRelationship() &&
- ((base_rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_DEP) ||
- (base_rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_GEN) ||
- (base_rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_NN))))
+ ((line_conn_mode != CONNECT_TABLE_EGDES && rel_type==BaseRelationship::RELATIONSHIP_DEP) ||
+ (line_conn_mode != CONNECT_TABLE_EGDES && rel_type==BaseRelationship::RELATIONSHIP_GEN) ||
+ (line_conn_mode != CONNECT_TABLE_EGDES && rel_type==BaseRelationship::RELATIONSHIP_NN && !use_crows_foot))))
{
for(i=0; i < 2; i++)
{
@@ -891,6 +1145,7 @@ void RelationshipView::configureLine(void)
if(use_curved_lines && !base_rel->isSelfRelationship())
{
BezierCurveItem * curve = nullptr;
+ bool invert_cpoints = false, simple_curve = false;
i = 0;
for(auto &line : lines)
@@ -906,10 +1161,21 @@ void RelationshipView::configureLine(void)
curve = curves[i];
i++;
- curve->setLine(line->line(),
- conn_same_sides && lines.size() == 1,
- base_rel->getRelationshipType());
+ /* Creates simple a curved line in the following situations:
+ * 1) The crow's foot is not enabled but the relationship connects in the same sides on tables (conn_same_sides)
+ * 2) The crow's foot is enabled and one of the connection point is not in the horizontal edges of one of the tables (conn_horiz_sides) */
+
+ /* We invert the curve's bounding rect when crow's foot is enabled and the relationship connects
+ * at the top/bottom edges of both tables */
+ simple_curve = (conn_same_sides && lines.size() == 1) || (conn_horiz_sides[0] != conn_horiz_sides[1] && lines.size() == 3);
+
+ if(!simple_curve)
+ invert_cpoints = (conn_horiz_sides[0] && conn_horiz_sides[1] && lines.size() == 3);
+ else
+ invert_cpoints = (!conn_horiz_sides[0] && conn_horiz_sides[1] && conn_vert_sides[0] && !conn_vert_sides[1]);
+
+ curve->setLine(line->line(), simple_curve, invert_cpoints);
curve->setPen(line->pen());
line->setVisible(false);
}
@@ -944,14 +1210,18 @@ void RelationshipView::configureLine(void)
}
this->configureDescriptor();
+
+ this->configureCrowsFootDescriptors();
+
this->configureLabels();
+
this->configureProtectedIcon();
configuring_line=false;
/* Making a little tweak on the foreign key type name. Despite being of class BaseRelationship,
for semantics purposes shows the type of this relationship as "Relationship" unlike "Link" */
- if(base_rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_FK)
+ if(rel_type==BaseRelationship::RELATIONSHIP_FK)
tool_tip=base_rel->getName(true) +
QString(" (") + BaseObject::getTypeName(OBJ_RELATIONSHIP) + QString(")");
else
@@ -1019,17 +1289,16 @@ void RelationshipView::configureDescriptor(void)
else
descriptor->setBrush(BaseObjectView::getFillStyle(ParsersAttributes::RELATIONSHIP));
-
if(rel_type==BaseRelationship::RELATIONSHIP_DEP ||
rel_type==BaseRelationship::RELATIONSHIP_GEN)
{
- pol.append(QPointF(0,0)); pol.append(QPointF(21,13));
- pol.append(QPointF(0,26)); pol.append(QPointF(0,13));
+ pol.append(QPointF(0,0)); pol.append(QPointF(18,10));
+ pol.append(QPointF(0,20)); pol.append(QPointF(0,10));
}
else
{
- pol.append(QPointF(13,0)); pol.append(QPointF(26,13));
- pol.append(QPointF(13,26)); pol.append(QPointF(0,13));
+ pol.append(QPointF(11,0)); pol.append(QPointF(22,11));
+ pol.append(QPointF(11,22)); pol.append(QPointF(0,11));
}
//Resizes the polygon according the font factor
@@ -1057,9 +1326,22 @@ void RelationshipView::configureDescriptor(void)
}
else
{
- double percent = path.percentAtLength(path.length()/2);
- angle = -path.angleAtPercent(percent);
- pnt = path.pointAtPercent(percent);
+ /* Workaround to avoid the inheritance / dependency relationship to get the descriptor rotated to the wrong side
+ * We create and auxiliary line with points from the position at 65% of the curve to the 45% and use the
+ * angle of that line instead of the angle at 50% of the curve */
+ if((rel_type == BaseRelationship::RELATIONSHIP_DEP || rel_type == BaseRelationship::RELATIONSHIP_GEN) &&
+ curve->isControlPointsInverted() && !curve->isSimpleCurve() && !curve->isStraightLine())
+ {
+ QLineF lin_aux = QLineF(path.pointAtPercent(0.65), path.pointAtPercent(0.45));
+ angle = -lin_aux.angle();
+ pnt = path.pointAtPercent(0.5);
+ }
+ else
+ {
+ double percent = path.percentAtLength(path.length()/2);
+ angle = -path.angleAtPercent(percent);
+ pnt = path.pointAtPercent(percent);
+ }
}
}
else
@@ -1114,6 +1396,271 @@ void RelationshipView::configureDescriptor(void)
this->configureAttributes();
this->configurePositionInfo();
+
+ /* If the crow's feet is enabled the relationship descriptor is hidden
+ * for 1:1, 1:n, n:n and fk relationship. For generalization and dependency
+ * relationships the descriptor is still displayed. */
+ descriptor->setVisible(!use_crows_foot ||
+ (use_crows_foot && (
+ rel_type == BaseRelationship::RELATIONSHIP_DEP ||
+ rel_type == BaseRelationship::RELATIONSHIP_GEN)));
+ obj_shadow->setVisible(descriptor->isVisible());
+}
+
+void RelationshipView::configureCrowsFootDescriptors(void)
+{
+ BaseRelationship * base_rel = dynamic_cast(this->getSourceObject());
+ Relationship *rel=dynamic_cast(base_rel);
+
+ //Hiding all descriptors related to crow's foot when the notation is not being used
+ if(!use_crows_foot && cf_descriptors[BaseRelationship::SRC_TABLE])
+ {
+ for(unsigned tab_id = BaseRelationship::SRC_TABLE; tab_id <= BaseRelationship::DST_TABLE; tab_id++)
+ {
+ for(auto &item : cf_descriptors[tab_id]->childItems())
+ {
+ cf_descriptors[tab_id]->setRotation(0);
+ cf_descriptors[tab_id]->removeFromGroup(item);
+ this->removeFromGroup(item);
+ item->setVisible(false);
+ cf_descriptors[tab_id]->setVisible(false);
+ }
+ }
+ }
+ else if(use_crows_foot && base_rel &&
+ (base_rel->getRelationshipType() == BaseRelationship::RELATIONSHIP_11 ||
+ base_rel->getRelationshipType() == BaseRelationship::RELATIONSHIP_1N ||
+ base_rel->getRelationshipType() == BaseRelationship::RELATIONSHIP_NN ||
+ base_rel->getRelationshipType() == BaseRelationship::RELATIONSHIP_FK))
+ {
+ QGraphicsLineItem *line_item = nullptr;
+ QGraphicsEllipseItem *circle_item = nullptr;
+ unsigned rel_type = base_rel->getRelationshipType();
+ double factor=(font_config[ParsersAttributes::GLOBAL].font().pointSizeF()/DEFAULT_FONT_SIZE) * BaseObjectView::getScreenDpiFactor();
+ int signal = 1;
+ BaseTableView *tables[2] = { nullptr, nullptr };
+ bool mandatory[2] = { false, false };
+
+ if(rel_type == BaseRelationship::RELATIONSHIP_NN || rel_type == BaseRelationship::RELATIONSHIP_FK)
+ {
+ tables[BaseRelationship::SRC_TABLE] = dynamic_cast(base_rel->getTable(BaseRelationship::SRC_TABLE)->getReceiverObject());
+ tables[BaseRelationship::DST_TABLE] = dynamic_cast(base_rel->getTable(BaseRelationship::DST_TABLE)->getReceiverObject());
+ mandatory[BaseRelationship::SRC_TABLE] = base_rel->isTableMandatory(BaseRelationship::SRC_TABLE);
+ mandatory[BaseRelationship::DST_TABLE] = base_rel->isTableMandatory(BaseRelationship::DST_TABLE);
+ }
+ else
+ {
+ tables[BaseRelationship::SRC_TABLE] = dynamic_cast(rel->getReferenceTable()->getReceiverObject());
+ tables[BaseRelationship::DST_TABLE] = dynamic_cast(rel->getReceiverTable()->getReceiverObject());
+ mandatory[BaseRelationship::SRC_TABLE] = rel->isReferenceTableMandatory();
+ mandatory[BaseRelationship::DST_TABLE] = rel->isReceiverTableMandatory();
+
+ /* There's a special case for one-to-one relationships that will cause the crow's foot
+ * descriptors to be positioned in the oposite sides when compared to other relationships.
+ * This because pgModeler switches automatically the receiver table to be the destination one
+ * when the mandatory table of the relationship is the destination. So we use and auxiliary (signal inverter)
+ * variable to alter the descriptors position */
+ if(mandatory[BaseRelationship::SRC_TABLE] && rel_type == BaseRelationship::RELATIONSHIP_11 &&
+ rel->getTable(BaseRelationship::DST_TABLE) == rel->getReferenceTable())
+ signal = -1;
+ }
+
+ //Allocatting all objects related to the crow's foot descriptors
+ if(cf_descriptors[BaseRelationship::SRC_TABLE] == nullptr)
+ {
+ int src_zvalue = lines.front()->zValue() + 1,
+ dst_zvalue = lines.back()->zValue() + 1;
+ QGraphicsLineItem *line_item = nullptr;
+
+ for(int idx = 0; idx < 2; idx++)
+ {
+ cf_descriptors[idx] = new QGraphicsItemGroup;
+ round_cf_descriptors[idx] = new QGraphicsEllipseItem;
+ this->addToGroup(cf_descriptors[idx]);
+ }
+
+ for(int idx = 0; idx < 4; idx++)
+ {
+ line_item = new QGraphicsLineItem;
+ src_cf_lines.push_back(line_item);
+ cf_descriptors[BaseRelationship::SRC_TABLE]->setZValue(src_zvalue);
+
+ line_item = new QGraphicsLineItem;
+ dst_cf_lines.push_back(line_item);
+ cf_descriptors[BaseRelationship::DST_TABLE]->setZValue(dst_zvalue);
+ }
+ }
+ else
+ {
+ cf_descriptors[BaseRelationship::SRC_TABLE]->setVisible(true);
+ cf_descriptors[BaseRelationship::DST_TABLE]->setVisible(true);
+ }
+
+ QPointF pi;
+ QRectF brect;
+ QPen pen, pens[2] = { lines.front()->pen(), lines.back()->pen() };
+ QLineF line, line1, edge, rel_lines[2] = {(signal < 0 ? lines.back()->line() : lines.front()->line()),
+ (signal < 0 ? lines.front()->line() : lines.back()->line())};
+ QPolygonF pol;
+ vector *> cf_lines = { &src_cf_lines, &dst_cf_lines };
+ unsigned lin_idx = 0;
+ double px = 0, py = 0, min_x = 0, max_x = 0, min_y = 0, max_y = 0;
+
+ for(unsigned tab_id = BaseRelationship::SRC_TABLE; tab_id <= BaseRelationship::DST_TABLE; tab_id++)
+ {
+ cf_descriptors[tab_id]->setRotation(0);
+
+ for(auto &line : *cf_lines[tab_id])
+ {
+ cf_descriptors[tab_id]->removeFromGroup(line);
+ this->removeFromGroup(line);
+ line->setVisible(false);
+ }
+
+ //Configuring the minimum cardinality descriptor
+ if((tab_id == BaseRelationship::SRC_TABLE &&
+ rel_type != BaseRelationship::RELATIONSHIP_NN && rel_type != BaseRelationship::RELATIONSHIP_FK) ||
+
+ (tab_id == BaseRelationship::DST_TABLE &&
+ (rel_type == BaseRelationship::RELATIONSHIP_11 || rel_type == BaseRelationship::RELATIONSHIP_FK)))
+ {
+
+ line_item = cf_lines[tab_id]->at(lin_idx++);
+ cf_descriptors[tab_id]->addToGroup(line_item);
+ line_item->setVisible(true);
+
+ line_item->setLine(QLineF(QPointF(0, -8 * factor), QPointF(0, 8 * factor)));
+ line_item->setPos((10 * signal) * (tab_id == BaseRelationship::DST_TABLE ? -1 : 1), 0);
+ line_item->setPen(pens[tab_id]);
+
+ }
+ else
+ {
+ //Configuring the crow's foot descriptor
+ if(tab_id == BaseRelationship::SRC_TABLE)
+ {
+ px = 0;
+ line = QLineF(QPointF(14, 0), QPointF(0, - 10 * factor));
+ line1 = QLineF(QPointF(14, 0), QPointF(0, 10 * factor));
+ }
+ else
+ {
+ line = QLineF(QPointF(0, 0), QPointF(14, - 10 * factor));
+ line1 = QLineF(QPointF(0, 0), QPointF(14, 10 * factor));
+ px = -line.dx();
+ }
+
+ line_item = cf_lines[tab_id]->at(lin_idx++);
+ cf_descriptors[tab_id]->addToGroup(line_item);
+ line_item->setVisible(true);
+ line_item->setLine(line);
+ line_item->setPos(px, 0);
+ line_item->setPen(pens[tab_id]);
+
+ line_item = cf_lines[tab_id]->at(lin_idx++);
+ cf_descriptors[tab_id]->addToGroup(line_item);
+ line_item->setVisible(true);
+ line_item->setLine(line1);
+ line_item->setPos(px, 0);
+ line_item->setPen(pens[tab_id]);
+ }
+
+
+ cf_descriptors[tab_id]->removeFromGroup(round_cf_descriptors[tab_id]);
+ this->removeFromGroup(round_cf_descriptors[tab_id]);
+ round_cf_descriptors[tab_id]->setVisible(false);
+
+ //Configuring the maximum cardinality descriptor
+ if((tab_id == BaseRelationship::SRC_TABLE && mandatory[tab_id]) || rel_type == BaseRelationship::RELATIONSHIP_NN)
+ {
+ line_item = cf_lines[tab_id]->at(lin_idx++);
+ cf_descriptors[tab_id]->addToGroup(line_item);
+ line_item->setVisible(true);
+
+ line_item->setLine(QLineF(QPointF(0, -8 * factor), QPointF(0, 8 * factor)));
+ line_item->setPos(15 * signal * (tab_id == BaseRelationship::DST_TABLE ? -1 : 1), 0);
+ line_item->setPen(pens[tab_id]);
+ }
+ else if(!mandatory[tab_id] &&
+ ((rel_type != BaseRelationship::RELATIONSHIP_FK) ||
+ (tab_id == BaseRelationship::SRC_TABLE && rel_type == BaseRelationship::RELATIONSHIP_FK)))
+ {
+ //Configuring the circle which describes the optional cardinality
+ circle_item = round_cf_descriptors[tab_id];
+ cf_descriptors[tab_id]->addToGroup(circle_item);
+ circle_item->setVisible(true);
+ circle_item->setRect(QRectF(0, 0, GRAPHIC_PNT_RADIUS * 2.20 * factor, GRAPHIC_PNT_RADIUS * 2.20 * factor));
+
+ py = -(circle_item->boundingRect().height()/2.20);
+
+ if(tab_id == BaseRelationship::SRC_TABLE)
+ {
+ if(base_rel->isSelfRelationship() || rel_type != BaseRelationship::RELATIONSHIP_NN)
+ px = 15;
+ else
+ px = 11;
+ }
+ else
+ {
+ if(rel_type == BaseRelationship::RELATIONSHIP_11)
+ {
+ if(signal < 0)
+ px = 15;
+ else
+ px = -13 - circle_item->boundingRect().width();
+ }
+ else
+ px = -15 - circle_item->boundingRect().width();
+ }
+
+ pen = pens[tab_id];
+
+ if(rel_type == BaseRelationship::RELATIONSHIP_FK)
+ pen.setStyle(Qt::DashLine);
+
+ circle_item->setPos(px, py);
+ circle_item->setPen(pen);
+ circle_item->setBrush(descriptor->brush());
+ }
+
+ lin_idx = 0;
+ brect = QRectF(tables[tab_id]->pos(), tables[tab_id]->boundingRect().size());
+ pol = QPolygonF(brect);
+
+ /* Configuring the position of the descriptor based upon the intersection
+ * point of the relationship line and the edge of the bounding rect of the table */
+ cf_descriptors[tab_id]->setRotation(-rel_lines[tab_id].angle());
+
+ for(int idx = 0; idx < pol.size() - 1; idx++)
+ {
+ edge.setP1(pol.at(idx));
+ edge.setP2(pol.at(idx + 1));
+
+ if(rel_lines[tab_id].intersect(edge, &pi)==QLineF::BoundedIntersection)
+ {
+ cf_descriptors[tab_id]->setPos(pi);
+ break;
+ }
+ else
+ {
+ /* There some cases in which the intersection point can't be determined in BoundedIntersection mode
+ * so as a fallback we check if one of the coordinates of the identified intersection point
+ * is between one of the coordinates of the relationship line used in the operation.
+ *
+ * If it matches we'll use the use one of the extremes of the relationship line in the matching coordinate */
+ min_x = qMin(rel_lines[tab_id].p1().x(), rel_lines[tab_id].p2().x()),
+ max_x = qMax(rel_lines[tab_id].p1().x(), rel_lines[tab_id].p2().x()),
+ min_y = qMin(rel_lines[tab_id].p1().y(), rel_lines[tab_id].p2().y()),
+ max_y = qMax(rel_lines[tab_id].p1().y(), rel_lines[tab_id].p2().y());
+
+ if(pi.x() >= min_x && pi.x() <= max_x)
+ cf_descriptors[tab_id]->setPos(QPointF(pi.x(), (rel_lines[tab_id].dy() >= 0 ? max_y : min_y)));
+ else if(pi.y() >= min_y && pi.y() <= max_y)
+ cf_descriptors[tab_id]->setPos(QPointF((rel_lines[tab_id].dx() >= 0 ? max_x : min_x), pi.y()));
+ }
+ }
+ }
+ }
}
void RelationshipView::configureAttributes(void)
@@ -1195,7 +1742,7 @@ void RelationshipView::configureAttributes(void)
desc->setRect(rect);
desc->setPen(BaseObjectView::getBorderStyle(ParsersAttributes::ATTRIBUTE));
desc->setBrush(BaseObjectView::getFillStyle(ParsersAttributes::ATTRIBUTE));
- lin->setPen(BaseObjectView::getBorderStyle(ParsersAttributes::RELATIONSHIP));
+ lin->setPen(descriptor->pen());
text->setBrush(fmt.foreground());
text->setFont(font);
sel_attrib->setPen(BaseObjectView::getBorderStyle(ParsersAttributes::OBJ_SELECTION));
@@ -1215,7 +1762,7 @@ void RelationshipView::configureAttributes(void)
sel_attrib->setPolygon(pol);
p_aux=this->mapToItem(attrib, descriptor->pos().x() + (descriptor->boundingRect().width()/2.0f),
- descriptor->pos().y() + (descriptor->boundingRect().height()/2.0f));
+ descriptor->pos().y() + (descriptor->boundingRect().height()/2.0f));
lin->setLine(QLineF(p_aux, desc->boundingRect().center()));
py+=desc->boundingRect().height() + (2 * VERT_SPACING);
@@ -1245,8 +1792,8 @@ void RelationshipView::configureLabels(void)
pnt=descriptor->pos();
x=pnt.x() -
- ((labels[BaseRelationship::REL_NAME_LABEL]->boundingRect().width() -
- descriptor->boundingRect().width())/2.0f);
+ ((labels[BaseRelationship::REL_NAME_LABEL]->boundingRect().width() -
+ descriptor->boundingRect().width())/2.0f);
if(base_rel->isSelfRelationship())
y=pnt.y() - labels[BaseRelationship::REL_NAME_LABEL]->boundingRect().height() - (2 * VERT_SPACING);
@@ -1256,8 +1803,16 @@ void RelationshipView::configureLabels(void)
labels[BaseRelationship::REL_NAME_LABEL]->setVisible(!hide_name_label);
configureLabelPosition(BaseRelationship::REL_NAME_LABEL, x, y);
- if(rel_type!=BaseRelationship::RELATIONSHIP_GEN &&
- rel_type!=BaseRelationship::RELATIONSHIP_DEP)
+ //Hides the cardinality labels when crow's feet is enabled
+ if(labels[BaseRelationship::SRC_CARD_LABEL] && labels[BaseRelationship::DST_CARD_LABEL])
+ {
+ labels[BaseRelationship::SRC_CARD_LABEL]->setVisible(!use_crows_foot);
+ labels[BaseRelationship::DST_CARD_LABEL]->setVisible(!use_crows_foot);
+ }
+
+ if(!use_crows_foot &&
+ rel_type!=BaseRelationship::RELATIONSHIP_GEN &&
+ rel_type!=BaseRelationship::RELATIONSHIP_DEP)
{
QPointF pi, pf, p_int, pos;
unsigned idx, i1;
@@ -1265,7 +1820,7 @@ void RelationshipView::configureLabels(void)
QLineF lins[2], borders[2][4];
QRectF tab_rect, rect;
unsigned label_ids[2]={ BaseRelationship::SRC_CARD_LABEL,
- BaseRelationship::DST_CARD_LABEL };
+ BaseRelationship::DST_CARD_LABEL };
if(!base_rel->isSelfRelationship() &&
line_conn_mode==CONNECT_FK_TO_PK && rel_type!=BaseRelationship::RELATIONSHIP_NN)
@@ -1304,9 +1859,9 @@ void RelationshipView::configureLabels(void)
borders[idx][0].setPoints(pos, QPointF(pos.x(), pos.y() + rect.height()));
borders[idx][1].setPoints(QPointF(pos.x(), pos.y() + rect.height()),
- QPointF(pos.x() + rect.width(), pos.y() + rect.height()));
+ QPointF(pos.x() + rect.width(), pos.y() + rect.height()));
borders[idx][2].setPoints(QPointF(pos.x() + rect.width(), pos.y()),
- QPointF(pos.x() + rect.width(), pos.y() + rect.height()));
+ QPointF(pos.x() + rect.width(), pos.y() + rect.height()));
borders[idx][3].setPoints(pos, QPointF(pos.x() + rect.width(), pos.y()));
}
@@ -1437,7 +1992,7 @@ QRectF RelationshipView::__boundingRect(void)
//Checks if some label is out of reference dimension
for(i=0; i < 3; i++)
{
- if(labels[i])
+ if(labels[i] && labels[i]->isVisible())
{
rect.setTopLeft(labels[i]->scenePos());
rect.setSize(labels[i]->boundingRect().size());
diff --git a/libobjrenderer/src/relationshipview.h b/libobjrenderer/src/relationshipview.h
index ff51bd4f0..624403c5d 100644
--- a/libobjrenderer/src/relationshipview.h
+++ b/libobjrenderer/src/relationshipview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -46,6 +46,9 @@ class RelationshipView: public BaseObjectView {
//! \brief Indicates that the relationship lines should be curved
static bool use_curved_lines;
+ //! \brief Indicates that the relationship should be drawn in Crow's foot notation
+ static bool use_crows_foot;
+
/*! \brief Specify the type of connection used by the lines. The first (classical)
is to connect the line to tables through their central points. The second (better semantics)
makes the line start from the fk columns on receiver table and connecting to the pk columns on reference table */
@@ -100,6 +103,13 @@ class RelationshipView: public BaseObjectView {
//! \brief Stores the curved lines representing the relationship
vector curves;
+ //! \brief Stores the crow's foot notation descriptors
+ QGraphicsItemGroup * cf_descriptors[2];
+
+ vector src_cf_lines, dst_cf_lines;
+
+ QGraphicsEllipseItem *round_cf_descriptors[2];
+
//! \brief Stores the selected child object index
int sel_object_idx;
@@ -109,6 +119,9 @@ class RelationshipView: public BaseObjectView {
//! \brief Configures the descriptor form and positioning
void configureDescriptor(void);
+ //! \brief Configures the crow's feet descriptors form and positioning
+ void configureCrowsFootDescriptors(void);
+
//! \brief Configures the attributes positioning
void configureAttributes(void);
@@ -146,7 +159,8 @@ class RelationshipView: public BaseObjectView {
public:
static const unsigned CONNECT_CENTER_PNTS=0,
- CONNECT_FK_TO_PK=1;
+ CONNECT_FK_TO_PK=1,
+ CONNECT_TABLE_EGDES=2;
RelationshipView(BaseRelationship *rel);
~RelationshipView(void);
@@ -169,6 +183,12 @@ class RelationshipView: public BaseObjectView {
//! \brief Returns the current state of curved lines usage
static bool isCurvedLines(void);
+ //! \brief Enables the usage of Crow's foot notation for all relationships
+ static void setCrowsFoot(bool value);
+
+ //! \brief Returns the current state of Crow's foot notation usage
+ static bool isCrowsFoot(void);
+
/*! \brief Configures the mode in which the lines are connected on tables.
The first one is the CONNECT_CENTER_PNTS (the classical one) which connects the
two tables through the center points. The CONNECT_FK_TO_PK is the one with a better
diff --git a/libobjrenderer/src/roundedrectitem.cpp b/libobjrenderer/src/roundedrectitem.cpp
index 50a0001aa..538527b75 100644
--- a/libobjrenderer/src/roundedrectitem.cpp
+++ b/libobjrenderer/src/roundedrectitem.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/roundedrectitem.h b/libobjrenderer/src/roundedrectitem.h
index e5c3c51f5..7c51cf919 100644
--- a/libobjrenderer/src/roundedrectitem.h
+++ b/libobjrenderer/src/roundedrectitem.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/schemaview.cpp b/libobjrenderer/src/schemaview.cpp
index f0809d9ef..cc065fcc3 100644
--- a/libobjrenderer/src/schemaview.cpp
+++ b/libobjrenderer/src/schemaview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -148,11 +148,21 @@ QList SchemaView::getChildren(void)
void SchemaView::togglePlaceholder(bool visible)
{
- //BaseObjectView::togglePlaceholder(visible);
for(auto &obj : getChildren())
obj->togglePlaceholder(visible);
}
+void SchemaView::moveTo(QPointF new_pos)
+{
+ double dx=new_pos.x() - pos().x(),
+ dy=new_pos.y() - pos().y();
+
+ this->setPos(new_pos);
+
+ for(auto &child : children)
+ child->moveBy(dx, dy);
+}
+
void SchemaView::configureObject(void)
{
Schema *schema=dynamic_cast(this->getSourceObject());
@@ -223,7 +233,7 @@ void SchemaView::configureObject(void)
this->setFlag(ItemSendsGeometryChanges, true);
color=schema->getFillColor();
- color.setAlpha(80);
+ color.setAlpha(OBJ_ALPHA_CHANNEL * 0.80);
box->setBrush(color);
color=QColor(color.red()/3,color.green()/3,color.blue()/3, 80);
diff --git a/libobjrenderer/src/schemaview.h b/libobjrenderer/src/schemaview.h
index 42c1a297f..f80b591a6 100644
--- a/libobjrenderer/src/schemaview.h
+++ b/libobjrenderer/src/schemaview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -67,10 +67,13 @@ class SchemaView: public BaseObjectView
void selectChildren(void);
unsigned getChildrenCount(void);
+
QList getChildren(void);
virtual void togglePlaceholder(bool visible);
+ void moveTo(QPointF new_pos);
+
public slots:
void configureObject(void);
};
diff --git a/libobjrenderer/src/styledtextboxview.h b/libobjrenderer/src/styledtextboxview.h
index a2aa90435..c36848674 100644
--- a/libobjrenderer/src/styledtextboxview.h
+++ b/libobjrenderer/src/styledtextboxview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/tableobjectview.cpp b/libobjrenderer/src/tableobjectview.cpp
index 8f49e3169..383a499a8 100644
--- a/libobjrenderer/src/tableobjectview.cpp
+++ b/libobjrenderer/src/tableobjectview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -58,6 +58,7 @@ void TableObjectView::configureDescriptor(ConstraintType constr_type)
Column *column=dynamic_cast(this->getSourceObject());
bool ellipse_desc=false;
double factor=(font_config[ParsersAttributes::GLOBAL].font().pointSizeF()/DEFAULT_FONT_SIZE) * BaseObjectView::getScreenDpiFactor();
+ QPen pen;
//Based upon the source object type the descriptor is allocated
if(this->getSourceObject())
@@ -102,7 +103,10 @@ void TableObjectView::configureDescriptor(ConstraintType constr_type)
attrib=ParsersAttributes::COLUMN;
desc->setBrush(this->getFillStyle(attrib));
- desc->setPen(this->getBorderStyle(attrib));
+
+ pen = this->getBorderStyle(attrib);
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.15f);
+ desc->setPen(pen);
}
else
{
@@ -140,7 +144,10 @@ void TableObjectView::configureDescriptor(ConstraintType constr_type)
desc->setPolygon(pol);
desc->setBrush(this->getFillStyle(attrib));
- desc->setPen(this->getBorderStyle(attrib));
+
+ pen = this->getBorderStyle(attrib);
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.15f);
+ desc->setPen(pen);
}
}
else if(obj_type==OBJ_INDEX || obj_type==OBJ_RULE ||
@@ -160,7 +167,10 @@ void TableObjectView::configureDescriptor(ConstraintType constr_type)
desc->setPolygon(pol);
desc->setBrush(this->getFillStyle(tab_obj->getSchemaName()));
- desc->setPen(this->getBorderStyle(tab_obj->getSchemaName()));
+
+ pen = this->getBorderStyle(tab_obj->getSchemaName());
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.15f);
+ desc->setPen(pen);
}
else
{
@@ -169,7 +179,10 @@ void TableObjectView::configureDescriptor(ConstraintType constr_type)
desc->setRect(QRectF(QPointF(0,0),
QSizeF(9.0f * factor, 9.0f * factor)));
desc->setBrush(this->getFillStyle(ParsersAttributes::REFERENCE));
- desc->setPen(this->getBorderStyle(ParsersAttributes::REFERENCE));
+
+ pen = this->getBorderStyle(ParsersAttributes::REFERENCE);
+ pen.setWidthF(OBJ_BORDER_WIDTH * 1.15f);
+ desc->setPen(pen);
}
}
diff --git a/libobjrenderer/src/tableobjectview.h b/libobjrenderer/src/tableobjectview.h
index c5ce23cfa..c4838a520 100644
--- a/libobjrenderer/src/tableobjectview.h
+++ b/libobjrenderer/src/tableobjectview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/tabletitleview.cpp b/libobjrenderer/src/tabletitleview.cpp
index 08aa1136a..ed7e1c71d 100644
--- a/libobjrenderer/src/tabletitleview.cpp
+++ b/libobjrenderer/src/tabletitleview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/tabletitleview.h b/libobjrenderer/src/tabletitleview.h
index 810f5c299..dbcdb0051 100644
--- a/libobjrenderer/src/tabletitleview.h
+++ b/libobjrenderer/src/tabletitleview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/tableview.cpp b/libobjrenderer/src/tableview.cpp
index a7907c0c1..8385f31e2 100644
--- a/libobjrenderer/src/tableview.cpp
+++ b/libobjrenderer/src/tableview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/tableview.h b/libobjrenderer/src/tableview.h
index 4636e805d..3825896c1 100644
--- a/libobjrenderer/src/tableview.h
+++ b/libobjrenderer/src/tableview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/textboxview.cpp b/libobjrenderer/src/textboxview.cpp
index a6f9b1c63..4b707fa9f 100644
--- a/libobjrenderer/src/textboxview.cpp
+++ b/libobjrenderer/src/textboxview.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libobjrenderer/src/textboxview.h b/libobjrenderer/src/textboxview.h
index 767b2bd55..2cfa29d7c 100644
--- a/libobjrenderer/src/textboxview.h
+++ b/libobjrenderer/src/textboxview.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libparsers/src/attribsmap.h b/libparsers/src/attribsmap.h
index 7737af750..39c05b51a 100644
--- a/libparsers/src/attribsmap.h
+++ b/libparsers/src/attribsmap.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libparsers/src/parsersattributes.cpp b/libparsers/src/parsersattributes.cpp
index 0013a95e8..3a3068e96 100644
--- a/libparsers/src/parsersattributes.cpp
+++ b/libparsers/src/parsersattributes.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -31,6 +31,7 @@ namespace ParsersAttributes {
ALIGNMENT=QString("alignment"),
ALIGN_OBJS_TO_GRID=QString("align-objs-to-grid"),
ALTER_CMDS=QString("alter-cmds"),
+ ALLOW_CONNS=QString("allow-conns"),
ANALYZE_FUNC=QString("analyze"),
ANCESTOR_TABLE=QString("ancestor-table"),
APPEND_AT_EOD=QString("append-at-eod"),
@@ -57,6 +58,7 @@ namespace ParsersAttributes {
BOTTOM=QString("bottom"),
BUFFERING=QString("buffering"),
BY_VALUE=QString("by-value"),
+ BYPASSRLS=QString("bypassrls"),
CACHE=QString("cache"),
CANONICAL_FUNC=QString("canonical"),
CANVAS_CORNER_MOVE=QString("canvas-corner-move"),
@@ -66,6 +68,7 @@ namespace ParsersAttributes {
CATEGORY=QString("category"),
CHANGE=QString("change"),
CHANGELOG=QString("changelog"),
+ CHECK_EXP=QString("check-exp"),
CHECK_UPDATE=QString("check-update"),
CK_CONSTR=QString("ck-constr"),
CLIENT_ENCODING=QString("client-encoding"),
@@ -80,9 +83,11 @@ namespace ParsersAttributes {
COLOR=QString("color"),
COLORS=QString("colors"),
COLS_COMMENT=QString("cols-comment"),
+ COL_IS_IDENTITY=QString("col-is-identity"),
COLUMN_ALIAS=QString("column-alias"),
COLUMN=QString("column"),
COLUMNS=QString("columns"),
+ COMMAND=QString("command"),
COMMANDS=QString("commands"),
COMMENT=QString("comment"),
COMMUTATOR_OP=QString("commutator-op"),
@@ -97,6 +102,7 @@ namespace ParsersAttributes {
CONN_LIMIT=QString("connlimit"),
CONNECT_CENTER_PNTS=QString("center-pnts"),
CONNECT_FK_TO_PK=QString("fk-to-pk"),
+ CONNECT_TABLE_EDGES=QString("table-edges"),
CONNECT_PRIV=QString("connect"),
CONNECTION=QString("connection"),
CONNECTIONS=QString("connections"),
@@ -115,6 +121,7 @@ namespace ParsersAttributes {
CREATE=QString("create"),
CREATEDB=QString("createdb"),
CREATEROLE=QString("createrole"),
+ CROWS_FOOT=QString("crows-foot"),
CTE_EXPRESSION=QString("cte-exp"),
CUR_VERSION=QString("cur-version"),
CUSTOM_COLOR=QString("custom-color"),
@@ -123,6 +130,7 @@ namespace ParsersAttributes {
CYCLE=QString("cycle"),
DATA_DIRECTORY=QString("data-directory"),
DATE=QString("date"),
+ DATABASE=QString("database"),
DB_MODEL=QString("dbmodel"),
DDL_END_TOKEN=QString("-- ddl-end --"),
DECL_IN_TABLE=QString("decl-in-table"),
@@ -136,7 +144,7 @@ namespace ParsersAttributes {
DEFAULT=QString("default"),
DEFER_TYPE=QString("defer-type"),
DEFERRABLE=QString("deferrable"),
- DEFINITION=QString("definition"),
+ DEFINITION=QString("definition"),
DEL_ACTION=QString("del-action"),
DEL_EVENT=QString("del-event"),
DELETE_PRIV=QString("delete"),
@@ -148,6 +156,7 @@ namespace ParsersAttributes {
DIRECTORY=QString("directory"),
DISABLE_SMOOTHNESS=QString("disable-smoothness"),
DISPLAY_LINE_NUMBERS=QString("display-line-numbers"),
+ DOM_CONSTRAINT=QString("domconstraint"),
DOCK_WIDGETS=QString("dock-widgets"),
DROP_CMDS=QString("drop-cmds"),
DROP=QString("drop"),
@@ -160,6 +169,7 @@ namespace ParsersAttributes {
DST_TABLE=QString("dst-table"),
DYNAMIC_LIBRARY_PATH=QString("dynamic-library-path"),
DYNAMIC_SHARED_MEMORY=QString("dynamic-shared-memory-type"),
+ END_EXP=QString("end-exp"),
ELEMENT=QString("element"),
ELEMENTS=QString("elements"),
ENCODING=QString("encoding"),
@@ -184,6 +194,7 @@ namespace ParsersAttributes {
EXPRESSIONS=QString("expressions"),
EXT_OBJ_OIDS=QString("ext-obj-oids"),
FACTOR=QString("factor"),
+ FADEIN_OBJECTS=QString("fadein-objects"),
FADED_OUT=QString("faded-out"),
FAMILY=QString("family"),
FAST_UPDATE=QString("fast-update"),
@@ -219,12 +230,12 @@ namespace ParsersAttributes {
HIDE_REL_NAME=QString("hide-rel-name"),
HIDE_TABLE_TAGS=QString("hide-table-tags"),
HIGHLIGHT_LINES=QString("highlight-lines"),
- HIGHLIGHT_OBJECTS=QString("highlight-objects"),
HIGHLIGHT_ORDER=QString("highlight-order"),
HISTORY_MAX_LENGTH=QString("history-max-length"),
ICON=QString("icon"),
ID=QString("id"),
IDENTIFIER=QString("identifier"),
+ IDENTITY_TYPE=QString("identity-type"),
IDENT_FILE=QString("ident-file"),
IGNORED_CHARS=QString("ignored-chars"),
IMPLICIT=QString("implicit"),
@@ -249,6 +260,7 @@ namespace ParsersAttributes {
INTERNAL_LENGTH=QString("internal-length"),
INTERVAL_TYPE=QString("interval-type"),
INVERT_RANGESEL_TRIGGER=QString("invert-rangesel-trigger"),
+ IS_TEMPLATE=QString("is-template"),
IO_CAST=QString("io-cast"),
ITALIC=QString("italic"),
JOIN_FUNC=QString("join"),
@@ -293,6 +305,7 @@ namespace ParsersAttributes {
NAMES=QString("names"),
NEGATOR_OP=QString("negator-op"),
NEW_NAME=QString("new-name"),
+ NEW_IDENTITY_TYPE=QString("new-identity-type"),
NEW_VERSION=QString("new-version"),
NN_COLUMN=QString("nn-column"),
NO_INHERIT=QString("no-inherit"),
@@ -340,6 +353,7 @@ namespace ParsersAttributes {
PATTERNS=QString("patterns"),
PER_ROW=QString("per-line"),
PERMISSION=QString("permission"),
+ PERMISSIVE=QString("permissive"),
PGMODELER_VERSION=QString("pgmodeler-ver"),
PGSQL_BASE_TYPE=QString("basetype"),
PGSQL_VERSION=QString("pgsql-ver"),
@@ -379,6 +393,7 @@ namespace ParsersAttributes {
REF_TYPE=QString("ref-type"),
REFER=QString("refer"),
REFERENCE=QString("reference"),
+ REFERENCE_FK=QString("reference-fk"),
REFERENCES_PRIV=QString("references"),
REFERENCES=QString("references"),
REFERRERS=QString("referrers"),
@@ -394,14 +409,20 @@ 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"),
REVOKE=QString("revoke"),
RIGHT_TYPE=QString("right-type"),
RIGHT=QString("right"),
+ RLS_ENABLED=QString("rls-enabled"),
+ RLS_FORCED=QString("rls-forced"),
ROLE_TYPE=QString("role-type"),
ROLE=QString("role"),
+ ROLE_CURRENT_USER=QString("CURRENT_USER"),
+ ROLE_SESSION_USER=QString("SESSION_USER"),
+ ROLE_PUBLIC=QString("PUBLIC"),
ROLES=QString("roles"),
ROW_AMOUNT=QString("row-amount"),
RULES=QString("rules"),
@@ -411,6 +432,7 @@ namespace ParsersAttributes {
SECURITY_TYPE=QString("security-type"),
SELECT_EXP=QString("select-exp"),
SELECT_PRIV=QString("select"),
+ SELECT_OBJECTS=QString("select-objects"),
SEND_FUNC=QString("send"),
SEQUENCE=QString("sequence"),
SERVER_ENCODING=QString("server-encoding"),
@@ -512,6 +534,7 @@ namespace ParsersAttributes {
USE_PLACEHOLDERS=QString("use-placeholders"),
USE_SORTING=QString("use-sorting"),
USE_UNIQUE_NAMES=QString("use-unique-names"),
+ USING_EXP=QString("using-exp"),
VALIDATOR_FUNC=QString("validator"),
VALIDATOR=QString("validator"),
VALIDITY=QString("validity"),
diff --git a/libparsers/src/parsersattributes.h b/libparsers/src/parsersattributes.h
index 0bcec7c19..c58b148a6 100644
--- a/libparsers/src/parsersattributes.h
+++ b/libparsers/src/parsersattributes.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -46,6 +46,7 @@ namespace ParsersAttributes {
ALIGNMENT,
ALIGN_OBJS_TO_GRID,
ALTER_CMDS,
+ ALLOW_CONNS,
ANALYZE_FUNC,
ANCESTOR_TABLE,
APPEND_AT_EOD,
@@ -72,6 +73,7 @@ namespace ParsersAttributes {
BOTTOM,
BUFFERING,
BY_VALUE,
+ BYPASSRLS,
CACHE,
CANONICAL_FUNC,
CANVAS_CORNER_MOVE,
@@ -81,6 +83,7 @@ namespace ParsersAttributes {
CATEGORY,
CHANGE,
CHANGELOG,
+ CHECK_EXP,
CHECK_UPDATE,
CK_CONSTR,
CLIENT_ENCODING,
@@ -95,9 +98,11 @@ namespace ParsersAttributes {
COLOR,
COLORS,
COLS_COMMENT,
+ COL_IS_IDENTITY,
COLUMN_ALIAS,
COLUMN,
COLUMNS,
+ COMMAND,
COMMANDS,
COMMENT,
COMMUTATOR_OP,
@@ -112,6 +117,7 @@ namespace ParsersAttributes {
CONN_LIMIT,
CONNECT_CENTER_PNTS,
CONNECT_FK_TO_PK,
+ CONNECT_TABLE_EDGES,
CONNECT_PRIV,
CONNECTION,
CONNECTIONS,
@@ -130,12 +136,14 @@ namespace ParsersAttributes {
CREATE,
CREATEDB,
CREATEROLE,
+ CROWS_FOOT,
CTE_EXPRESSION,
CUR_VERSION,
CUSTOM_COLOR,
CUSTOM_FILTER,
CUSTOMIDXS,
CYCLE,
+ DATABASE,
DATA_DIRECTORY,
DATE,
DB_MODEL,
@@ -163,6 +171,7 @@ namespace ParsersAttributes {
DIRECTORY,
DISABLE_SMOOTHNESS,
DISPLAY_LINE_NUMBERS,
+ DOM_CONSTRAINT,
DOCK_WIDGETS,
DROP_CMDS,
DROP,
@@ -179,6 +188,7 @@ namespace ParsersAttributes {
ELEMENTS,
ENCODING,
ENCRYPTED,
+ END_EXP,
ENUM_TYPE,
ENUMERATIONS,
EVENT_TYPE,
@@ -199,6 +209,7 @@ namespace ParsersAttributes {
EXPRESSIONS,
EXT_OBJ_OIDS,
FACTOR,
+ FADEIN_OBJECTS,
FADED_OUT,
FAMILY,
FAST_UPDATE,
@@ -234,12 +245,12 @@ namespace ParsersAttributes {
HIDE_REL_NAME,
HIDE_TABLE_TAGS,
HIGHLIGHT_LINES,
- HIGHLIGHT_OBJECTS,
HIGHLIGHT_ORDER,
HISTORY_MAX_LENGTH,
ICON,
ID,
IDENTIFIER,
+ IDENTITY_TYPE,
IGNORED_CHARS,
IMPLICIT,
IMPORT,
@@ -265,6 +276,7 @@ namespace ParsersAttributes {
INTERVAL_TYPE,
INVERT_RANGESEL_TRIGGER,
IO_CAST,
+ IS_TEMPLATE,
ITALIC,
JOIN_FUNC,
LABEL,
@@ -308,6 +320,7 @@ namespace ParsersAttributes {
NAMES,
NEGATOR_OP,
NEW_NAME,
+ NEW_IDENTITY_TYPE,
NEW_VERSION,
NN_COLUMN,
NO_INHERIT,
@@ -355,6 +368,7 @@ namespace ParsersAttributes {
PATTERNS,
PER_ROW,
PERMISSION,
+ PERMISSIVE,
PGMODELER_VERSION,
PGSQL_BASE_TYPE,
PGSQL_VERSION,
@@ -394,6 +408,7 @@ namespace ParsersAttributes {
REF_TYPE,
REFER,
REFERENCE,
+ REFERENCE_FK,
REFERENCES_PRIV,
REFERENCES,
REFERRERS,
@@ -408,6 +423,7 @@ namespace ParsersAttributes {
RELATIONSHIP,
RENAME,
REPLICATION,
+ RESTART_SEQ,
RESTRICTION_FUNC,
RETURN_TABLE,
RETURN_TYPE,
@@ -415,6 +431,8 @@ namespace ParsersAttributes {
REVOKE,
RIGHT_TYPE,
RIGHT,
+ RLS_ENABLED,
+ RLS_FORCED,
ROLE_TYPE,
ROLE,
ROLES,
@@ -426,6 +444,7 @@ namespace ParsersAttributes {
SECURITY_TYPE,
SELECT_EXP,
SELECT_PRIV,
+ SELECT_OBJECTS,
SEND_FUNC,
SEQUENCE,
SERVER_ENCODING,
@@ -527,6 +546,7 @@ namespace ParsersAttributes {
USE_PLACEHOLDERS,
USE_SORTING,
USE_UNIQUE_NAMES,
+ USING_EXP,
VALIDATOR_FUNC,
VALIDATOR,
VALIDITY,
diff --git a/libparsers/src/schemaparser.cpp b/libparsers/src/schemaparser.cpp
index ba31c741c..3bb7248e9 100644
--- a/libparsers/src/schemaparser.cpp
+++ b/libparsers/src/schemaparser.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libparsers/src/schemaparser.h b/libparsers/src/schemaparser.h
index 0ef011392..13a2c1da9 100644
--- a/libparsers/src/schemaparser.h
+++ b/libparsers/src/schemaparser.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libparsers/src/xmlparser.cpp b/libparsers/src/xmlparser.cpp
index 76bf437a3..cb78d0f51 100644
--- a/libparsers/src/xmlparser.cpp
+++ b/libparsers/src/xmlparser.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libparsers/src/xmlparser.h b/libparsers/src/xmlparser.h
index 1a80c303e..fae743272 100644
--- a/libparsers/src/xmlparser.h
+++ b/libparsers/src/xmlparser.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libpgconnector/src/catalog.cpp b/libpgconnector/src/catalog.cpp
index b3e059f58..28b95fc86 100644
--- a/libpgconnector/src/catalog.cpp
+++ b/libpgconnector/src/catalog.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -25,6 +25,7 @@ const QString Catalog::PGSQL_FALSE=QString("f");
const QString Catalog::BOOL_FIELD=QString("_bool");
const QString Catalog::ARRAY_PATTERN=QString("((\\[)[0-9]+(\\:)[0-9]+(\\])=)?(\\{)((.)+(,)*)*(\\})$");
const QString Catalog::GET_EXT_OBJS_SQL=QString("SELECT objid AS oid FROM pg_depend WHERE objid > 0 AND refobjid > 0 AND deptype='e'");
+const QString Catalog::PGMODELER_TEMP_DB_OBJ=QString("__pgmodeler_tmp");
bool Catalog::use_cached_queries=false;
attribs_map Catalog::catalog_queries;
@@ -37,15 +38,28 @@ map Catalog::oid_fields=
{OBJ_CONVERSION, "cn.oid"}, {OBJ_CAST, "cs.oid"}, {OBJ_VIEW, "vw.oid"},
{OBJ_SEQUENCE, "sq.oid"}, {OBJ_DOMAIN, "dm.oid"}, {OBJ_TYPE, "tp.oid"},
{OBJ_TABLE, "tb.oid"}, {OBJ_COLUMN, "cl.oid"}, {OBJ_CONSTRAINT, "cs.oid"},
- {OBJ_RULE, "rl.oid"}, {OBJ_TRIGGER, "tg.oid"}, {OBJ_INDEX, "id.oid"},
- {OBJ_EVENT_TRIGGER, "et.oid"},
+ {OBJ_RULE, "rl.oid"}, {OBJ_TRIGGER, "tg.oid"}, {OBJ_INDEX, "id.indexrelid"},
+ {OBJ_EVENT_TRIGGER, "et.oid"}, {OBJ_POLICY, "pl.oid"}
};
map Catalog::ext_oid_fields={
{OBJ_CONSTRAINT, "cs.conrelid"},
{OBJ_INDEX, "id.indexrelid"},
{OBJ_TRIGGER, "tg.tgrelid"},
- {OBJ_RULE, "rl.ev_class"}
+ {OBJ_RULE, "rl.ev_class"},
+ {OBJ_POLICY, "pl.polrelid"}
+};
+
+map Catalog::name_fields=
+{ {OBJ_DATABASE, "datname"}, {OBJ_ROLE, "rolname"}, {OBJ_SCHEMA,"nspname"},
+ {OBJ_LANGUAGE, "lanname"}, {OBJ_TABLESPACE, "spcname"}, {OBJ_EXTENSION, "extname"},
+ {OBJ_FUNCTION, "proname"}, {OBJ_AGGREGATE, "proname"}, {OBJ_OPERATOR, "oprname"},
+ {OBJ_OPCLASS, "opcname"}, {OBJ_OPFAMILY, "opfname"}, {OBJ_COLLATION, "collname"},
+ {OBJ_CONVERSION, "conname"}, {OBJ_CAST, ""}, {OBJ_VIEW, "relname"},
+ {OBJ_SEQUENCE, "relname"}, {OBJ_DOMAIN, "typname"}, {OBJ_TYPE, "typname"},
+ {OBJ_TABLE, "relname"}, {OBJ_COLUMN, "attname"}, {OBJ_CONSTRAINT, "conname"},
+ {OBJ_RULE, "rulename"}, {OBJ_TRIGGER, "tgname"}, {OBJ_INDEX, "relname"},
+ {OBJ_EVENT_TRIGGER, "evtname"}, {OBJ_POLICY, "polname"}
};
Catalog::Catalog(void)
@@ -131,6 +145,11 @@ unsigned Catalog::getLastSysObjectOID(void)
return(last_sys_oid);
}
+bool Catalog::isSystemObject(unsigned oid)
+{
+ return(oid <= last_sys_oid);
+}
+
bool Catalog::isExtensionObject(unsigned oid)
{
return(ext_obj_oids.contains(QString::number(oid)));
@@ -161,6 +180,14 @@ QString Catalog::getCatalogQuery(const QString &qry_type, ObjectType obj_type, b
{
QString sql, custom_filter;
+ /* Escaping apostrophe (') in the attributes values to avoid SQL errors
+ * due to support to this char in the middle of objects' names */
+ for(auto &attr : attribs)
+ {
+ if(attr.first != ParsersAttributes::CUSTOM_FILTER && attr.second.contains(QChar('\'')))
+ attr.second.replace(QChar('\''), QString("''"));
+ }
+
schparser.setPgSQLVersion(connection.getPgSQLVersion(true));
attribs[qry_type]=ParsersAttributes::_TRUE_;
@@ -200,10 +227,15 @@ QString Catalog::getCatalogQuery(const QString &qry_type, ObjectType obj_type, b
//Appeding the custom filter to the whole catalog query
if(!custom_filter.isEmpty())
{
+ int order_by_idx = sql.indexOf(QString("ORDER BY"), 0, Qt::CaseInsensitive);
+
+ if(order_by_idx < 0)
+ order_by_idx = sql.length();
+
if(!sql.contains(QString("WHERE"), Qt::CaseInsensitive))
- sql+=QString(" WHERE ");
+ sql.insert(order_by_idx, QString(" WHERE ") + custom_filter);
else
- sql+=QString(" AND (%1)").arg(custom_filter);
+ sql.insert(order_by_idx, QString(" AND (%1) ").arg(custom_filter));
}
//Append a LIMIT clause when the single_result is set
@@ -446,12 +478,12 @@ vector Catalog::getMultipleAttributes(ObjectType obj_type, attribs_
QString Catalog::getCommentQuery(const QString &oid_field, bool is_shared_obj)
{
- QString query_id=QString("get") + ParsersAttributes::COMMENT;
+ QString query_id=ParsersAttributes::COMMENT;
try
{
attribs_map attribs={{ParsersAttributes::OID, oid_field},
- {ParsersAttributes::SHARED_OBJ, (is_shared_obj ? ParsersAttributes::_TRUE_ : QString())}};
+ {ParsersAttributes::SHARED_OBJ, (is_shared_obj ? ParsersAttributes::_TRUE_ : QString())}};
loadCatalogQuery(query_id);
return(schparser.getCodeDefinition(attribs).simplified());
@@ -527,7 +559,7 @@ vector Catalog::getObjectsAttributes(ObjectType obj_type, const QSt
try
{
bool is_shared_obj=(obj_type==OBJ_DATABASE || obj_type==OBJ_ROLE || obj_type==OBJ_TABLESPACE ||
- obj_type==OBJ_LANGUAGE || obj_type==OBJ_CAST);
+ obj_type==OBJ_LANGUAGE || obj_type==OBJ_CAST);
extra_attribs[ParsersAttributes::SCHEMA]=schema;
extra_attribs[ParsersAttributes::TABLE]=table;
@@ -535,7 +567,8 @@ vector Catalog::getObjectsAttributes(ObjectType obj_type, const QSt
if(!filter_oids.empty())
extra_attribs[ParsersAttributes::FILTER_OIDS]=createOidFilter(filter_oids);
- if(!TableObject::isTableObject(obj_type))
+ //Retrieve the comment catalog query. Only columns need to retreive comments in their own catalog query file
+ if(obj_type != OBJ_COLUMN)
extra_attribs[ParsersAttributes::COMMENT]=getCommentQuery(oid_fields[obj_type], is_shared_obj);
return(getMultipleAttributes(obj_type, extra_attribs));
@@ -561,6 +594,37 @@ attribs_map Catalog::getObjectAttributes(ObjectType obj_type, unsigned oid, cons
}
}
+QString Catalog::getObjectOID(const QString &name, ObjectType obj_type, const QString &schema, const QString &table)
+{
+ try
+ {
+ attribs_map attribs;
+ ResultSet res;
+
+ attribs[ParsersAttributes::CUSTOM_FILTER] = QString("%1 = E'%2'").arg(name_fields[obj_type]).arg(name);
+ attribs[ParsersAttributes::SCHEMA] = schema;
+ attribs[ParsersAttributes::TABLE] = table;
+ executeCatalogQuery(QUERY_LIST, obj_type, res, false, attribs);
+
+ if(res.getTupleCount() > 1)
+ throw Exception(QApplication::translate("Catalog","The catalog query returned more than one OID!","", -1),
+ ERR_CUSTOM,__PRETTY_FUNCTION__,__FILE__,__LINE__);
+
+ else if(res.isEmpty())
+ return("0");
+ else
+ {
+ res.accessTuple(ResultSet::FIRST_TUPLE);
+ return(res.getColumnValue(ParsersAttributes::OID));
+ }
+ }
+ catch(Exception &e)
+ {
+ throw Exception(e.getErrorMessage(), e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e,
+ QApplication::translate("Catalog","Object type: %1","", -1).arg(BaseObject::getSchemaName(obj_type)));
+ }
+}
+
attribs_map Catalog::getServerAttributes(void)
{
attribs_map attribs;
diff --git a/libpgconnector/src/catalog.h b/libpgconnector/src/catalog.h
index a33e4b74d..4b4501890 100644
--- a/libpgconnector/src/catalog.h
+++ b/libpgconnector/src/catalog.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -57,6 +57,9 @@ class Catalog {
composed by the pg_[OBJECT_TYPE] table alias. Refer to catalog query schema files for details */
static map oid_fields;
+ /*! \brief This map stores the name field for each object type. Refer to catalog query schema files for details */
+ static map name_fields;
+
/*! \brief This map stores the oid field name that is used to check if the object (or its parent) is part of a extension
(see getNotExtObjectQuery()). By default the attribute oid_fields is used instead for that purpose, but, for some objects,
there are different fields that tells if the object (or its parent) is part of extension. */
@@ -125,6 +128,9 @@ class Catalog {
Catalog(void);
Catalog(const Catalog &catalog);
+ //! \brief Stores the prefix of any temp object (in pg_temp) created during catalog reading by pgModeler
+ static const QString PGMODELER_TEMP_DB_OBJ;
+
//! \brief Excludes the system objects from listing
static const unsigned EXCL_SYSTEM_OBJS=1,
@@ -155,6 +161,9 @@ class Catalog {
//! \brief Returns the last system object oid registered on the database
unsigned getLastSysObjectOID(void);
+ //! \brief Returns if the specified oid is amongst the system objects' oids
+ bool isSystemObject(unsigned oid);
+
//! \brief Returns if the specified oid is amongst the extension created objects' oids
bool isExtensionObject(unsigned oid);
@@ -187,6 +196,11 @@ class Catalog {
//! \brief Returns the attributes for the object specified by its type and OID
attribs_map getObjectAttributes(ObjectType obj_type, unsigned oid, const QString sch_name=QString(), const QString tab_name=QString(), attribs_map extra_attribs=attribs_map());
+ /*! \brief Returns the OID of the named object. User can filter items by schema (if the object type is suitable to accept schema)
+ and by table name (only when retriving child objects for a specific table). The method will raise an exception if the catalog query
+ used returns more than one result. A zero OID is returned when no suitable object is found. */
+ QString getObjectOID(const QString &name, ObjectType obj_type, const QString &schema = QString(), const QString &table = QString());
+
//! brief This special method returns some server's attributes read from pg_settings
attribs_map getServerAttributes(void);
diff --git a/libpgconnector/src/connection.cpp b/libpgconnector/src/connection.cpp
index 349d6c9db..c284c83ac 100644
--- a/libpgconnector/src/connection.cpp
+++ b/libpgconnector/src/connection.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -120,36 +120,39 @@ void Connection::setAutoBrowseDB(bool value)
void Connection::generateConnectionString(void)
{
- attribs_map::iterator itr;
- QString value;
-
- itr=connection_params.begin();
+ QString value, param_str = QString("%1=%2 ");
//Scans the parameter map concatening the params (itr->first) / values (itr->second)
- connection_str=QString();
- while(itr!=connection_params.end())
+ connection_str.clear();
+
+ for(auto &itr : connection_params)
{
- if(itr->first!=PARAM_ALIAS)
+ if(itr.first!=PARAM_ALIAS)
{
- value=itr->second;
+ value=itr.second;
value.replace("\\","\\\\");
value.replace("'","\\'");
- if(itr->first==PARAM_PASSWORD && (value.contains(' ') || value.isEmpty()))
+ if(itr.first==PARAM_PASSWORD && (value.contains(' ') || value.isEmpty()))
value=QString("'%1'").arg(value);
if(!value.isEmpty())
{
- if(itr->first!=PARAM_OTHERS)
- connection_str+=itr->first + "=" + value + " ";
+ if(itr.first==PARAM_DB_NAME)
+ connection_str.prepend(param_str.arg(itr.first).arg(value));
+ else if(itr.first!=PARAM_OTHERS)
+ connection_str+=param_str.arg(itr.first).arg(value);
else
connection_str+=value;
}
}
-
- itr++;
}
+
+ if(!connection_str.contains(PARAM_DB_NAME) ||
+ (!connection_str.contains(PARAM_SERVER_FQDN) &&
+ !connection_str.contains(PARAM_SERVER_IP)))
+ connection_str.clear();
}
void Connection::noticeProcessor(void *, const char *message)
@@ -306,20 +309,26 @@ QString Connection::getConnectionString(void)
QString Connection::getConnectionId(bool host_port_only, bool incl_db_name)
{
- QString addr, db_name;
+ QString addr, db_name, port;
+
+ if(!isConfigured())
+ return(QString());
if(!connection_params[PARAM_SERVER_FQDN].isEmpty())
addr=connection_params[PARAM_SERVER_FQDN];
else
addr=connection_params[PARAM_SERVER_IP];
+ if(!connection_params[PARAM_PORT].isEmpty())
+ port = QString(":%1").arg(connection_params[PARAM_PORT]);
+
if(incl_db_name)
db_name = QString("%1@").arg(connection_params[PARAM_DB_NAME]);
if(host_port_only)
- return(QString("%1%2:%3").arg(db_name, addr, connection_params[PARAM_PORT]));
+ return(QString("%1%2%3").arg(db_name, addr, port));
else
- return(QString("%1%2 (%3:%4)").arg(db_name, connection_params[PARAM_ALIAS], addr, connection_params[PARAM_PORT]));
+ return(QString("%1%2 (%3%4)").arg(db_name, connection_params[PARAM_ALIAS], addr, port));
}
bool Connection::isStablished(void)
@@ -327,6 +336,11 @@ bool Connection::isStablished(void)
return(connection!=nullptr);
}
+bool Connection::isConfigured(void)
+{
+ return(!connection_str.isEmpty());
+}
+
bool Connection::isAutoBrowseDB(void)
{
return(auto_browse_db);
@@ -344,12 +358,13 @@ QString Connection::getPgSQLVersion(bool major_only)
//If the version is 10+
if(raw_ver.contains(QRegExp("^((1)[0-9])(.)+")))
{
+ //New PostgreSQL 10+ versioning: 100001 means 10.1 (Major.Minor)
fmt_ver=QString("%1.%2")
.arg(raw_ver.mid(0,2))
- .arg(raw_ver.mid(2,2).toInt()/10);
+ .arg(raw_ver.mid(3,1).toInt());
if(!major_only)
- return(QString("%1.%2").arg(fmt_ver).arg(raw_ver.mid(5,1)));
+ return(QString("%1.%2").arg(raw_ver.mid(0,2)).arg(raw_ver.mid(4,2).toInt()));
}
//For versions below or equal to 9.6
else
diff --git a/libpgconnector/src/connection.h b/libpgconnector/src/connection.h
index 019922ce7..40016e235 100644
--- a/libpgconnector/src/connection.h
+++ b/libpgconnector/src/connection.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -208,9 +208,12 @@ class Connection {
raise an exception and switch back to the previous database. */
void switchToDatabase(const QString &dbname);
- //! \brief Returns if the connections is stablished
+ //! \brief Returns if the connection is stablished
bool isStablished(void);
+ //! \brief Returns if the connection is configured (has some attributes set)
+ bool isConfigured(void);
+
//! \brief Returns if the db configured in the connection can be automatically browsed in SQLTool
bool isAutoBrowseDB(void);
diff --git a/libpgconnector/src/resultset.cpp b/libpgconnector/src/resultset.cpp
index 6f64940ee..81dac934c 100644
--- a/libpgconnector/src/resultset.cpp
+++ b/libpgconnector/src/resultset.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -119,10 +119,8 @@ int ResultSet::getColumnIndex(const QString &column_name)
return(col_idx);
}
-char *ResultSet::getColumnValue(const QString &column_name)
+int ResultSet::validateColumnName(const QString &column_name)
{
- int col_idx=-1;
-
try
{
/* Raises an error if the user try to get the value of a column in
@@ -134,19 +132,22 @@ char *ResultSet::getColumnValue(const QString &column_name)
throw Exception(ERR_REF_INV_TUPLE_COLUMN, __PRETTY_FUNCTION__, __FILE__, __LINE__);
//Get the column index through its name
- col_idx=getColumnIndex(column_name);
+ return (getColumnIndex(column_name));
}
catch(Exception &e)
{
//Capture and redirect any generated exception
throw Exception(e.getErrorMessage(), e.getErrorType(), __PRETTY_FUNCTION__, __FILE__, __LINE__, &e);
}
+}
+char *ResultSet::getColumnValue(const QString &column_name)
+{
//Returns the column value on the current tuple
- return(PQgetvalue(sql_result, current_tuple, col_idx));
+ return(PQgetvalue(sql_result, current_tuple, validateColumnName(column_name)));
}
-char *ResultSet::getColumnValue(int column_idx)
+void ResultSet::validateColumnIndex(int column_idx)
{
//Raise an error in case the column index is invalid
if(column_idx < 0 || column_idx >= getColumnCount())
@@ -158,36 +159,34 @@ char *ResultSet::getColumnValue(int column_idx)
throw Exception(ERR_REF_TUPLE_INEXISTENT, __PRETTY_FUNCTION__, __FILE__, __LINE__);
else if(current_tuple < 0 || current_tuple >= getTupleCount())
throw Exception(ERR_REF_INV_TUPLE_COLUMN, __PRETTY_FUNCTION__, __FILE__, __LINE__);
+}
+
+char *ResultSet::getColumnValue(int column_idx)
+{
+ validateColumnIndex(column_idx);
//Returns the column value on the current tuple
return(PQgetvalue(sql_result, current_tuple, column_idx));
}
-int ResultSet::getColumnSize(const QString &column_name)
+bool ResultSet::isColumnValueNull(int column_idx)
{
- int col_idx=-1;
+ validateColumnIndex(column_idx);
- try
- {
- /* Raises an error if the user try to get the value of a column in
- a tuple of an empty result or generated from an INSERT, DELETE, UPDATE,
- that is, which command do not return lines but only do updates or removal */
- if(getTupleCount()==0 || empty_result)
- throw Exception(ERR_REF_TUPLE_INEXISTENT, __PRETTY_FUNCTION__, __FILE__, __LINE__);
- else if(current_tuple < 0 || current_tuple >= getTupleCount())
- throw Exception(ERR_REF_INV_TUPLE_COLUMN, __PRETTY_FUNCTION__, __FILE__, __LINE__);
+ //Returns the null state of the column on the current tuple
+ return(PQgetisnull(sql_result, current_tuple, column_idx));
+}
- //Get the column index wich length must be detected
- col_idx=getColumnIndex(column_name);
- }
- catch(Exception &e)
- {
- //Capture and redirect any generated exception
- throw Exception(e.getErrorMessage(), e.getErrorType(), __PRETTY_FUNCTION__, __FILE__, __LINE__, &e);
- }
+bool ResultSet::isColumnValueNull(const QString &column_name)
+{
+ //Returns the null state of the column on the current tuple
+ return(PQgetisnull(sql_result, current_tuple, validateColumnName(column_name)));
+}
+int ResultSet::getColumnSize(const QString &column_name)
+{
//Returns the column value length on the current tuple
- return(PQgetlength(sql_result, current_tuple, col_idx));
+ return(PQgetlength(sql_result, current_tuple, validateColumnName(column_name)));
}
int ResultSet::getColumnSize(int column_idx)
diff --git a/libpgconnector/src/resultset.h b/libpgconnector/src/resultset.h
index dfe2b308b..d07ad541e 100644
--- a/libpgconnector/src/resultset.h
+++ b/libpgconnector/src/resultset.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -48,6 +48,10 @@ class ResultSet {
void destroyResultSet(void);
+ void validateColumnIndex(int column_idx);
+
+ int validateColumnName(const QString &column_name);
+
protected:
//! \brief Stores the current tuple index, just for navigation
int current_tuple;
@@ -108,6 +112,10 @@ class ResultSet {
bool isColumnBinaryFormat(const QString &column_name);
bool isColumnBinaryFormat(int column_idx);
+ //! \brief Informs if the column has a null value. In PostgreSQL null =/= empty
+ bool isColumnValueNull(int column_idx);
+ bool isColumnValueNull(const QString &column_name);
+
//! \brief Access on tuple on result set via navigation constants
bool accessTuple(unsigned tuple_type);
diff --git a/libpgmodeler/libpgmodeler.pro b/libpgmodeler/libpgmodeler.pro
index 07aea9828..96a255a38 100644
--- a/libpgmodeler/libpgmodeler.pro
+++ b/libpgmodeler/libpgmodeler.pro
@@ -59,7 +59,8 @@ HEADERS += src/textbox.h \
src/pgmodelerns.h \
src/tag.h \
src/eventtrigger.h \
- src/genericsql.h
+ src/genericsql.h \
+ src/policy.h
SOURCES += src/textbox.cpp \
src/domain.cpp \
@@ -107,7 +108,8 @@ SOURCES += src/textbox.cpp \
src/tag.cpp \
src/eventtrigger.cpp \
src/operation.cpp \
- src/genericsql.cpp
+ src/genericsql.cpp \
+ src/policy.cpp
unix|windows: LIBS += -L$$OUT_PWD/../libparsers/ -lparsers \
-L$$OUT_PWD/../libutils/ -lutils
diff --git a/libpgmodeler/src/aggregate.cpp b/libpgmodeler/src/aggregate.cpp
index 2f7ebc097..6f8112037 100644
--- a/libpgmodeler/src/aggregate.cpp
+++ b/libpgmodeler/src/aggregate.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -153,7 +153,7 @@ void Aggregate::setTypesAttribute(unsigned def_type)
/* Case none data type is specified for the aggregate creates
an aggregate that accepts any possible data '*' e.g. function(*) */
- if(str_types.isEmpty()) str_types='*';
+ if(def_type == SchemaParser::SQL_DEFINITION && str_types.isEmpty()) str_types='*';
attributes[ParsersAttributes::TYPES]=str_types;
}
diff --git a/libpgmodeler/src/aggregate.h b/libpgmodeler/src/aggregate.h
index ceaade596..3bb5b59a1 100644
--- a/libpgmodeler/src/aggregate.h
+++ b/libpgmodeler/src/aggregate.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libpgmodeler/src/basegraphicobject.cpp b/libpgmodeler/src/basegraphicobject.cpp
index 5758ca50c..ca626a5a3 100644
--- a/libpgmodeler/src/basegraphicobject.cpp
+++ b/libpgmodeler/src/basegraphicobject.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libpgmodeler/src/basegraphicobject.h b/libpgmodeler/src/basegraphicobject.h
index 671b1d98a..f0d9440fb 100644
--- a/libpgmodeler/src/basegraphicobject.h
+++ b/libpgmodeler/src/basegraphicobject.h
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
diff --git a/libpgmodeler/src/baseobject.cpp b/libpgmodeler/src/baseobject.cpp
index e89deadba..62b1aa10d 100644
--- a/libpgmodeler/src/baseobject.cpp
+++ b/libpgmodeler/src/baseobject.cpp
@@ -1,7 +1,7 @@
/*
# PostgreSQL Database Modeler (pgModeler)
#
-# Copyright 2006-2017 - Raphael Araújo e Silva
+# 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
@@ -20,6 +20,8 @@
#include "pgmodelerns.h"
#include
+const QByteArray BaseObject::special_chars = QByteArray("'_-.@ $:()/<>+*\\=~!#%^&|?{}[]`;");
+
/* CAUTION: If both amount and order of the enumerations are modified
then the order and amount of the elements of this vector
must also be modified */
@@ -30,7 +32,7 @@ QString BaseObject::objs_schemas[OBJECT_TYPE_COUNT]={
"sequence", "role", "conversion", "cast",
"language", "usertype", "tablespace",
"opfamily", "opclass", "database","collation",
- "extension", "eventtrigger", "relationship",
+ "extension", "eventtrigger", "policy", "relationship",
"textbox", "permission", "parameter", "typeattribute",
"tag", "genericsql", "relationship"
};
@@ -44,9 +46,9 @@ QString BaseObject::obj_type_names[OBJECT_TYPE_COUNT]={
QT_TR_NOOP("Cast"), QT_TR_NOOP("Language"), QT_TR_NOOP("Type"), QT_TR_NOOP("Tablespace"),
QT_TR_NOOP("Operator Family"), QT_TR_NOOP("Operator Class"),
QT_TR_NOOP("Database"), QT_TR_NOOP("Collation"), QT_TR_NOOP("Extension"),
- QT_TR_NOOP("Event Trigger"), QT_TR_NOOP("Relationship"), QT_TR_NOOP("Textbox"),
- QT_TR_NOOP("Permission"), QT_TR_NOOP("Parameter"), QT_TR_NOOP("Type Attribute"),
- QT_TR_NOOP("Tag"), QT_TR_NOOP("Generic SQL"), QT_TR_NOOP("Basic Relationship")
+ QT_TR_NOOP("Event Trigger"), QT_TR_NOOP("Policy"), QT_TR_NOOP("Relationship"),
+ QT_TR_NOOP("Textbox"), QT_TR_NOOP("Permission"), QT_TR_NOOP("Parameter"), QT_TR_NOOP("Type Attribute"),
+ QT_TR_NOOP("Tag"), QT_TR_NOOP("Generic SQL"), QT_TR_NOOP("Basic Relationship")
};
QString BaseObject::objs_sql[OBJECT_TYPE_COUNT]={
@@ -56,7 +58,7 @@ QString BaseObject::objs_sql[OBJECT_TYPE_COUNT]={
QString("OPERATOR"), QString("SEQUENCE"), QString("ROLE"), QString("CONVERSION"),
QString("CAST"), QString("LANGUAGE"), QString("TYPE"), QString("TABLESPACE"),
QString("OPERATOR FAMILY"), QString("OPERATOR CLASS"), QString("DATABASE"),
- QString("COLLATION"), QString("EXTENSION"), QString("EVENT TRIGGER")
+ QString("COLLATION"), QString("EXTENSION"), QString("EVENT TRIGGER"), QString("POLICY")
};
/* Initializes the global id which is shared between instances
@@ -159,26 +161,18 @@ QString BaseObject::formatName(const QString &name, bool is_operator)
if(!is_formated && (is_operator || isValidName(name)))
{
bool needs_fmt=false;
- unsigned i, qtd;
+ unsigned i = 0, qtd = 0;
raw_name.append(name);
/* Checks if the name has some upper case letter. If its the
case the name will be enclosed in quotes */
- qtd=name.size();
- needs_fmt=(!is_operator &&
- (name.indexOf('-')>=0 ||
- name.indexOf('.')>=0 ||
- name.indexOf('@')>=0 ||
- name.indexOf(' ')>=0 ||
- name.indexOf('$')>=0 ||
- name.indexOf(':')>=0 ||
- name.indexOf('(')>=0 ||
- name.indexOf(')')>=0 ||
- name.indexOf('/')>=0 ||
- name.indexOf('\\')>=0 ||
- name.contains(QRegExp("^[0-9]+"))));
+ needs_fmt = (!is_operator && name.contains(QRegExp("^[0-9]+")));
+ for(int idx = 0; idx < special_chars.size() && !needs_fmt; idx++)
+ needs_fmt = (!is_operator && special_chars.at(idx) != '_' && name.indexOf(special_chars.at(idx)) >= 0);
+
+ qtd=name.size();
i=0;
while(i < qtd && !needs_fmt)
{
@@ -234,7 +228,6 @@ QString BaseObject::formatName(const QString &name, bool is_operator)
bool BaseObject::isValidName(const QString &name)
{
QString aux_name=name;
- QByteArray special_chars=QByteArray("_-.@ $:()/\\");
if(aux_name.contains(QRegExp("^(\")(.)+(\")$")))
{
@@ -275,7 +268,7 @@ bool BaseObject::isValidName(const QString &name)
chr=raw_name[i];
/* Validation of simple ASCI characters.
- Checks if the name has the characters in the set [ a-z A-Z 0-9 _ . @ $ - : space ()] */
+ Checks if the name has the characters in the set [ a-z A-Z 0-9 _ . @ $ - : space () <>] */
if((chr >= 'a' && chr <='z') || (chr >= 'A' && chr <='Z') ||
(chr >= '0' && chr <='9') || special_chars.contains(chr))
{
@@ -450,7 +443,7 @@ bool BaseObject::acceptsAlterCommand(ObjectType obj_type)
obj_type==OBJ_INDEX || obj_type==OBJ_ROLE ||
obj_type==OBJ_SCHEMA || obj_type==OBJ_SEQUENCE ||
obj_type==OBJ_TABLE || obj_type==OBJ_TABLESPACE ||
- obj_type==OBJ_TYPE);
+ obj_type==OBJ_TYPE || obj_type==OBJ_POLICY);
}
bool BaseObject::acceptsDropCommand(ObjectType obj_type)
@@ -753,16 +746,10 @@ QString BaseObject::getCodeDefinition(unsigned def_type, bool reduced_form)
else
attributes[ParsersAttributes::COMMENT]=comment;
- if((def_type==SchemaParser::SQL_DEFINITION &&
- obj_type!=OBJ_TABLESPACE &&
- obj_type!=OBJ_DATABASE) ||
- def_type==SchemaParser::XML_DEFINITION)
- {
- schparser.ignoreUnkownAttributes(true);
+ schparser.ignoreUnkownAttributes(true);
- attributes[ParsersAttributes::COMMENT]=
- schparser.getCodeDefinition(ParsersAttributes::COMMENT, attributes, def_type);
- }
+ attributes[ParsersAttributes::COMMENT]=
+ schparser.getCodeDefinition(ParsersAttributes::COMMENT, attributes, def_type);
}
if(!appended_sql.isEmpty())
@@ -937,6 +924,7 @@ vector BaseObject::getObjectTypes(bool inc_table_objs, vector