????

Your IP : 216.73.216.34


Current Path : C:/opt/pgsql/pgAdmin 4/web/pgadmin/tools/sqleditor/utils/
Upload File :
Current File : C:/opt/pgsql/pgAdmin 4/web/pgadmin/tools/sqleditor/utils/get_column_types.py

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
"""
    Get the column types for QueryToolCommand or TableCommand when
    the result-set is editable.
"""

from flask import render_template
from flask_babel import gettext
from pgadmin.utils.exception import ExecuteError, ObjectGone


def get_columns_types(is_query_tool, columns_info, table_oid, conn, has_oids,
                      table_name=None, table_nspname=None):
    nodes_sqlpath = 'columns/sql/#{0}#'.format(conn.manager.version)
    param = {
        'has_oids': has_oids,
    }
    if table_name and table_nspname:
        param.update({
            'table_name': table_name,
            'table_nspname': table_nspname,
        })
    else:
        param.update({
            'tid': table_oid
        })

    query = render_template(
        "/".join([nodes_sqlpath, 'nodes.sql']),
        conn=conn,
        **param
    )

    colst, rset = conn.execute_2darray(query)

    if not colst:
        raise ExecuteError(rset)

    column_types = dict()
    for key, col in enumerate(columns_info):
        col_type = dict()
        col_type['type_code'] = col['type_code']
        col_type['type_name'] = None
        col_type['internal_size'] = col['internal_size']
        col_type['display_size'] = col['display_size']
        column_types[col['name']] = col_type

        if not is_query_tool:
            col_type['not_null'] = col['not_null'] = \
                rset['rows'][key]['not_null']

            col_type['has_default_val'] = \
                col['has_default_val'] = \
                rset['rows'][key]['has_default_val']

            col_type['seqtypid'] = col['seqtypid'] = \
                rset['rows'][key]['seqtypid']

        else:
            for row in rset['rows']:
                if row['oid'] == col['table_column']:
                    col_type['not_null'] = col['not_null'] = row['not_null']

                    col_type['has_default_val'] = \
                        col['has_default_val'] = row['has_default_val']

                    col_type['seqtypid'] = col['seqtypid'] = row['seqtypid']
                    break

                else:
                    col_type['not_null'] = col['not_null'] = None
                    col_type['has_default_val'] = col['has_default_val'] = None
                    col_type['seqtypid'] = col['seqtypid'] = None

    return column_types