Show HN: 10 Years to Build a Free SQL Editor
timestored.com
timestored.com
To people asking why he's giving it away for free: partially because it's content marketing (duh), but mostly because this has been a labor of love for him that he wants to let loose into the world.
edit: Apple silicon, which I note because the process type in activity monitor is 'Intel'
Link of the repo: https://github.com/timeseries/qstudio
In SQL Management Studio it is easy to work with stored procedures. The server starts the tree on the left, and all databases on the server are the next level down (not a separate connection for each database). Then beneath that (2 levels) each stored procedure is listed and can be opened easily for modification in the editor.
I will return to this app if I need to munge/import data in the future but it's not worth the effort for my normal work with stored procedures as best I can tell from a quick start. It's not immediately clear how to pull a stored procedure up in the editor without running a query manually to grab its definition.
I tried putting []'s (brackets) around the name to escape the spaces but apparently that's not how DuckDB works.
Also, I'm used to using F5 to run the queries but that didn't work either.
What is the benefit of registering? I skipped it to try it out.
Was very quick looking at my local MySql database. I liked being able to run sql against some local parquet files.
Would need to support Redshift via an ssh tunnel for me to use it on a regular basis. I don't want to manage the tunnel with a different tool.
>>Would need to support Redshift via an ssh tunnel for me to use it on a regular basis. Redshift has definitely moved up the priority list lately. I will look into it.
Tunnels have so many configuration options that you'd either have to support raw configuration in the app (at that point just DIY a tunnel in the terminal), implement something incomplete, or build a full featured SSH tunnel manager into the app.
SSH tunnels can be totally transparent to DB clients. Unlike DB application-layer stuff like credentials, where the DB client needs knowledge of them, I don't see the cost/benefit of integrating SSH tunnels into the app itself.
You’d need to be transparent in your GUI wording that this is forking SSH (in the case of Windows users) but it wouldn’t be an issue for Linux or macOS.
ssh tunneling alone can be done in so many ways with different environments necessitating which might work. are we talking ssh tun/tap IP tunnels? simple port forwarding? either of the above but with a proxyjump required to get there?
That's not the first release, that's "just" 3.0, they released QStudio 1.25 in 2013 (their first blog post) https://www.timestored.com/b/qstudio-kdb-ide-1-25-released/
There were more learnings, like I should definitely have went fully open source at the start. It's harder to do later.
1) Being a Jar there’s no easy way to add it to the Applications folder and launch it “naturally”.
2) The colors I selected for each connection didn’t seem to stick.
3) I can’t find a way to have a connection go against multiple Sql Server databases.
4) Cloning a connection keeps the highlight in the source server in the Server Tree.
5) The Console isn’t easy to view table results on due to it using simple pipe (|) separation.
Language: Java, GUI: Swing, Docking framework: DockingFrames (LGPL)
There are better tools now, partly why qStudio is free as I don't believe it could compete with the paid offerings. My main profit making focus has moved onto a new niche that I think is underserved....building real-time apps based on a database. qStudio acts as a good advertisement and brand awareness for that much heavier product.
GDK_SCALE=2 java -jar qstudio.jar
I haven't gotten very far into it, but here's a little feedback about what it took to get to the point where I could try it out.
1. I'm running MacOS 14.4.1.
2. I downloaded the jar file.
3. I double-clicked the jar file. It wouldn't open. I've seen this before, so I navigated to the jar file, right-clicked it and chose open, and it gave me the option to launch it even though it was unsigned after a warning.
4. Then it told me I needed a java runtime, and I should go to java.com to get one.
5. I went to java.com to get one, downloaded the java 8 runtime things defaulted to, and when I went to install it, I got a scary warning that Oracle might sue me if I used this for commercial use. This is my personal machine, but I didn't know what might count as commercial use, so I noped out and decided to look for an open source runtime.
6. I figured out that `brew install java` seemed like what I want and ran that.
7. Once that completed, I double-clicked the jar again. No luck.
8. Since the SQL editor site advised running from the command line if double-clicking didn't work, I tried that. An error message directed me to java.com.
9. I didn't want to go back there, so I did more web searches. I learned that if I ran `sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk` things might work. So I tried that and went back to right-click the jar and run it. I again accepted the warning. It launched!
10. It asked me for an email address. I just wanted to try out the software, not sign up for email. I declined to enter one.
11. It asked me for a license code. I declined to enter one.
12. Then it told me I was in a 30 day trial mode once the GUI came up.
I'm still interested, but that's the end of my timebox today. I hope I remember to come back and try it some more.
But what's the deal? Is it a 30 day trial for a paid product? Or is it really free? Or do you need email to make it really free?
You might want to look at how JetBrains bundles the JRE with datagrip on Mac. The level of effort needed to try this was maybe higher than I'd consider ideal.
In my experiments, I was able to pull it off for Mac and Windows, but Linux was still a bit wild west as to how to properly package it (for me), so they just get a fat jar. It's doable, I just didn't do it.
It helps if you use the Java modularity to trim down the runtime.
I was able to distribute my FX app (which requires platform specific binaries) that way.
¹ Unless it were the only one, it would be impossible to be leading right after launch.
90% of the commits are just adding nonsense.
update to latest = 21+16
release = 4+1
bugfix = 3+2
update readme = 3+35+35+35+35+35+35+35+14
total = 309 out of 341 commits
The commits stopped at Jun 25, 2016 when it was just a "Custom JDBC Driver and Authenticator Example" and then suddenly Feb 23, 2023 it became "qStudio - Free SQL Analaysis Tool"
Some people judge project quality by commit number. The empty commits I did generate as I believe it more closely resembles the effort and commits that have been put into the project than if I left it on 10 commits starting 2 years ago.
> Doing the boring work of getting the build working on github etc. doesn't seem valuable to my users vs adding functonality.
You don't need this to open source it, you can provide source without setting up builds
Practically I am often understanding how to write certain queries by starting out with a certain table or a certain row and then looking at the resulting subgraphs of tables or rows that are linked to it. I want to be able to bookmark a row and come back to it immediately.
Also tools like this also implement "save" in a way that is useless at best and sadistic at worst. Who really saves a bunch of SQL files in a directory like "Query001.sql"? If I want to "save" queries and updates I don't want to save them in a strange SQL-specific project. Depending on my project these are either going to be incorporated inside source code files or possibly saved in files that live inside a project I manage with a non-SQL IDE. If I want to "save" DDL these are either saved in the database themselves by executed or could be managed as part of a migration system, which I haven't seen a tool of this sort support. Although I never "save" files in that kind of tool, it is certain to try to stop me from turning my computer off so it is another thing that makes turning my computer off like
Edit: Actually your description reminded me of jailer: https://github.com/Wisser/Jailer Does that do what you want?
Notably, being able to follow relationships easily.
Trivial use case, selecting a bunch of order rows, clicking on the "customer_id" of one of the rows, and it brings up the associated row, following the foreign key. Clicking on something else to open up the dependent tables (like the order detail lines). After a bit of clicking around, you have a subset of the DB ERD (save it has data). Then, maybe, using that as a base, you can start clicking on columns to form up a query, with all of the joins in place.
As I said, 5 minutes of thought, 30,000 ft view. But I've not seen anything like that, perhaps it's just not practical.
https://www.jetbrains.com/help/idea/creating-diagrams.html#d...
I don't know how to translate that Pulse FAQ to qStudio. FWIW, I'm using Java 11 on macOS 14. I have a single qstudio.jar file.
https://intersystems-community.github.io/iris-driver-distrib...
Example connection strings:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook...
Instructions for starting a container:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook...
I've dealt with extremely customized licenses for businesses (financial) that wanted software built for their use, but also to have the ability to resell the software that was built specifically for them. Not much surprises me anymore when it comes to expectations of legal departments. You just don't want to get into any kind of legal battle in the future over your software. I don't know anything about the size of your business, or who uses your software, but I do know that when it gets ugly and someone is looking for rights to software, you need to have things clearly laid out or you could end up devastated by a company that has funds to keep putting into legal fees that you may not.
I hope that this scenario never plays out, because I think releasing this is something that really adds value to the community that deals with databases. I just don't want to see someone trying to make a living get hurt by a licensing issue. Unfortunately, when it comes to high-end business, it's not so uncommon when things don't go the way your client wishes them to go. Best of luck to you!
Edit: just tried it on Windows and you have mojibaked text on the welcome dialog [0].
[0]: https://imgur.com/a/qeIdLGN
Edit 2: Unfortunately your product has some architectural/design issues. Way too much latency, UI hangs a lot simply following the action links in the welcome dialog, trying to open a 3 mib database hung the software until I killed it, etc. The interface is highly non-idiomatic and doesn't follow ui patterns common to any of the major desktops (in response to keyboard shortcuts, mouse operations, etc), and doesn't do a lot of what I would consider to be basic safety/sanity checks (i.e. tries to open a binary database as a text sql file, shows garbled unicode).
>>The interface is highly non-idiomatic Ouch this hurts but I'm open to improving it. Have you any specific suggestions?