コード例 #1
0
def is_query_resultset_updatable(conn, sql_path):
    """
        This function is used to check whether the last successful query
        produced editable results.

        Args:
            conn: Connection object.
            sql_path: the path to the sql templates
                      primary_keys.sql & columns.sql.
    """
    columns_info = conn.get_column_info()

    if columns_info is None or len(columns_info) < 1:
        return return_not_updatable()

    table_oid = _check_single_table(columns_info)
    if table_oid is None:
        return return_not_updatable()

    if conn.connected():
        # Get all the table columns
        table_columns = _get_table_columns(conn=conn,
                                           table_oid=table_oid,
                                           sql_path=sql_path)

        # Editable column: A column selected directly from a table, that is
        # neither renamed nor is a duplicate of another selected column
        _check_editable_columns(table_columns=table_columns,
                                results_columns=columns_info)

        primary_keys, pk_names = \
            _check_primary_keys(conn=conn,
                                columns_info=columns_info,
                                table_oid=table_oid,
                                sql_path=sql_path)

        has_oids = _check_oids(conn=conn,
                               columns_info=columns_info,
                               table_oid=table_oid,
                               sql_path=sql_path)

        is_resultset_updatable = has_oids or (primary_keys is not None
                                              and len(primary_keys) != 0)

        if is_resultset_updatable:
            column_types = get_columns_types(columns_info=columns_info,
                                             table_oid=table_oid,
                                             conn=conn,
                                             has_oids=has_oids,
                                             is_query_tool=True)
            return True, has_oids, primary_keys, \
                pk_names, table_oid, column_types
        else:
            _set_all_columns_not_editable(columns_info=columns_info)
            return return_not_updatable()
    else:
        raise Exception(
            gettext('Not connected to server or connection with the '
                    'server has been closed.'))
コード例 #2
0
ファイル: command.py プロジェクト: zadockmaloba/pgadmin4
 def get_columns_types(self, conn):
     columns_info = conn.get_column_info()
     has_oids = self.has_oids()
     table_oid = self.obj_id
     return get_columns_types(conn=conn,
                              columns_info=columns_info,
                              has_oids=has_oids,
                              table_oid=table_oid,
                              is_query_tool=False)