예제 #1
0
 def columns(self):
     c = {}
     c["a"] = multicorn.ColumnDefinition("a", 1, 1, "numeric", "numeric",
                                         {})
     c["b"] = multicorn.ColumnDefinition("b", 1, 1, "numeric", "numeric",
                                         {})
     return c
예제 #2
0
파일: __init__.py 프로젝트: aidansteele/fdw
    def import_schema(self, schema, srv_options, options, restriction_type,
                      restricts):
        addr = srv_options["grpc_fdw.address"]
        channel = grpc.insecure_channel(addr)
        stub = fdw_pb2_grpc.PostgresFdwStub(channel)

        inp = fdw_pb2.ImportForeignSchemaInput(
            schema=schema,
            serverOptions=srv_options,
            importOptions=options,
            restrictionType=fdw_pb2.ImportForeignSchemaInput.NONE,  # FIXME
            restricted=restricts)

        outp = stub.ImportForeignSchema(inp)
        return [
            multicorn.TableDefinition(
                table_name=t.name,
                columns=[
                    multicorn.ColumnDefinition(column_name=c.name,
                                               type_oid=c.oid,
                                               typmod=c.mod,
                                               type_name=c.typeName,
                                               base_type_name=c.baseTypeName,
                                               options=c.options)
                    for c in t.columns
                ],
                options=t.options,
            ) for t in outp.tables
        ]
예제 #3
0
    def test_buildColumnList_6(self):
        # Test with partition pseudo column
        c = self.columns
        c['partition_date'] = multicorn.ColumnDefinition(
            column_name='partition_date', type_oid=0, base_type_name='date')

        self.assertEqual(
            self.fdw.buildColumnList(c, 'GROUP_BY'),
            'state , gender , year , name , number , _PARTITIONTIME')
예제 #4
0
    def test_buildColumnList_4(self):
        # Test with counting pseudo column
        c = self.columns
        c['_fdw_count'] = multicorn.ColumnDefinition(column_name='_fdw_count',
                                                     type_oid=20,
                                                     base_type_name='bigint')

        self.assertEqual(self.fdw.buildColumnList(c, 'GROUP_BY'),
                         'state , gender , year , name , number')
예제 #5
0
    def setUp(self):
        # Set options
        self.options = {
            'fdw_key': '/opt/key/key.json',
            'fdw_dataset': 'bigquery-public-data.usa_names',
            'fdw_table': 'usa_1910_current',
            'fdw_verbose': 'true',
            'fdw_sql_dialect': 'standard',
            'fdw_group': 'false',
            'fdw_casting': 'false',
        }

        # Set column list (ordered dict of ColumnDefinition from Multicorn)
        self.columns = OrderedDict([
            ('state',
             multicorn.ColumnDefinition(column_name='state',
                                        type_oid=25,
                                        base_type_name='text')),
            ('gender',
             multicorn.ColumnDefinition(column_name='gender',
                                        type_oid=25,
                                        base_type_name='text')),
            ('year',
             multicorn.ColumnDefinition(column_name='year',
                                        type_oid=20,
                                        base_type_name='bigint')),
            ('name',
             multicorn.ColumnDefinition(column_name='name',
                                        type_oid=25,
                                        base_type_name='text')),
            ('number',
             multicorn.ColumnDefinition(column_name='number',
                                        type_oid=20,
                                        base_type_name='bigint'))
        ])

        # Define Quals as defined by Multicorn
        self.quals = [
            multicorn.Qual(field_name='number', operator='>', value=1000),
            multicorn.Qual(field_name='year', operator='=', value=2017),
        ]

        # Set instance of ConstantForeignDataWrapper
        self.fdw = ConstantForeignDataWrapper(self.options, self.columns)
예제 #6
0
    def test_buildColumnList_7(self):
        # Test with a datetime
        c = self.columns
        c['datetime'] = multicorn.ColumnDefinition(
            column_name='datetime',
            type_oid=0,
            base_type_name='timestamp without time zone')

        self.assertEqual(self.fdw.buildColumnList(c, 'GROUP_BY'),
                         'state , gender , year , name , number , datetime')
예제 #7
0
    def test_getBigQueryDatatype_3(self):
        # Test with a column that has an invalid type
        c = self.columns
        c['some_column'] = multicorn.ColumnDefinition(
            column_name='some_column',
            type_oid=0,
            base_type_name='invalid_type')
        self.fdw.columns = c

        # Should default to `STRING`
        self.assertEqual(self.fdw.getBigQueryDatatype('some_column'), 'STRING')
예제 #8
0
    def test_buildColumnList_3(self):
        # Test with counting pseudo column
        c = self.columns
        c['_fdw_count'] = multicorn.ColumnDefinition(column_name='_fdw_count',
                                                     type_oid=20,
                                                     base_type_name='bigint')

        self.assertEqual(
            self.fdw.buildColumnList(c),
            'state  as state, gender  as gender, year  as year, name  as name, number  as number, count(*)  as _fdw_count'
        )