@@ -76,70 +76,96 @@ def save_data(self, records: list[model.Record]) -> None:
7676 object_count = len (table_items ),
7777 )
7878
79- def get_new_observations (
80- self , dt : datetime .datetime , limit : int , offset : int , catalog : model .RawCatalog
81- ) -> list [model .RecordWithPGC ]:
82- """
83- Returns all objects that were modified since `dt`.
84- `limit` is the number of PGC numbers to select, not the final number of objects.
85- As such, this function will return around
86- `limit * (average_number_of_observations_per_PGC)` objects, not `limit`.
87-
88- `offset` is the first PGC number from which to start selecting.
89-
90- This makes the function safe for aggregation - for each returned PGC all of its objects will be returned.
91- """
92- object_cls = model .get_catalog_object_type (catalog )
93-
94- query = f"""SELECT *
95- FROM { object_cls .layer1_table ()} AS l1
79+ def get_new_nature_records (self , dt : datetime .datetime , limit : int , offset : int ) -> list [model .NatureRecord ]:
80+ query = """SELECT o.pgc, l1.record_id, l1.type_name
81+ FROM nature.data AS l1
9682 JOIN layer0.records AS o ON l1.record_id = o.id
9783 WHERE o.pgc IN (
9884 SELECT DISTINCT o.pgc
99- FROM { object_cls . layer1_table () } AS l1
85+ FROM nature.data AS l1
10086 JOIN layer0.records AS o ON l1.record_id = o.id
10187 WHERE o.modification_time > %s AND o.pgc > %s
10288 ORDER BY o.pgc
10389 LIMIT %s
10490 )
10591 ORDER BY o.pgc ASC"""
106-
10792 rows = self ._storage .query (query , params = [dt , offset , limit ])
93+ return [model .NatureRecord (pgc = int (r ["pgc" ]), record_id = r ["record_id" ], type_name = r ["type_name" ]) for r in rows ]
10894
109- record_data : dict [tuple [int , str ], list [model .CatalogObject ]] = {}
110-
111- for row in rows :
112- record_id = row .pop ("record_id" )
113- pgc = int (row .pop ("pgc" ))
114- catalog_object = object_cls .from_layer1 (row )
115-
116- key = (pgc , record_id )
117- if key not in record_data :
118- record_data [key ] = []
119- record_data [key ].append (catalog_object )
120-
121- records : list [model .RecordWithPGC ] = []
122- for (pgc , record_id ), catalog_objects in record_data .items ():
123- record_info = model .Record (id = record_id , data = catalog_objects )
124- records .append (model .RecordWithPGC (pgc , record_info ))
125-
126- return records
95+ def get_new_icrs_records (self , dt : datetime .datetime , limit : int , offset : int ) -> list [model .ICRSRecord ]:
96+ query = """SELECT o.pgc, l1.record_id, l1.ra, l1.e_ra, l1.dec, l1.e_dec
97+ FROM icrs.data AS l1
98+ JOIN layer0.records AS o ON l1.record_id = o.id
99+ WHERE o.pgc IN (
100+ SELECT DISTINCT o.pgc
101+ FROM icrs.data AS l1
102+ JOIN layer0.records AS o ON l1.record_id = o.id
103+ WHERE o.modification_time > %s AND o.pgc > %s
104+ ORDER BY o.pgc
105+ LIMIT %s
106+ )
107+ ORDER BY o.pgc ASC"""
108+ rows = self ._storage .query (query , params = [dt , offset , limit ])
109+ return [
110+ model .ICRSRecord (
111+ pgc = int (r ["pgc" ]),
112+ record_id = r ["record_id" ],
113+ ra = float (r ["ra" ]),
114+ e_ra = float (r ["e_ra" ]),
115+ dec = float (r ["dec" ]),
116+ e_dec = float (r ["e_dec" ]),
117+ )
118+ for r in rows
119+ ]
127120
128- def get_new_nature_records (self , dt : datetime .datetime , limit : int , offset : int ) -> list [model .NatureRecord ]:
129- query = """SELECT o.pgc, l1.record_id, l1.type_name
130- FROM nature .data AS l1
121+ def get_new_redshift_records (self , dt : datetime .datetime , limit : int , offset : int ) -> list [model .RedshiftRecord ]:
122+ query = """SELECT o.pgc, l1.record_id, l1.cz, l1.e_cz
123+ FROM cz .data AS l1
131124 JOIN layer0.records AS o ON l1.record_id = o.id
132125 WHERE o.pgc IN (
133126 SELECT DISTINCT o.pgc
134- FROM nature .data AS l1
127+ FROM cz .data AS l1
135128 JOIN layer0.records AS o ON l1.record_id = o.id
136129 WHERE o.modification_time > %s AND o.pgc > %s
137130 ORDER BY o.pgc
138131 LIMIT %s
139132 )
140133 ORDER BY o.pgc ASC"""
141134 rows = self ._storage .query (query , params = [dt , offset , limit ])
142- return [model .NatureRecord (pgc = int (r ["pgc" ]), record_id = r ["record_id" ], type_name = r ["type_name" ]) for r in rows ]
135+ return [
136+ model .RedshiftRecord (
137+ pgc = int (r ["pgc" ]),
138+ record_id = r ["record_id" ],
139+ cz = float (r ["cz" ]),
140+ e_cz = float (r ["e_cz" ]),
141+ )
142+ for r in rows
143+ ]
144+
145+ def get_new_designation_records (
146+ self , dt : datetime .datetime , limit : int , offset : int
147+ ) -> list [model .DesignationRecord ]:
148+ query = """SELECT o.pgc, l1.record_id, l1.design
149+ FROM designation.data AS l1
150+ JOIN layer0.records AS o ON l1.record_id = o.id
151+ WHERE o.pgc IN (
152+ SELECT DISTINCT o.pgc
153+ FROM designation.data AS l1
154+ JOIN layer0.records AS o ON l1.record_id = o.id
155+ WHERE o.modification_time > %s AND o.pgc > %s
156+ ORDER BY o.pgc
157+ LIMIT %s
158+ )
159+ ORDER BY o.pgc ASC"""
160+ rows = self ._storage .query (query , params = [dt , offset , limit ])
161+ return [
162+ model .DesignationRecord (
163+ pgc = int (r ["pgc" ]),
164+ record_id = r ["record_id" ],
165+ design = r ["design" ],
166+ )
167+ for r in rows
168+ ]
143169
144170 def query_records (
145171 self ,
0 commit comments