sebastienros / yessql

A .NET document database working on any RDBMS
MIT License
1.22k stars 198 forks source link

IsIn fails if over 2100 values are passed :) (sqlazure) #187

Open carlwoodhouse opened 5 years ago

carlwoodhouse commented 5 years ago

The IsIn method fails in sqlserver if over 2100 values are passed to it (due to the parameter limits on sqlazure for column IN (,)

Any chance we could intelligently switch to using TVP's if over 2100 items ? or are we stuck with batching higher up the stack.

Skrypt commented 5 years ago

At this point if you require more than 2100 content items, rendering those on a page might be quite expensive. Though, I'm guessing you want to have those for a GraphQL query which would transform this data as JSON. Would be a large data set still... You might want to page your data queries all the time ; though if the limit could be set higher by using an other SQL technique that could also do the trick. Though you still are passing a quite large amount of string length with those UID's.

carlwoodhouse commented 5 years ago

honestly it's mostly for more advanced filtering ... where i already have 2100 contentitemids and i know i need to query within those 2100

eg its one of these 2100 but only the ones that x applies too, it's possibly a little niche tho :)

sebastienros commented 4 years ago

I am suggesting to provide it as an option, and by default it would just fail miserably ;) an argument in the IsIn probably. Each dialect could specify what is the max size internally. If you enabling the pagination, then it would do it for you. But by default it will fail, opt-in. Or maybe another method that can do it explicitly.