def columns(self): c = {} c["a"] = multicorn.ColumnDefinition("a", 1, 1, "numeric", "numeric", {}) c["b"] = multicorn.ColumnDefinition("b", 1, 1, "numeric", "numeric", {}) return c
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 ]
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')
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')
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)
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')
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')
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' )