kopia lustrzana https://github.com/simonw/datasette
				
				
				
			Facets now execute ignoring ?_col and ?_nocol, fixes #1345
							rodzic
							
								
									7b106e1060
								
							
						
					
					
						commit
						f7d3e76fb3
					
				|  | @ -358,16 +358,21 @@ class TableView(RowTableShared): | |||
|         ) | ||||
| 
 | ||||
|         pks = await db.primary_keys(table) | ||||
|         table_columns = await self.columns_to_select(db, table, request) | ||||
|         select_clause = ", ".join(escape_sqlite(t) for t in table_columns) | ||||
|         table_columns = await db.table_columns(table) | ||||
| 
 | ||||
|         specified_columns = await self.columns_to_select(db, table, request) | ||||
|         select_specified_columns = ", ".join( | ||||
|             escape_sqlite(t) for t in specified_columns | ||||
|         ) | ||||
|         select_all_columns = ", ".join(escape_sqlite(t) for t in table_columns) | ||||
| 
 | ||||
|         use_rowid = not pks and not is_view | ||||
|         if use_rowid: | ||||
|             select = f"rowid, {select_clause}" | ||||
|             select_specified_columns = f"rowid, {select_specified_columns}" | ||||
|             select_all_columns = f"rowid, {select_all_columns}" | ||||
|             order_by = "rowid" | ||||
|             order_by_pks = "rowid" | ||||
|         else: | ||||
|             select = select_clause | ||||
|             order_by_pks = ", ".join([escape_sqlite(pk) for pk in pks]) | ||||
|             order_by = order_by_pks | ||||
| 
 | ||||
|  | @ -633,7 +638,7 @@ class TableView(RowTableShared): | |||
|             where_clause = f"where {' and '.join(where_clauses)} " | ||||
| 
 | ||||
|         if order_by: | ||||
|             order_by = f"order by {order_by} " | ||||
|             order_by = f"order by {order_by}" | ||||
| 
 | ||||
|         extra_args = {} | ||||
|         # Handle ?_size=500 | ||||
|  | @ -656,13 +661,22 @@ class TableView(RowTableShared): | |||
|         else: | ||||
|             page_size = self.ds.page_size | ||||
| 
 | ||||
|         sql_no_limit = "select {select} from {table_name} {where}{order_by}".format( | ||||
|             select=select, | ||||
|         sql_no_limit = ( | ||||
|             "select {select_all_columns} from {table_name} {where}{order_by}".format( | ||||
|                 select_all_columns=select_all_columns, | ||||
|                 table_name=escape_sqlite(table), | ||||
|                 where=where_clause, | ||||
|                 order_by=order_by, | ||||
|             ) | ||||
|         ) | ||||
|         sql = "select {select_specified_columns} from {table_name} {where}{order_by} limit {page_size}{offset}".format( | ||||
|             select_specified_columns=select_specified_columns, | ||||
|             table_name=escape_sqlite(table), | ||||
|             where=where_clause, | ||||
|             order_by=order_by, | ||||
|             page_size=page_size + 1, | ||||
|             offset=offset, | ||||
|         ) | ||||
|         sql = f"{sql_no_limit.rstrip()} limit {page_size + 1}{offset}" | ||||
| 
 | ||||
|         if request.args.get("_timelimit"): | ||||
|             extra_args["custom_time_limit"] = int(request.args.get("_timelimit")) | ||||
|  |  | |||
|  | @ -2041,6 +2041,21 @@ def test_http_options_request(app_client): | |||
|             "/fixtures/facetable.json?_col=state&_col=created&_nocol=created", | ||||
|             ["pk", "state"], | ||||
|         ), | ||||
|         ( | ||||
|             # Ensure faceting doesn't break, https://github.com/simonw/datasette/issues/1345 | ||||
|             "/fixtures/facetable.json?_nocol=state&_facet=state", | ||||
|             [ | ||||
|                 "pk", | ||||
|                 "created", | ||||
|                 "planet_int", | ||||
|                 "on_earth", | ||||
|                 "city_id", | ||||
|                 "neighborhood", | ||||
|                 "tags", | ||||
|                 "complex_array", | ||||
|                 "distinct_some_null", | ||||
|             ], | ||||
|         ), | ||||
|         ( | ||||
|             "/fixtures/simple_view.json?_nocol=content", | ||||
|             ["upper_content"], | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Simon Willison
						Simon Willison