Comments (3)
Agree but I have bigger plans in mind :).
Currently SqlCommandProvider supports 2 kinds of sql :
- classic T-SQL scripts (default mode)
- Stored Procedures by name. This archived by directly specifying sp name and setting CommandType.StoredProcedures
type UpdateEmplInfoCommandSp = SqlCommand<"HumanResources.uspUpdateEmployeePersonalInfo", connectionString, CommandType.StoredProcedure >
I'm personally not big fan of stored procedures. They remind me so much of imperative style but people use it so make sense to support.
A lot of code in the type provider dedicate to handle second case. Also, there are requests to support SP specific features like out params and return values etc. All this doesn't fit very well into model of pure T-SQL queries.
So here is an idea: create type provider called SqlProgrammability which will reflect subset of Programmability leaf in SQL Server Managment Studio:
We'll target user defined types (including User defined table types), stored procedures and functions.
Usage will be like following:
[<Literal>]
let connectionString = @"Data Source=(LocalDb)\v11.0;Initial Catalog=AdventureWorks2012;Integrated Security=True"
type AdventureWorks2012 = SqlProgrammability<connectionString>
let db = AdventureWorks2012.GetDataContext()
db.StoredProcedures.``HumanResources.uspUpdateEmployeeHireInfo``.AsyncExecute(...)
db.Functions.``dbo.ufnGetContactInformation``.Sample(top = 100, ...)
- this provider can be used to do programmability exploration of sql server
- SqlCommandPrivder will be relieved from SPs specific support which will make usage simpler and intuitive
- types definitions can be shared for SqlProgrammability which is not possible or needed for SqlCommandProvider.
If you like this idea, once we done with development which should be too long (~1 month) we can combine 2 providers into single lib and call it something like FSharp.Data.SqlClient.
from fsharp.data.sqlclient.
All the literature says to use type providers because of statically compiled plans, etc. (or something like that, I haven't kept up), but in practice fully parameterized inline T-SQL is just about as efficient. (It's about impossible to do definitive benchmarks.)
To me the transparency advantage of inline T-SQL which gets correctness checked as you edit it along with the rest of your F# is just huge.
I'm not sure breaking out into 2 TPs has many advantages. It fragments the SQL TP space. I like more features supporting programmability, but why should SQL Server have 2 TPs when there is another TP that supports all the other relational databases (and LinqToSql, if that is your preference).
BTW, I think SqlCommandProvider (when docs are reasonably complete) is already good enough for full incorporation into FSharp.Data. Maybe with the additional programmability it should be renamed to SqlServerProvider,to distinguish that this is for power use on SQL Server and SqlProvider will be for all other RDBMSs or if you really prefer LinqToSql on SQL Server.
Looking forward to talking to you about this and lots of other good stuff next week!
from fsharp.data.sqlclient.
I'm with @dmitry-a-morozov here. What's more, I don't see the current SqlCommand TP to be very useful, this is because I don't use ad-hoc queries at all.
I think, there's two distinct styles of development, the first is where most of the business logic is in application code, the second - where it is in the DB. So, it'd be very natural to have two distinct type providers - SqlCommand for ad-hoc- and SqlProgrammability - for "BL in the DB" architectures.
from fsharp.data.sqlclient.
Related Issues (20)
- Dacpac support info HOT 3
- "F# Formatting" link is broken
- Can't build/run from the commandline, but can from Visual Studio 2019 HOT 2
- Question: Creating a provider without an access to DB HOT 3
- SqlEnumProvider breaks VS 2019 HOT 2
- Not platform detection Fable HOT 1
- Build is broken without full VS installation
- Fixed length binary columns in user defined table types fail when constructed HOT 8
- Cannot use User Defined Table Types with the SqlCommandProvider HOT 5
- .NET 6 support HOT 6
- One line summary of the bug HOT 2
- TVP Column Ordering is incorrect as of version 2.1.0
- Cannot use parameter name more than once in a script HOT 3
- System.Data.SqlClient is not supported on this platform. HOT 5
- Conversion failed when using User Defined Table Types HOT 1
- Any 2023 tricks for running on Windows? HOT 3
- NullReferenceException in SqlConnection.UseLocally HOT 1
- Support for 'Active Directory Interactive' authentication HOT 3
- dotnet SDK projects using FSharp.Core version 7.0.0 breaks at runtime HOT 3
- SQL LIKE operation doesn't recognize variable HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fsharp.data.sqlclient.