Sqlite – Most Deployed Database in the World
sqlite.org
sqlite.org
Back when I worked at a large semi conductor company they used GDSII[0] and Calibre[1] files along with internal formats and I always wondered why they wouldn't just use SQLite. SQLite is even threadsafe[2].
[0]: https://en.wikipedia.org/wiki/GDSII
[1]: https://www.mentor.com/products/ic_nanometer_design/verifica...
The testing each release goes through is quite impressive. I bet more time is spent on testing (or writing tests) than actually developing the features.
Of course who knows what your CPU microcode is doing, but for the question at hand—ensuring a highly portable C library does what it claims to do more efficiently and accurately than exhaustive testing—formal verification is certainly a reasonable approach.
Additionally, the majority of that test code is closed source, so it isn't getting run on nearly all the platforms sel4 supports anyway.
This also means you’ll run into trouble when you try to move it to most SQL databases which are strongly typed.
Oh god, why?
> Every Firefox, Chrome, and Safari web browser
Where is SQLite in Firefox? It would be wonderful to use SQL in the browser, on the server, in mobile devices (everywhere!), but alas I suspect SQLite can be "found" in Firefox as the underlying storage engine on top of which IndexedDB is built.
Dammit Mozilla, set SQLite free!
https://hacks.mozilla.org/2010/06/beyond-html5-database-apis...
and very much still is in Chrome and Safari, nearly 10 years after WebSQL was "deprecated". Firefox removed WebSQL, replacing it with IndexedDB, a simple k -> v store.
Cross platform SQL everywhere? Not with Firefox still in the mix.
Well, it did, but they removed it, and in fact spearheaded the movement to deprecate WebSQL circa 2010...when Firefox had significant marketshare. Chrome and Safari still, 10 years later, ship with WebSQL support, which makes it pretty clear which side of the fence they're on.
To be fair to the programmer, he said the C-to-C# translation was mostly a self-learning exercise rather than a serious attempt at creating a production-quality library.
I think the obvious answer is that there's no market demand for a C# native version of SQLite. People just use the C# ADO.NET wrapper that calls the "unsafe" C compiled DLL[1]. Using that method, it's easier to stay up-to-date with the canonical C source code that has the latest bug fixes and new features. If you look at high frequency of updates in the release history[2], you can see that constantly porting the new C code to C# to maintain feature parity would be a tremendous amount of work.
Also, if you create a C to C# port, it means using the C Language style API such as "sqlite3_open()" instead of the more natural C# paradigm of ADO.NET "new SQLiteConnection(@"Data Source=x")". Somebody would than have to write another ADO.NET wrapper to specifically interface with the C# port of SQLite.
[0] https://code.google.com/archive/p/csharp-sqlite/
[1] https://system.data.sqlite.org/index.html/doc/trunk/www/down...
Is this really necessary? Is it impossible to just write a .Net-native library with whatever an API that would just open an SQLite file and run SQL queries against it? As for me that's all I ever needed of it.
It's not impossible but the issue is whether it's worth the amount of effort involved. So yes, you can theoretically write the C# code in any way that makes a convenient API for the C# coder.
But when attempting real-world implementations, there are varying degrees of difficulty/maintainability of porting the C code to C#. You want to balance the tradeoffs of minimizing the C# programming code effort and maximizing the leverage of the original C source code. The effort continuum would look something like this:
- easy: unsafe C DLL with C# ADO.NET wrapper (the 'C' source code is mostly unchanged and is leveraged for highest reuse; this is what we have today)
- harder: straight C-to-C# port with extra C# code to provide an ADO.NET wrapper (an automated tool can attempt to transpile most of the C into C# which is followed up by a human programmer to manually fix/code the parts the transpiler couldn't; this effort was attempted in 2009 and the incomplete project was eventually abandoned)
- hardest: C-to-C# total rewrite where the programmer built in an ADO.NET api (or whatever API the C# programmer wants to expose). In this way the original SQLite C source is more of a "specification" rather than an input file to a transpiler.
The "harder" effort which wasn't even 100% complete was abandoned. It means the "hardest" implementation, while technically not impossible, is even more unrealistic for anyone to code and maintain. That last method of C# rewrite has immense costs and would fall further and further behind the original C source code in feature parity and bug fixes.
To answer your question on why there are no alternative implementations: it's because it's a lot of programming work that nobody wants to do.
https://docs.microsoft.com/en-us/windows/uwp/data-access/sql...
Apps are moving to LSM based storage engines.
RocksDB or Badger are the future.
Now, you just need to make embedded DB with Sqlite API using rocksdb/badger and sell it as direct competitor to Sqlite.
It will be a dropin replacement for Sqlite, written in a safer (hacker hype) language.
For more Omph, use Rust as a language for this and create libaries using FFI for python/ruby/node/c#
Pretty sure selling it won't work. For many, a convenient mini-storage is an afterthought during a product development and it doesn't warrant a cost.