✨ Increase number_of_types to 5 to support longer select queries#1333
✨ Increase number_of_types to 5 to support longer select queries#1333GiorgioPorgio wants to merge 1 commit intofastapi:mainfrom
number_of_types to 5 to support longer select queries#1333Conversation
| @@ -107,6 +107,24 @@ | |||
| _T3 = TypeVar("_T3") | |||
|
|
|||
|
|
|||
There was a problem hiding this comment.
Everything in this file is autogenerated by running the script (*_*)
number_of_types to 5 to support longer select queries
|
Just as an idea: See example for 5 parameters in the details: Details@overload
def select( # type: ignore
__ent0: _TCCA[_T0],
__ent1: _TCCA[_T1],
__ent2: _TCCA[_T2],
__ent3: _TCCA[_T3],
__ent4: _TCCA[_T4],
) -> Select[Tuple[_T0, _T1, _T2, _T3, _T4]]: ...
@overload
def select( # type: ignore
entity_0: _TScalar_0,
__ent1: _TCCA[_T1],
__ent2: _TCCA[_T2],
__ent3: _TCCA[_T3],
__ent4: _TCCA[_T4],
) -> Select[Tuple[_TScalar_0, _T1, _T2, _T3, _T4]]: ...
@overload
def select( # type: ignore
entity_0: _TScalar_0,
entity_1: _TScalar_1,
__ent2: _TCCA[_T2],
__ent3: _TCCA[_T3],
__ent4: _TCCA[_T4],
) -> Select[Tuple[_TScalar_0, _TScalar_1, _T2, _T3, _T4]]: ...
@overload
def select( # type: ignore
entity_0: _TScalar_0,
entity_1: _TScalar_1,
entity_2: _TScalar_2,
__ent3: _TCCA[_T3],
__ent4: _TCCA[_T4],
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TScalar_2, _T3, _T4]]: ...
@overload
def select( # type: ignore
entity_0: _TScalar_0,
entity_1: _TScalar_1,
entity_2: _TScalar_2,
entity_3: _TScalar_3,
__ent4: _TCCA[_T4],
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TScalar_2, _TScalar_3, _T4]]: ...
@overload
def select( # type: ignore
entity_0: _TScalar_0,
entity_1: _TScalar_1,
entity_2: _TScalar_2,
entity_3: _TScalar_3,
entity_4: _TScalar_4,
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TScalar_2, _TScalar_3, _TScalar_4]]: ...
@overload
@deprecated(
"""
This version of `select` function is deprecated.
You should order parameters so that all `_TScalar_XX` parameters would go before any
of `_TCCA[_TXX]` parameter.
Read more: [link to the documentation]
"""
)
def select( # type: ignore
__ent0: _TCCA[_T0],
param_1: Any,
param_2: Any,
param_3: Any,
param_4: Any,
) -> Select[Tuple[_T0, Any, Any, Any, Any]]: ...Last overload is to catch the wrong parameters order and show the deprecation warning with clear message and link to the docs. We can leave overloads for 1-4 parameters as it is for backward compatibility, or optionally mark overloads that don't follow this rule as deprecated. |
|
Increasing the limit from 4 to 5 means this problem will happen again when someone has a select with 6 inputs. I'm not familiar with the code at all, but is there some way to accept an arbitrarily large number of inputs? Or increase the limit to something absurd like 50? |
Unfortunately no. Because of limitations of Python typing regarding order of generic types, you have to explicitly specify every possible combination, leading to a factorial explosion. @YuriiMotov 's solution could work perhaps, have not tested it and Python is not my main laguage. I think both solutions would help the community. I acknowledge the current PR is more of a quick win but a safe change that would improve DX. |
I am trying to write a select statement that selects 5 different SQLModel children. However I get a type error as the overloads for select are limited to 4.
Increasing to 6+ causes
mypyto hang, so I chose 5 :)Resolves #271 (comment)
Thank you very much for your time and working on OSS!