@@ -90,6 +90,7 @@ class _Join:
90
90
column_left : Any
91
91
column_right : Any
92
92
join_type : str = field (default = "JOIN" )
93
+ alias : str = field (default = None )
93
94
94
95
95
96
class SimbadClass (BaseVOQuery ):
@@ -670,10 +671,11 @@ def query_objects(self, object_names, *, wildcard=False, criteria=None,
670
671
upload_name = "TAP_UPLOAD.script_infos"
671
672
columns .append (_Column (upload_name , "*" ))
672
673
674
+ # join on ident needs an alias in case the users want to add the votable field ident
673
675
left_joins = [_Join ("ident" , _Column (upload_name , "user_specified_id" ),
674
- _Column ("ident" , "id" ), "LEFT JOIN" ),
676
+ _Column ("ident" , "id" ), "LEFT JOIN" , "ident_upload" ),
675
677
_Join ("basic" , _Column ("basic" , "oid" ),
676
- _Column ("ident " , "oidref" ), "LEFT JOIN" )]
678
+ _Column ("ident_upload " , "oidref" ), "LEFT JOIN" )]
677
679
for join in joins :
678
680
left_joins .append (_Join (join .table , join .column_left ,
679
681
join .column_right , "LEFT JOIN" ))
@@ -716,28 +718,29 @@ def query_region(self, coordinates, radius=2*u.arcmin, *,
716
718
Examples
717
719
--------
718
720
719
- Look for large galaxies in two cones
721
+ Look for largest galaxies in two cones
720
722
721
723
>>> from astroquery.simbad import Simbad
722
724
>>> from astropy.coordinates import SkyCoord
723
725
>>> simbad = Simbad()
724
726
>>> simbad.ROW_LIMIT = 5
725
- >>> simbad.add_votable_fields("otype") # doctest: +REMOTE_DATA
727
+ >>> simbad.add_votable_fields("otype", "dim" ) # doctest: +REMOTE_DATA
726
728
>>> coordinates = SkyCoord([SkyCoord(186.6, 12.7, unit=("deg", "deg")),
727
729
... SkyCoord(170.75, 23.9, unit=("deg", "deg"))])
728
730
>>> result = simbad.query_region(coordinates, radius="2d5m",
729
- ... criteria="otype = 'Galaxy..' AND galdim_majaxis>8") # doctest: +REMOTE_DATA
730
- >>> result.sort("main_id" ) # doctest: +REMOTE_DATA
731
- >>> result["main_id", "otype"] # doctest: +REMOTE_DATA
731
+ ... criteria="otype = 'Galaxy..' AND galdim_majaxis>8.5 ") # doctest: +REMOTE_DATA
732
+ >>> result.sort("galdim_majaxis", reverse=True ) # doctest: +REMOTE_DATA
733
+ >>> result["main_id", "otype", "galdim_majaxis" ] # doctest: +REMOTE_DATA
732
734
<Table length=5>
733
- main_id otype
734
- object object
735
- ------------ ------
736
- LEDA 40577 GiG
737
- LEDA 41362 GiC
738
- M 86 GiG
739
- M 87 AGN
740
- NGC 4438 LIN
735
+ main_id otype galdim_majaxis
736
+ arcmin
737
+ object object float32
738
+ ------------ ------ --------------
739
+ LEDA 41362 GiC 11.0
740
+ M 86 GiG 10.47
741
+ LEDA 40917 AG? 10.3
742
+ M 87 AGN 9.12
743
+ NGC 4438 LIN 8.91
741
744
742
745
Notes
743
746
-----
@@ -1332,7 +1335,7 @@ def query_tap(self, query: str, *, maxrec=10000, get_query_payload=False, **uplo
1332
1335
... my_table_name=letters_table) # doctest: +REMOTE_DATA
1333
1336
<Table length=3>
1334
1337
alphabet
1335
- object
1338
+ str1
1336
1339
--------
1337
1340
a
1338
1341
b
@@ -1415,7 +1418,12 @@ def _query(self, top, columns, joins, criteria, from_table="basic",
1415
1418
else :
1416
1419
unique_joins = []
1417
1420
[unique_joins .append (join ) for join in joins if join not in unique_joins ]
1418
- join = " " + " " .join ([(f'{ join .join_type } { join .table } ON { join .column_left .table } ."'
1421
+ # the joined tables can have an alias. We handle the two cases here
1422
+ join = " " + " " .join ([(f'{ join .join_type } { join .table } AS { join .alias } '
1423
+ f'ON { join .column_left .table } ."{ join .column_left .name } " = '
1424
+ f'{ join .alias } ."{ join .column_right .name } "' )
1425
+ if join .alias is not None else
1426
+ (f'{ join .join_type } { join .table } ON { join .column_left .table } ."'
1419
1427
f'{ join .column_left .name } " = { join .column_right .table } ."'
1420
1428
f'{ join .column_right .name } "' ) for join in unique_joins ])
1421
1429
0 commit comments