Github user jiny2 commented on a diff in the pull request:

    https://github.com/apache/incubator-hawq/pull/1314#discussion_r154278719
  
    --- Diff: src/include/access/plugstorage.h ---
    @@ -0,0 +1,221 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *   http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing,
    + * software distributed under the License is distributed on an
    + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + * KIND, either express or implied.  See the License for the
    + * specific language governing permissions and limitations
    + * under the License.
    + */
    +
    +/*-------------------------------------------------------------------------
    + *
    + * plugstorage.h
    + *
    + *    Pluggable storage definitions. Support external table for now.
    + *
    + *-------------------------------------------------------------------------
    + */
    +
    +#ifndef PLUGSTORAGE_H
    +#define PLUGSTORAGE_H
    +
    +#include "postgres.h"
    +#include "postgres_ext.h"
    +#include "fmgr.h"
    +#include "nodes/pg_list.h"
    +#include "nodes/plannodes.h"
    +#include "nodes/execnodes.h"
    +#include "access/sdir.h"
    +#include "access/relscan.h"
    +#include "access/extprotocol.h"
    +#include "access/tupdesc.h"
    +#include "access/fileam.h"
    +#include "utils/relcache.h"
    +#include "executor/tuptable.h"
    +
    +/* From src/include/access/fileam.h */
    +extern char *getExtTblCategoryInFmtOptsStr(char *fmtStr);
    +extern char *getExtTblFormatterTypeInFmtOptsStr(char *fmtStr);
    +extern char *getExtTblFormatterTypeInFmtOptsList(List *fmtOpts);
    +
    +
    +/*
    + * ExternalTableType
    + *
    + *    enum for different types of external tables.
    + *
    + *    The different types of external tables can be combinations of 
different
    + *    protocols and formats. To be specific:
    + *    {GPFDIST, GPFDISTS, HTTP, COMMAND, HDFS} X {TEXT, CSV, ORC}
    + *
    + *    NOTE:
    + *
    + *    The GENERIC external table type is used to simplify the call back
    + *    implementation for different combination of external table formats
    + *    and protocols. It need to be improved so that each external table
    + *    type should get its access method with minimum cost during runtime.
    + *
    + *    The fact is that for custom protocol (HDFS), the format types for
    + *    TEXT, CSV, and ORC external tables are all 'b' in pg_exttable catalog
    + *    table. The formatter information is stored in format options which is
    + *    a list strings. Thus, during read and write access of these tables,
    + *    there will be performance issue if we get the format type and access
    + *    method for them for each tuple.
    + *
    + */
    +typedef enum
    +{
    +   ExternalTableType_GENERIC,     /* GENERIC external table format and 
protocol */
    +   ExternalTableType_PLUG,        /* Pluggable format with hdfs protocol, 
i.e., ORC */
    +   ExternalTableType_Invalid
    +} ExternalTableType;
    +
    +/*
    + * PlugStorageValidatorData is the node type that is passed as fmgr 
"context"
    + * info when a function is called by the Pluggable Storage Framework.
    + */
    +typedef struct PlugStorageValidatorData
    +{
    +   /* see T_PlugStorageValidatorData */
    +   NodeTag         type;
    +
    +   /* check if format interfaces are implemented in pg_proc */
    +   char            *format_name;
    +
    +   /* check if format options and their values are valid */
    +   List            *format_opts;
    +   char            *format_str;
    +   char            *encoding_name;
    +   bool            is_writable;
    +
    +   /* check if format data types are supported in table definition */
    +   TupleDesc       tuple_desc;
    +
    +} PlugStorageValidatorData;
    +
    +typedef struct PlugStorageValidatorData *PlugStorageValidator;
    +
    +/*
    + * PlugStorageData is used to pass args between hawq and pluggable data 
formats.
    + */
    +typedef struct PlugStorageData
    +{
    +   NodeTag                type;           /* see T_PlugStorageData */
    +   int                    ps_table_type;
    +   int                    ps_formatter_type;
    +   char                  *ps_formatter_name;
    +   int                    ps_error_ao_seg_no;
    +   Relation               ps_relation;
    +   PlanState             *ps_plan_state;
    +   ExternalScan          *ps_ext_scan;
    +   ScanState             *ps_scan_state;
    +   ScanDirection          ps_scan_direction;
    +   FileScanDesc           ps_file_scan_desc;
    +   ExternalScanState     *ps_ext_scan_state;
    +   ResultRelSegFileInfo  *ps_result_seg_file_info;
    +   ExternalInsertDesc     ps_ext_insert_desc;
    +   ExternalSelectDesc     ps_ext_select_desc;
    +   bool                   ps_has_tuple;
    +   Oid                    ps_tuple_oid;
    +   TupleTableSlot        *ps_tuple_table_slot;
    +
    +} PlugStorageData;
    +
    +typedef PlugStorageData *PlugStorage;
    +
    +
    +/*
    + * getExternalTableTypeList
    + * getExternalTableTypeStr
    + *
    + *    Return the table type for a given external table
    + *
    + *    Currently it is an implementation with performance cost due to the
    + *    fact that the format types for TEXT, CSV, and ORC external tables
    + *    with customer protocol (HDFS) are all 'b' in pg_exttable catalog
    + *    table. It needs to visit the format options to get the table type.
    + */
    +void getExternalTableTypeList(const char formatType,
    +                              List *formatOptions,
    +                              int *formatterType,
    +                              char **formatterName);
    +
    +void getExternalTableTypeStr(const char formatType,
    +                             char *formatOptions,
    +                                                    int *formatterType,
    --- End diff --
    
    please double check this format


---

Reply via email to