jOOQ Newsletter: September 02, 2014 – Do You Really Need Support?

Do you really need support?

Our apologies. We hadn’t realised that we didn’t advertise the support-free jOOQ licenses, which we had been offering for quite a while now well enough on our website. So we have fixed that now.

We think that jOOQ is such a high quality, intuitive piece of software with a vibrant community that our customers might not even need us at Data Geekery to support them! That is why we have been offering support-less subscriptions where customers get to use the jOOQ Professional Edition or the jOOQ Enterprise Edition for 20% less than if they had our guaranteed reaction times.

All you need to do is enter the “NO SUPPORT” discount code with your next purchase, and start coding. More details here. Note that this will only remove our support guarantees, not the warranty. All upgrades and bugfixes are still included.

And while we’re at it, if you’re planning on purchasing 10 licenses or more, please contact us to learn about our high-volume tiered pricing model to further increase the value you’re getting out of jOOQ.

Data Geekery 1 Year Anniversary

Hooraay!

One year ago, on August 15 2013, Data Geekery GmbH was founded to provide commercial licensing and support for jOOQ. We’ve had exciting times behind us, and even more exciting times ahead of us. Here’s a quick wrap-up of what happend in the last year:

  • 2013-08-15: Data Geekery enters the Zurich trade register
  • 2013-10-09: jOOQ 3.2 is released under the new dual licensing strategy
  • 2013-10-29: jOOQ gets roughly 10% votes on this InfoQ poll
  • 2013-12-18: We’re having the 8th conference or JUG talk about jOOQ
  • 2014-12-31: Data Geekery is profitable. A Happy New Year, indeed!
  • 2014-01-01: Our monthly downloads have recovered from dual licensing
  • 2014-01-17: Our articles reach 1M reads on DZone
  • 2014-02-14: jOOQ 3.3 is released with Keyset pagination support
  • 2014-02-19: The 200th Stack Overflow question about jOOQ was asked
  • 2014-05-21: jOOQ is referenced from the RebelLabs reports
  • 2014-06-12: We’re having the 21st conference or JUG talk about jOOQ
  • 2014-06-20: jOOQ 3.4 is released with CTE, transactions, and DDL support
  • 2014-06-23: The 500th GitHub Star was added
  • 2014-07-01: Our monthly downloads have doubled compared to last year
  • 2014-08-08: The 400th blog post was published bringing the 650’000th hit

So, what’s next?

jOOQ is a big success story. Many minor frameworks by other “data geeks” copy jOOQ’s approach to writing internal domain-specific languages for a subset of SQL or of another query language. Examples are:

Being the industry’s leading type safe embedded SQL API, we’re going to continue pushing embedded SQL in Java, and SQL in general. Stay tuned for a very exciting second year of Data Geekery!

Tweet of the Day

Our customers, users, and followers are sharing their love for jOOQ with the world and we can hardly catch up with them! Here are:

Thanks for the shouts, guys! You make the jOOQ experience rock!

SQL Zone – The Dreaded COUNT(*) Function

COUNT(*) seems to be a practical way for many SQL developers to ensure that there is exactly one result record. No more, no less. But often, if you want exactly one record, you can achieve the same thing using a CASE expression along with anEXISTS predicate, which is likely to be much faster than the COUNT(*) alternative, because you probably don’t care about the exact number of records, only about the existence of such records.

Does that sound too abstract? Read this article here, and decide for yourself, if you find potential for optimisation in your code.

SQL Zone – Constraints on Views

If you’re using Oracle or SQL Server (or another standards-compliant database), you can put constraints (“CHECK OPTIONS”) on your database views. This can be extremely useful when you want to prevent users from inserting data into views that don’t match the view itself. Take this view for instance:

CREATE VIEW expensive_books
AS
SELECT id, title, price
FROM books
WHERE price > 100
WITH CHECK OPTION;

This view will not allow you to insert any books with a price lower than 100, because of the CHECK OPTION. An incredibly useful feature that will also be supported by the upcoming jOOQ 3.5.

Read this blog post for more information.

Upcoming Events

After a summer break, we’re back on the road!

Have you missed any of our previous jOOQ talks? Soon you’ll get another chance to hear us talk about jOOQ or SQL in general in any of these upcoming events:

Stay informed about 2014 events on www.jooq.org/news.

jOOQ Newsletter: August 15, 2014 – jOOQ 3.5 Outlook

Subscribe to this newsletter here

jOOQ 3.5 Outlook

We’re working hard on the next release. Already 90 issues for jOOQ 3.5 are closed and counting! Today, we’re going to look at the highlights of what will be implemented in the next, exciting minor release, due for Q4 2014:

  • Support for new databases

    Our customers have been asking us for support of the Informix and Oracle TimesTen databases. While Informix is a very popular (and also old!) database, still widely used in the Industry, Oracle TimesTen is a promising new in-memory database with a very similar syntax to that of Oracle.

    With these two new additions, jOOQ will now support 18 RDBMS!

  • File-based code generation support

    This has been on our roadmap for a very long time, and finally we’re tackling it! If your development workflow prevents you from accessing a database during code generation, you can now also supply database meta information in XML format. We chose XML over any other format as it will be very easy to transform arbitrary pre-existing formats using XSLT (e.g. Hibernate hbm.xml, or ERD tools like Vertabelo‘s export format).

    We’re really looking forward to going live with this awesome feature, and in seeing a variety of community-contributed XSLT pop up, to help you integrate jOOQ with your favourite database schema definition format.

  • TypeProviders

    Sophisticated databases like PostgreSQL ship with a large variety of vendor-specific data types. It’s hard for jOOQ to support them all natively, but why add native support, when we can add another awesome SPI?

    TypeProviders will allow for abstracting over the “<T>” type, jOOQ’s column type. This will go far beyond data type conversion, it will allow you to specify how jOOQ will bind your user type to JDBC completely transparently.

These are just a few major features that we’ll be including in jOOQ 3.5, along with a lot of minor ones – so stay tuned for more jOOQ goodness.

Data Geekery Partner Network

Isaac Newton coined it like no one else:

If I have seen further it is by standing on ye sholders of Giants.

At Data Geekery, we’re looking into seeing further with jOOQ as well as we are now starting to offer and recommend services to the jOOQ ecosystem through our trusted integration partners. Today, we’re happy to recommend to you:


Germany based UWS Software Service (UWS) specialises in custom software development, application modernisation and outsourcing with a distinct focus on the Java Enterprise ecosystem.

UWS has successfully integrated the jOOQ Open-Source Edition with a variety of enterprise software projects. Their offering include custom jOOQ integrations into your system landscape and migration solutions from JDBC and/or JPA to jOOQ. UWS further offers development of custom enterprise applications using jOOQ.


“Almost every performance problem is caused by excessive use of ORM tools or improper indexing.”

Markus Winand specialises in these topics and provides SQL training and tuning services for developers. “It is difficult to tell Java developers to use SQL when Hibernate is not the right tool for a particular query” Winand said, and continued “JDBC is just too cumbersome and dangerous. jOOQ makes SQL in Java simple and safe—now I can show people how to get best of both worlds.”


 

Tweet of the Day

Our customers, users, and followers are sharing their love for jOOQ with the world and we can hardly catch up with them! Here are:

Majid Azimi, who is writing SQL like a boss with jOOQ

https://twitter.com/majidazimi/status/496693413870600192

Christoph Henkelmann, who Has found the most awesome of all stacks to build great web applications. And that consists of Ninjaframework, jOOQ, BoneCP – Slim, Fast, Reliable. We couldn’t have said it any better, ourselves.

Nat Pryce, who simply loves doing SQL queries with jOOQ in Java 8.

Thanks for the shouts, guys! You make the jOOQ experience rock!

SQL Zone – Keyset Pagination

Markus Winand, author of Use The Index, Luke! has recently started a promotion against OFFSET pagination, in favour of keyset pagination, which he called #NoOffset.

We’ve blogged about this ourselves, before. Most people make use of OFFSET pagination because it is the default that is supported by almost all RDBMS.

In many cases, however, you do not need to paginate using OFFSETs, which can turn out to be very slow for large results and large offsets. Keyset pagination is very useful when you want to implement infinite scrolling, like Twitter, Facebook, etc.

jOOQ is one of the few APIs, and the only Java API that natively support keyset pagination.

SQL Zone – PIVOT your data

Every now and then, you have one of those fancy reporting problems where SQL just fits in perfectly. We’ve blogged about it: Are You Using PIVOT Yet?

With the Oracle and SQL Server PIVOT clause, it is very easy to flip rows and columns in a table. Imagine you have a table like this:

+------+----------------+-------------------+
| dnId |  propertyName  |   propertyValue   |
+------+----------------+-------------------+
|    1 | objectsid      | S-1-5-32-548      |
|    1 | _objectclass   | group             |
|    1 | cn             | Account Operators |
|    1 | samaccountname | Account Operators |
|    1 | name           | Account Operators |
|    2 | objectsid      | S-1-5-32-544      |
|    2 | _objectclass   | group             |
|    2 | cn             | Administrators    |
|    2 | samaccountname | Administrators    |
|    2 | name           | Administrators    |
|    3 | objectsid      | S-1-5-32-551      |
|    3 | _objectclass   | group             |
|    3 | cn             | Backup Operators  |
|    3 | samaccountname | Backup Operators  |
|    3 | name           | Backup Operators  |
+------+----------------+-------------------+

And now, you’d like to transform this table to the below:

+------+--------------+--------------+-------------------+-----
| dnId |  objectsid   | _objectclass |        cn         | ... 
+------+--------------+--------------+-------------------+-----
|    1 | S-1-5-32-548 | group        | Account Operators | ... 
|    2 | S-1-5-32-544 | group        | Administrators    | ... 
|    3 | S-1-5-32-551 | group        | Backup Operators  | ... 
+------+--------------+--------------+-------------------+-----

This is a piece of cake using PIVOT:

SELECT p.*
FROM (
  SELECT dnId, propertyName, propertyValue
  FROM myTable
) AS t
PIVOT(
  MAX(propertyValue)
  FOR propertyName IN (
    objectsid, 
    _objectclass, 
    cn, 
    samaccountname, 
    name
  )
) AS p;

jOOQ natively supports the PIVOT clause, which is definitely one of those tools to have on every reporting SQL developer’s tool chain. Read more about it here and here (original source on Stack Overflow).

jOOQ Newsletter October 28, 2013

subscribe to the newsletter here

jOOQ 3.2 Licensing Update

Three weeks ago, we have announced and released

jOOQ 3.2 under the terms of a new dual-licensing model offering jOOQ’s support for commercial databases under a commercial jOOQ license.

The jOOQ community has reacted intensively on the user group, most of the feedback having been very positive. The licensing change is received as a good sign for jOOQ’s long-term future, even if some aspects of it were rightfully challenged.

One important such aspect is the jOOQ license 1.0 (Oct 1) phrasing on the term “distribution”. This has been rectified in the new jOOQ license 1.1 (Oct 28) which explicitly grants our licensees the right to distribute and embed jOOQ with their end-user applications (see §6.2). This has been a misunderstanding on our part and was never intended to be a limitation to our customers. As this updated license grants new rights to our customers, it shall be in effect immediately also for existing jOOQ 3.2 customers.

Do also note that we have published an FAQ for licensing questions you may have.

jOOQ 3.3 Outlook

The upcoming release 3.3 (scheduled for early 2014) will include a bulk of exciting new features among which:

  • Support for MS Access, available in the jOOQ Professional Edition
  • Support for keyset paging (see SQL zone, below)
  • SQL transformation SPI example implementations showing how to perform row-level security and shared-schema multi-tenancy with jOOQ 3.2+
  • A new Open Source contribution platform, allowing the community to easily share SPI implementations and other sorts of plugins not maintained by the Data Geekery

And much more. See the GitHub 3.3.0 milestone for an overview of feature candidates, or participate in the user group to discuss your ideas!

Upcoming Events

Some of you may have noticed with regret that the MEDIT Symposium in beautiful Sicilly has been cancelled. It would have been a great place to learn about the latest activities in the Open Source world. But we are more than happy to announce to you that these events are confirmed. Meet Lukas and jOOQ and lots of other good stuff at:

Stay informed about 2014 events on www.jooq.org/news.

SQL Zone – keyset paging

In recent newsletters, we’ve been talking about NoSQL. But let’s get back to SQL andhow to stay in control of your SQL. As mentioned before, jOOQ 3.3 will provide native support for keyset paging, which is also referred to by some as the “seek method”. Our recent blog post explains how this works, and why it allows you to perform constant-time paging even in very large data sets. This is particularly useful when implementing Twitter- or Facebook-like lazy loading of more and more data!

SQL Zone – useful SQL tricks

We also would like to advertise two SQL tricks that come in handy every once in a while:

SQL Zone – MySQL parser / jOOQ code generator

Our October 10 newsletter announced a new cooperation between GUDU Soft and Data Geekery: SQL2jOOQ. Developments around a MySQL -> jOOQ code transformation have progressed quite a bit. This promising tool will soon help you migrate your large legacy application with tons of hand-written, string-based SQL to jOOQ.

A Significant Difference Between Open Source and Commercial Software

A recent event has triggered a lot of interest in the debate about the good and the bad parts of Open Source. Oracle’s attack on Open Source. For large corporations who aren’t Red Hat, taking a stand on the topic is far from easy. Oracle used to sell only commercial software, but has since acquired a lot of open-sourcey companies, such as Sleepycat Software (BerkeleyDB) or Sun Microsystems (Java, MySQL). Phrasing a long-term strategy upon this legacy isn’t easy.

At the same time, Oracle is extremely successful, having surpassed IBM’s revenue, making Oracle the second largest software company in the world. The continuing popularity of its flagships Java and the Oracle database is promising, also for middleware vendors providing products such as jOOQ, for their flagships.

At Data Geekery, Open Source is also very important, just as commercial licensing has become, since recently. The change towards dual-licensing has been received rather positively on the jOOQ user group, even if it led to open questions about the continued Open Source strategy. But what’s the real difference between Open Source and commercial software? At Adobe, Dr. Roy Fielding is often cited saying that there is essentially no difference between Open Source and commercial software, and he’s quite an authority for both worlds. Both are absolutely viable business models with their pros and cons respectively (unfortunately, I cannot back this up with an actual citation).

One significant difference, however, is that low-quality open source software can heavily outlive low-quality commercial software, as it just never really dies, as no one is “losing money” on low OSS “sales”. I’ve recently blogged about how to recognise such low-quality Open Source software.

Open Source is foremost a business and marketing strategy, just as much as it is a mission. This business strategy can be a good or a bad choice for any software vendor.