Пример #1
0
    def _test_adql_postgresql_translation_parsing(self, query, columns=None,
                                             keywords=None, functions=None,
                                             tables=None, display_columns=None,
                                             indexed_objects=None):
        adt = ADQLQueryTranslator()
        qp = PostgreSQLQueryProcessor()

        adt.set_query(query)

        qp.set_query(adt.to_postgresql())
        qp.process_query(indexed_objects=indexed_objects)

        qp_columns = ['.'.join([str(j) for j in i]) for i in qp.columns
                      if i[0] is not None and i[1] is not None]
        qp_display_columns = ['%s: %s' % (str(i[0]),
                                          '.'.join([str(j) for j in i[1]]))
                              for i in qp.display_columns]

        if columns:
            self.assertSetEqual(set(columns), set(qp_columns))

        if keywords:
            self.assertSetEqual(set(keywords), set(qp.keywords))

        if functions:
            self.assertSetEqual(set(functions), set(qp.functions))

        if tables:
            self.assertSetEqual(set(tables), set(qp.tables))

        if display_columns:
            self.assertSetEqual(set(display_columns), set(qp_display_columns))
Пример #2
0
    def _test_postgresql_parsing(self, query, columns=None, keywords=None,
                            functions=None, display_columns=None, tables=None,
                            replace_schema_name=None):
        qp = PostgreSQLQueryProcessor(query)
        qp.process_query()

        print(qp.columns, qp.display_columns, qp.tables)

        qp_columns = ['.'.join([str(j) for j in i[:3]]) for i in qp.columns
                      if i[0] is not None and i[1] is not None]
        qp_display_columns = ['%s: %s' % (str(i[0]),
                                          '.'.join([str(j) for j in i[1]]))
                              for i in qp.display_columns]
        qp_tables = ['.'.join([str(j) for j in i]) for i in qp.tables
                      if i[0] is not None and i[1] is not None]

        if columns:
            self.assertSetEqual(set(columns), set(qp_columns))

        if keywords:
            self.assertSetEqual(set(keywords), set(qp.keywords))

        if functions:
            self.assertSetEqual(set(functions), set(qp.functions))

        if display_columns:
            self.assertSetEqual(set(display_columns), set(qp_display_columns))

        if tables:
            self.assertSetEqual(set(tables), set(qp_tables))
Пример #3
0
def process_query(query):
    # get the adapter
    adapter = DatabaseAdapter()

    try:
        if adapter.database_config['ENGINE'] == 'django.db.backends.mysql':

            from queryparser.mysql import MySQLQueryProcessor
            processor = MySQLQueryProcessor(query)

        elif adapter.database_config[
                'ENGINE'] == 'django.db.backends.postgresql':

            from queryparser.postgresql import PostgreSQLQueryProcessor

            if settings.QUERY_PROCESSOR_CACHE:
                processor = cache.get_or_set('processor',
                                             PostgreSQLQueryProcessor(), 3600)
            else:
                processor = PostgreSQLQueryProcessor()

            # first run to replace with get_indexed_objects
            processor.set_query(query)
            processor.process_query(indexed_objects=get_indexed_objects(),
                                    replace_schema_name={
                                        'TAP_SCHEMA': settings.TAP_SCHEMA,
                                        'tap_schema': settings.TAP_SCHEMA,
                                        'TAP_UPLOAD': settings.TAP_UPLOAD,
                                        'tap_upload': settings.TAP_UPLOAD,
                                    })

            # second run
            processor.set_query(processor.query)
            processor.process_query()

        else:
            raise Exception('Unknown database engine')

    except QuerySyntaxError as e:
        raise ValidationError({
            'query': {
                'messages':
                [_('There has been an error while parsing your query.')],
                'positions':
                json.dumps(e.syntax_errors),
            }
        })

    except QueryError as e:
        raise ValidationError({'query': {
            'messages': e.messages,
        }})

    return processor
Пример #4
0
def f1():
    query = """
        SELECT DISTANCE(
                POINT('ICRS', ra, dec),
                POINT('ICRS', 266.41683, -29.00781)
                ) AS dist
        FROM gaiadr1.gaia_source
        WHERE 1=CONTAINS(
                POINT('ICRS', ra, dec),
                CIRCLE('ICRS', 266.41683, -29.00781, 0.08333333)
                )
        AND x < 1
        OR 1=CONTAINS(
                POINT('ICRS', ra, dec),
                CIRCLE('ICRS', 66.41683, -29.00781, 0.08333333)
                )
        ORDER BY dist ASC
        """

    query = """
    SELECT *
    FROM gdr1.gaia_source
    WHERE 1=CONTAINS(
    POINT('ICRS',ra,dec),
    CIRCLE('ICRS',266.41683,-29.00781, 0.08333333)
            )
            AND phot_g_mean_mag>=10 AND phot_g_mean_mag<15
            ORDER BY phot_g_mean_mag ASC
    """
    query = """
    SELECT gmag * 0.1 AS gmag_bin, COUNT(gmag) AS number
    FROM
    (
        SELECT FLOOR(phot_g_mean_mag * 10) AS gmag
        FROM gdr1.gaia_source
    ) AS gmag_tab
    GROUP BY gmag;
    """

    adt = ADQLQueryTranslator(query)
    pgq = adt.to_postgresql()
    print(pgq)
    qp = PostgreSQLQueryProcessor()
    qp.set_query(pgq)
    qp.process_query()
    print(qp.columns)
    print(qp.display_columns)
    print(qp.tables)
    print(qp.functions)
Пример #5
0
def f3():
    query = """
    SELECT Böning AS a FROM gdr2.gaia_source AS q;
    """
    query = '''
    SELECT gaia.source_id, gaia.ra, gaia.dec, gaia.phot_g_mean_mag,
    gaia.phot_bp_mean_mag, gaia.phot_rp_mean_mag
    FROM gdr2.gaia_source as gaia
    WHERE gaia.dec <= - 68 AND gaia.dec >= - 78
    AND gaia.ra >= -8 AND gaia.ra <= 35
    AND (gaia.parallax/gaia.parallax_error)<=7
    AND gaia.phot_g_mean_mag IS NOT NULL
    AND gaia.phot_bp_mean_mag IS NOT NULL
    AND gaia.phot_rp_mean_mag IS NOT NULL
    AND gaia.duplicated_source=False
    AND (gaia.phot_variable_flag=”CONSTANT”)
    AND gaia.phot_g_mean_mag >= 12.5
    AND gaia.phot_g_mean_mag <= 13 
    '''

    query = '''
SELECT vmcsource.sourceid, vmcsource.framesetid, xm.nid,gaia.source_id, xm.dist, vmcsource.ra, vmcsource.dec, gaia.phot_g_mean_mag, gaia.phot_bp_mean_mag, gaia.phot_rp_mean_mag, gaia.pmra, gaia.pmdec, gaia.astrometric_excess_noise, vmcsource.yapermag3, vmcsource.yapermag3err, vmcsource.japermag3, vmcsource.japermag3err, vmcsource.ksapermag3, vmcsource.ksapermag3err, vmcsource.mergedclass
FROM gdr2.gaia_source AS gaia, "magellan"."vmc_source_20180702_x_gdr2_gaia_source" AS xm,
"magellan"."vmc_source_20180702" AS vmcsource
WHERE vmcsource.ra>=47 AND vmcsource.ra<=120 AND vmcsource.dec<=-62 AND vmcsource.dec>=-78
AND vmcsource.japermag3err>0 AND vmcsource.ksapermag3err>0
AND vmcsource.japermag3err<=0.1 AND vmcsource.ksapermag3err<=0.1
AND(vmcsource.mergedclass=-1 OR vmcsource.mergedclass=-2)
AND gaia.dec >= -80
AND gaia.source_id = xm.source_id
AND xm.nid = vmcsource.nid
AND (vmcsource.priOrSec<=0 OR vmcsource.priOrSec=vmcsource.frameSetID);
    '''

    qp = PostgreSQLQueryProcessor()
    qp.set_query(query)
    qp.process_query()

    print(qp.query)
    print(qp.columns)
    print(qp.display_columns)
    print(qp.tables)
    print(qp.keywords)
    print(qp.functions)
Пример #6
0
def test01():
    queries = [
            "SELECT spoint ( 270.0*pi()/180.0,-30.0*pi()/180.0  ) AS sp FROM db.tab;",
            "SELECT strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' );",
            "SELECT scircle ( spoint (0,0), 30.0*pi()/180.0  );",
            "SELECT sline ( strans (0, 0, 0, 'ZXZ'), 20.0*pi()/180.0  );",
            "SELECT sellipse ( spoint (0, 0), 10.0*pi()/180.0, 5.0*pi()/180.0, pi()/2.0 );",
            "SELECT scircle(spoint(0, 0), 0.1);",
            "SELECT spoly '{ (270d,-10d), (270d,30d), (290d,10d)  } ';",
            "SELECT sbox(spoint(0,0),spoint(1,1));",
            "SELECT count(*) FROM gdr1.gaia_source WHERE pg_sphere_point @ sbox(spoint(0.1,-0.03),spoint(0.11, -0.02));"
            ]

    qp = PostgreSQLQueryProcessor()
    for q in queries:
        qp.set_query(q)
        qp.process_query()

        print(qp.columns)
Пример #7
0
    def _test_postgresql_parsing(self,
                                 query,
                                 columns=None,
                                 keywords=None,
                                 functions=None,
                                 display_columns=None,
                                 tables=None,
                                 replace_schema_name=None):
        qp = PostgreSQLQueryProcessor(query)
        qp.process_query()

        print(qp.columns, qp.display_columns, qp.tables)

        qp_columns = [
            '.'.join([str(j) for j in i[:3]]) for i in qp.columns
            if i[0] is not None and i[1] is not None
        ]
        qp_display_columns = [
            '%s: %s' % (str(i[0]), '.'.join([str(j) for j in i[1]]))
            for i in qp.display_columns
        ]
        qp_tables = [
            '.'.join([str(j) for j in i]) for i in qp.tables
            if i[0] is not None and i[1] is not None
        ]

        if columns:
            self.assertSetEqual(set(columns), set(qp_columns))

        if keywords:
            self.assertSetEqual(set(keywords), set(qp.keywords))

        if functions:
            self.assertSetEqual(set(functions), set(qp.functions))

        if display_columns:
            self.assertSetEqual(set(display_columns), set(qp_display_columns))

        if tables:
            self.assertSetEqual(set(tables), set(qp_tables))
Пример #8
0
def f1():
    query = """
        SELECT DISTANCE(
                POINT('ICRS', ra, dec),
                POINT('ICRS', 266.41683, -29.00781)
                ) AS dist
        FROM gaiadr1.gaia_source
        WHERE 1=CONTAINS(
                POINT('ICRS', ra, dec),
                CIRCLE('ICRS', 266.41683, -29.00781, 0.08333333)
                )
        AND x < 1
        OR 1=CONTAINS(
                POINT('ICRS', ra, dec),
                CIRCLE('ICRS', 66.41683, -29.00781, 0.08333333)
                )
        ORDER BY dist ASC
        """

    query = """
    SELECT *
    FROM gdr1.gaia_source
    WHERE 1=CONTAINS(
    POINT('ICRS',ra,dec),
    CIRCLE('ICRS',266.41683,-29.00781, 0.08333333)
            )
            AND phot_g_mean_mag>=10 AND phot_g_mean_mag<15
            ORDER BY phot_g_mean_mag ASC
    """
    query = """
    SELECT gmag * 0.1 AS gmag_bin, COUNT(gmag) AS number
    FROM
    (
        SELECT FLOOR(phot_g_mean_mag * 10) AS gmag
        FROM gdr1.gaia_source
    ) AS gmag_tab
    GROUP BY gmag;
    """

    adt = ADQLQueryTranslator(query)
    pgq = adt.to_postgresql()
    print(pgq)
    qp = PostgreSQLQueryProcessor()
    qp.set_query(pgq)
    qp.process_query()
    print(qp.columns)
    print(qp.display_columns)
    print(qp.tables)
    print(qp.functions)
Пример #9
0
def f3():
    query = """
    SELECT Böning AS a FROM gdr2.gaia_source AS q;
    """
    query = '''
    SELECT gaia.source_id, gaia.ra, gaia.dec, gaia.phot_g_mean_mag,
    gaia.phot_bp_mean_mag, gaia.phot_rp_mean_mag
    FROM gdr2.gaia_source as gaia
    WHERE gaia.dec <= - 68 AND gaia.dec >= - 78
    AND gaia.ra >= -8 AND gaia.ra <= 35
    AND (gaia.parallax/gaia.parallax_error)<=7
    AND gaia.phot_g_mean_mag IS NOT NULL
    AND gaia.phot_bp_mean_mag IS NOT NULL
    AND gaia.phot_rp_mean_mag IS NOT NULL
    AND gaia.duplicated_source=False
    AND (gaia.phot_variable_flag=”CONSTANT”)
    AND gaia.phot_g_mean_mag >= 12.5
    AND gaia.phot_g_mean_mag <= 13 
    '''

    query = '''
SELECT vmcsource.sourceid, vmcsource.framesetid, xm.nid,gaia.source_id, xm.dist, vmcsource.ra, vmcsource.dec, gaia.phot_g_mean_mag, gaia.phot_bp_mean_mag, gaia.phot_rp_mean_mag, gaia.pmra, gaia.pmdec, gaia.astrometric_excess_noise, vmcsource.yapermag3, vmcsource.yapermag3err, vmcsource.japermag3, vmcsource.japermag3err, vmcsource.ksapermag3, vmcsource.ksapermag3err, vmcsource.mergedclass
FROM gdr2.gaia_source AS gaia, "magellan"."vmc_source_20180702_x_gdr2_gaia_source" AS xm,
"magellan"."vmc_source_20180702" AS vmcsource
WHERE vmcsource.ra>=47 AND vmcsource.ra<=120 AND vmcsource.dec<=-62 AND vmcsource.dec>=-78
AND vmcsource.japermag3err>0 AND vmcsource.ksapermag3err>0
AND vmcsource.japermag3err<=0.1 AND vmcsource.ksapermag3err<=0.1
AND(vmcsource.mergedclass=-1 OR vmcsource.mergedclass=-2)
AND gaia.dec >= -80
AND gaia.source_id = xm.source_id
AND xm.nid = vmcsource.nid
AND (vmcsource.priOrSec<=0 OR vmcsource.priOrSec=vmcsource.frameSetID);
    '''

    qp = PostgreSQLQueryProcessor()
    qp.set_query(query)
    qp.process_query()

    print(qp.query)
    print(qp.columns)
    print(qp.display_columns)
    print(qp.tables)
    print(qp.keywords)
    print(qp.functions)
Пример #10
0
def test01():
    queries = [
        "SELECT spoint ( 270.0*pi()/180.0,-30.0*pi()/180.0  ) AS sp FROM db.tab;",
        "SELECT strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' );",
        "SELECT scircle ( spoint (0,0), 30.0*pi()/180.0  );",
        "SELECT sline ( strans (0, 0, 0, 'ZXZ'), 20.0*pi()/180.0  );",
        "SELECT sellipse ( spoint (0, 0), 10.0*pi()/180.0, 5.0*pi()/180.0, pi()/2.0 );",
        "SELECT scircle(spoint(0, 0), 0.1);",
        "SELECT spoly '{ (270d,-10d), (270d,30d), (290d,10d)  } ';",
        "SELECT sbox(spoint(0,0),spoint(1,1));",
        "SELECT count(*) FROM gdr1.gaia_source WHERE pg_sphere_point @ sbox(spoint(0.1,-0.03),spoint(0.11, -0.02));"
    ]

    qp = PostgreSQLQueryProcessor()
    for q in queries:
        qp.set_query(q)
        qp.process_query()

        print(qp.columns)
Пример #11
0
def f4():
    query = """SELECT ra FROM gdr2.gaia_source AS gaia WHERE 1=CONTAINS(POINT('ICRS', gaia.ra, gaia.dec), CIRCLE('ICRS', 245.8962, -26.5222, 0.5))"""

    adt = ADQLQueryTranslator(query)
    pgq = adt.to_postgresql()

    iob = {
        'spoint': ((('gdr2', 'gaia_source', 'ra'), ('gdr2', 'gaia_source',
                                                    'dec'), 'pos'), )
    }

    qp = PostgreSQLQueryProcessor()
    qp.set_query(pgq)
    qp.process_query(indexed_objects=iob)

    print('iob', iob)
    print('oq', query)
    print('tq', pgq)
    print(' q', qp.query)
Пример #12
0
    def _test_adql_postgresql_translation_parsing(self,
                                                  query,
                                                  columns=None,
                                                  keywords=None,
                                                  functions=None,
                                                  tables=None,
                                                  display_columns=None,
                                                  indexed_objects=None):
        adt = ADQLQueryTranslator()
        qp = PostgreSQLQueryProcessor()

        adt.set_query(query)

        qp.set_query(adt.to_postgresql())
        qp.process_query(indexed_objects=indexed_objects)

        qp_columns = [
            '.'.join([str(j) for j in i]) for i in qp.columns
            if i[0] is not None and i[1] is not None
        ]
        qp_display_columns = [
            '%s: %s' % (str(i[0]), '.'.join([str(j) for j in i[1]]))
            for i in qp.display_columns
        ]

        if columns:
            self.assertSetEqual(set(columns), set(qp_columns))

        if keywords:
            self.assertSetEqual(set(keywords), set(qp.keywords))

        if functions:
            self.assertSetEqual(set(functions), set(qp.functions))

        if tables:
            self.assertSetEqual(set(tables), set(qp.tables))

        if display_columns:
            self.assertSetEqual(set(display_columns), set(qp_display_columns))
Пример #13
0
def f2():
    query = """
        SELECT TOP 100 ra, dec
        FROM "gdr1".tgas_source AS tgas
        WHERE 1=CONTAINS( POINT('ICRS', tgas.ra, tgas.dec),
        POLYGON('ICRS', 21.480, -47.354, 21.697,-47.229, 21.914,-47.354,
        21.914,-47.604, 21.697,-47.729, 21.480, -47.604) )
    """
    query = """
    SELECT ra, dec, DISTANCE( POINT('ICRS', gaia.ra, dec),
                              POINT('ICRS', 200, 45)  ) AS dist
    FROM gdr1.gaia_source AS gaia
    WHERE 1 = CONTAINS( POINT('ICRS', ra, dec), CIRCLE('ICRS', 200, 45, 60)  ) 
    """
    query = """
    select gaia.source_id,
    gaia.parallax
    from gdr1.tgas_source as gaia
    where 1=contains(point('ICRS',gaia.ra,gaia.dec),circle('ICRS',56.75,24.12,5))
    and sqrt(power(gaia.pmra-20.5,2)+power(gaia.pmdec+45.5,2)) < 6.0
    """
    query = """
    select t1.source_id,t1.ra, t1.dec, t1."phot_rp_mean_mag", t1.bp_rp, t1.bp_g ,
        t1."radial_velocity" ,t1."teff_val",
            t2."mean_obs_time_g_fov",t2."mean_mag_g_fov",t2."mean_mag_bp",
                t2."time_duration_rp",t2."num_selected_rp"
                FROM "gdr2"."gaia_source" as t1, "gdr2"."vari_time_series_statistics" as t2
                WHERE t1."source_id" = t2."source_id"
                ORDER BY t1.source_id;
            """
    query = """
        SELECT source_id 
        FROM gaiadr2.aux_allwise_agn_gdr2_cross_id
        JOIN gaiadr2.gaia_source USING (source_id);
    """
    query = """
    SELECT gaia2.source_id
    FROM gdr2.gaia_source AS gaia2,  gdr2.sdssdr9_best_neighbour AS grd2_rv5 
    WHERE gaia2.source_id = grd2_rv5.source_id 
    AND 1 = CONTAINS(POINT('ICRS', gaia2.ra, gaia2.dec), CIRCLE('ICRS' ,080.8942, -69.7561,  0.5))
    """
    query = """
    SELECT a FROM db.tab WHERE p = 'AAA';
    """
    query = """
          -- multidimensional matrices can be parsed too
          SELECT arr[1:3][1][2][3][4] FROM db.phot;
    """
    # query='SELECT * FROM db.c, db.d'
    query = """SELECT ra FROM gdr2.gaia_source AS gaia
    WHERE 1=CONTAINS(POINT('ICRS', gaia.ra, gaia.dec), 
    CIRCLE('ICRS', 245.8962, -26.5222, 0.5))"""

    query = """
    SELECT gaia.source_id, gaia.ra, gaia.dec, gd.r_est

    FROM gdr2.gaia_source gaia, gdr2_contrib.geometric_distance gd

    WHERE 1 = CONTAINS(POINT('ICRS', gaia.ra, gaia.dec), 

                               CIRCLE('ICRS',245.8962, -26.5222, 0.5))

    AND gaia.phot_g_mean_mag < 15

    AND gd.r_est > 1500 AND gd.r_est < 2300

    AND gaia.source_id = gd.source_id
    """

    print(query)
    adt = ADQLQueryTranslator(query)
    # st = time.time()
    pgq = adt.to_postgresql()
    # st = time.time()
    #  print(pgq)

    iob = {
        'spoint': ((('gdr2', 'gaia_source', 'ra'), ('gdr2', 'gaia_source',
                                                    'dec'), 'pos'), )
    }
    #  (('gdr2', 'gaia_source', 'ra'),
    #  ('gdr1', 'gaia_source', 'dec'), 'pos'))}
    print('iob', iob)
    # qp = PostgreSQLQueryProcessor()
    # qp.set_query(query)
    # qp.process_query()
    # st = time.time()

    # pgq = qp.query
    qp = PostgreSQLQueryProcessor()
    qp.set_query(pgq)
    qp.process_query(indexed_objects=iob)
    #  qp.process_query()

    print('iob', iob)
    print('q', qp.query)
Пример #14
0
def f1():
    query = """
        SELECT DISTANCE(
                POINT('ICRS', ra, dec),
                POINT('ICRS', 266.41683, -29.00781)
                ) AS dist
        FROM gaiadr1.gaia_source
        WHERE 1=CONTAINS(
                POINT('ICRS', ra, dec),
                CIRCLE('ICRS', 266.41683, -29.00781, 0.08333333)
                )
        AND x < 1
        OR 1=CONTAINS(
                POINT('ICRS', ra, dec),
                CIRCLE('ICRS', 66.41683, -29.00781, 0.08333333)
                )
        ORDER BY dist ASC
        """

    query = """
    SELECT *
    FROM gdr1.gaia_source
    WHERE 1=CONTAINS(
    POINT('ICRS',ra,dec),
    CIRCLE('ICRS',266.41683,-29.00781, 0.08333333)
            )
            AND phot_g_mean_mag>=10 AND phot_g_mean_mag<15
            ORDER BY phot_g_mean_mag ASC
    """
    query = """
    SELECT gmag * 0.1 AS gmag_bin, COUNT(gmag) AS number
    FROM
    (
        SELECT FLOOR(phot_g_mean_mag * 10) AS gmag
        FROM gdr1.gaia_source
    ) AS gmag_tab
    GROUP BY gmag;
    """
    query = '''
SELECT gaia.source_id, gaia.ra, gaia.dec, gd.r_est
FROM gdr2.gaia_source gaia, gdr2_contrib.geometric_distance gd
WHERE 1 = CONTAINS(POINT('ICRS', gaia.ra, gaia.dec), 
                   CIRCLE('ICRS',245.8962, -26.5222, 0.5))
AND gaia.phot_g_mean_mag < 15
AND gd.r_est > 1500 AND gd.r_est < 2300
AND gaia.source_id = gd.source_id
    '''

    adt = ADQLQueryTranslator(query)
    pgq = adt.to_postgresql()
    print(pgq)
    return
    qp = PostgreSQLQueryProcessor()
    #  qp.set_query(pgq)
    qp.set_query(query)
    qp.process_query()
    print(qp.columns)
    print(qp.display_columns)
    print(qp.tables)
    print(qp.functions)
    print(qp.keywords)
Пример #15
0
def f2():
    query = """
        SELECT TOP 100 ra, dec
        FROM "gdr1".tgas_source AS tgas
        WHERE 1=CONTAINS( POINT('ICRS', tgas.ra, tgas.dec),
        POLYGON('ICRS', 21.480, -47.354, 21.697,-47.229, 21.914,-47.354,
        21.914,-47.604, 21.697,-47.729, 21.480, -47.604) )
    """
    query = """
    SELECT ra, dec, DISTANCE( POINT('ICRS', gaia.ra, dec),
                              POINT('ICRS', 200, 45)  ) AS dist
    FROM gdr1.gaia_source AS gaia
    WHERE 1 = CONTAINS( POINT('ICRS', ra, dec), CIRCLE('ICRS', 200, 45, 60)  ) 
    """
    query = """
    select gaia.source_id,
    gaia.parallax
    from gdr1.tgas_source as gaia
    where 1=contains(point('ICRS',gaia.ra,gaia.dec),circle('ICRS',56.75,24.12,5))
    and sqrt(power(gaia.pmra-20.5,2)+power(gaia.pmdec+45.5,2)) < 6.0
    """
    query = """
    select t1.source_id,t1.ra, t1.dec, t1."phot_rp_mean_mag", t1.bp_rp, t1.bp_g ,
        t1."radial_velocity" ,t1."teff_val",
            t2."mean_obs_time_g_fov",t2."mean_mag_g_fov",t2."mean_mag_bp",
                t2."time_duration_rp",t2."num_selected_rp"
                FROM "gdr2"."gaia_source" as t1, "gdr2"."vari_time_series_statistics" as t2
                WHERE t1."source_id" = t2."source_id"
                ORDER BY t1.source_id;
            """
    query = """
        SELECT source_id 
        FROM gaiadr2.aux_allwise_agn_gdr2_cross_id
        JOIN gaiadr2.gaia_source USING (source_id);
    """
    query = """
    SELECT gaia2.source_id
    FROM gdr2.gaia_source AS gaia2,  gdr2.sdssdr9_best_neighbour AS grd2_rv5 
    WHERE gaia2.source_id = grd2_rv5.source_id 
    AND 1 = CONTAINS(POINT('ICRS', gaia2.ra, gaia2.dec), CIRCLE('ICRS' ,080.8942, -69.7561,  0.5))
    """
    query = """
    SELECT a FROM db.tab WHERE p = 'AAA';
    """
    #  query = """SELECT ra FROM gdr2.gaia_source AS gaia
    #  WHERE 1=CONTAINS(POINT('ICRS', gaia.ra, gaia.dec), 
    #  CIRCLE('ICRS', 245.8962, -26.5222, 0.5))"""

    adt = ADQLQueryTranslator(query)
    st = time.time() 
    pgq = adt.to_postgresql()
    st = time.time() 
    #  print(pgq)

    iob = {'spoint': ((('gdr2', 'gaia_source', 'ra'),
                       ('gdr2', 'gaia_source', 'dec'), 'pos'),
                      (('gdr1', 'gaia_source', 'ra'),
                       ('gdr1', 'gaia_source', 'dec'), 'pos'))}
    qp = PostgreSQLQueryProcessor(indexed_objects = iob)
    qp.set_query(pgq)
    print(pgq)
    qp.process_query()
    st = time.time() 

    pgq = qp.query
    qp = PostgreSQLQueryProcessor()
    qp.set_query(pgq)
    qp.process_query()

    print(qp.query)
    print(qp.columns)