trafodion-codereview mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From DaveBirdsall <...@git.apache.org>
Subject [GitHub] incubator-trafodion pull request #513: [TRAFODION-1684]ODBC:preliminary supp...
Date Thu, 02 Jun 2016 18:15:30 GMT
Github user DaveBirdsall commented on a diff in the pull request:

    https://github.com/apache/incubator-trafodion/pull/513#discussion_r65590770
  
    --- Diff: core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp ---
    @@ -4811,6 +4811,64 @@ odbc_SQLSvc_GetSQLCatalogs_sme_(
     
     			break;
     
    +        case SQL_API_SQLSTATISTICS:
    +            if (!checkIfWildCard(catalogNm, catalogNmNoEsc) && !metadataId)
    +            {
    +                exception_->exception_nr = odbc_SQLSvc_GetSQLCatalogs_ParamError_exn_;
    +                exception_->u.ParamError.ParamDesc = SQLSVC_EXCEPTION_WILDCARD_NOT_SUPPORTED;
    +            }
    +            if (tableNm[0] != '$' && tableNm[0] != '\\')
    +            {
    +                if (strcmp(catalogNm, "") == 0)
    +                    strcpy(tableName1, SEABASE_MD_CATALOG);
    +                else
    +                    strcpy(tableName1, catalogNm);
    +            }
    +
    +            tableParam[0] = tableName1;
    +            convertWildcard(metadataId, TRUE, schemaNm, expSchemaNm);
    +            convertWildcardNoEsc(metadataId, TRUE, schemaNm, schemaNmNoEsc);
    +            convertWildcard(metadataId, TRUE, tableNm, expTableNm);
    +            convertWildcardNoEsc(metadataId, TRUE, tableNmNoEsc, tableNmNoEsc);
    +            inputParam[0] = schemaNmNoEsc;
    +            inputParam[1] = expSchemaNm;
    +            inputParam[2] = tableNmNoEsc;
    +            inputParam[3] = expTableNm;
    +
    +            snprintf(CatalogQuery, sizeof(CatalogQuery),
    +                    "select "
    +                    "cast('%s' as varchar(128)) TABLE_CAT, "
    +                    "cast(trim(ob.SCHEMA_NAME) as varchar(128)) TABLE_SCHEM, "
    +                    "cast(trim(ob.OBJECT_NAME) as varchar(128)) TABLE_NAME, "
    +                    "cast(0 as smallint) NON_UNIQUE, " // not support
    +                    "cast('' as varchar(128)) INDEX_QUALIFIER, " // not support
    +                    "cast('' as varchar(128)) INDEX_NAME, "
    +                    "cast(0 as smallint) TYPE, " // not support
    +                    "cast((case when (trim(co.COLUMN_CLASS) <> 'S') then co.column_number+1
else "
    +                        "co.column_number end) as smallint) ORDINAL_POSITION, "
    +                    "cast(trim(co.COLUMN_NAME) as varchar(128)) COLUMN_NAME, "
    +                    "cast('' as char(1)) ASC_OR_DES, "
    +                    "cast(sb.rowcount as integer) CARDINALITY, "
    +                    "cast(0 as integer) PAGES, " // not support
    +                    "cast('' as varchar(128)) FILTER_CONDITION " // not support
    +                    "from "
    +                    "TRAFODION.\"_MD_\".OBJECTS ob, "
    +                    "TRAFODION.\"_MD_\".COLUMNS co, "
    +                    "TRAFODION.%s.sb_histograms sb "
    +                    "where "
    +                    "ob.OBJECT_UID = co.OBJECT_UID "
    +                    "and co.COLUMN_NUMBER = sb.COLUMN_NUMBER "
    --- End diff --
    
    Unfortunately, I don't know of a document either. I've learned the format of the data
in the Histograms table by reverse-engineering it, along with a little bit of code reading.
Here's what I know: For a multi-column histogram, there will be n rows in the SB_HISTOGRAMS
table, where n is the number of columns in the histogram. One way to see this is to create
a table with a primary key, put some rows into it (100 rows, let's say),then do UPDATE STATISTICS
ON EVERY COLUMN. After that, do SHOWSTATS ON EVERY COLUMN. That will show you the table_uid
for that table. Then do "select histogram_id, count(*) from sb_histograms where table_uid
= <the value from SHOWSTATS> group by histogram_id". You'll notice some histogram_id's
with counts of one. Those are the single column histograms. You'll also notice a few with
counts greater than one. These are the multi-column histograms. If you then look at the rows
for that particular histogram_id, you'll see there is a row for each column in the 
 histogram. It is a denormalized representation.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message