Skip to content

Instantly share code, notes, and snippets.

View gregopet's full-sized avatar

Gregor Petrin gregopet

View GitHub Profile
openapi: 3.0.0
info:
version: 1.0.0
title: Smart City Bikes station protocol
paths: {}
# No specific paths - one of the events below is either sent via MQTT or pushed via TCP to an IP & port
components:
schemas:
GenericEvent:
description: Common properties present in all station events (see individual subtypes)
@gregopet
gregopet / jooq.gradle.kts
Last active February 4, 2022 05:51
More recent & simpler version of jooq.gradle
import org.jooq.codegen.GenerationTool
// To include into main Gradle file, use: apply(from = "jooq.gradle.kts")
val dbHost: String by project
val dbPort: String by project
val dbName: String by project
val dbUser: String by project
val dbPass: String by project
@gregopet
gregopet / jooq.gradle
Last active February 23, 2020 06:07
Super minimalistic jOOQ Gradle
defaultTasks 'jooqModel'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.postgresql:postgresql:42.1.4"
classpath "org.jooq:jooq-meta:3.13.1"
select(
DIRECTOR.NAME.as(PERSON.NAME),
DIRECTOR.ADDRESS.as(PERSON.ADDRESS)
)
.from(DIRECTOR)
.union(
select(
ACTOR.NAME.as(PERSON.NAME),
castNull(PERSON.ADDRESS).as(PERSON.ADDRESS)
)
@gregopet
gregopet / Jooq.java
Created November 1, 2019 20:23
jOOQ plain SQL examples
jooq.fetchOne("select * from film limit 1");
// type safety for fields
jooq.fetchOne("select * from film limit 1").get(FILM.TITLE);
jooq.fetchOne("select title || ' ' || description from film limit 1").get(0, String.class);
// parameters
jooq
.fetchOne("select title || ' ' || description from film where title like ? limit 1", "DINOSAUR%")
.get(0, String.class);
@gregopet
gregopet / build.gradle
Last active September 7, 2018 09:58
Minimalistic build.gradle file for creating a jOOQ model from a database
import org.jooq.codegen.GenerationTool
import org.jooq.meta.jaxb.*
import org.jooq.meta.*
// These can also go into gradle.properties
def packageName = "my.package"
def postgresDriverVersion = "42.1.4"
def jooqVersion = "3.11.1"
def debugDatabaseHost="localhost"
def debugDatabasePort=5432
@gregopet
gregopet / debate.adoc
Last active June 19, 2023 19:19
Validation library requirements

What I expect from a validation library

I’m documenting for myself what I would look for in a validation library. The code I currently need it for is in Kotlin so I have the entire JVM ecosystem to choose from.

JSR 303 and JSR 349

Certainly well battle tested but I dislike the annotations approach; while nice for simple validations it can get hairy when testing real scenarios:

@gregopet
gregopet / InstantRangeConverter.java
Last active September 5, 2017 09:24
timestamptz mapping to custom Java type in jOOQ
import org.jooq.*;
import org.jooq.impl.DSL;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Timestamp;
import java.sql.Types;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
### Keybase proof
I hereby claim:
* I am gregopet on github.
* I am gregorpetrin (https://keybase.io/gregorpetrin) on keybase.
* I have a public key whose fingerprint is AF41 B8FB 5C67 F7D5 60FC 3163 70F2 66D4 4ECB A6E6
To claim this, I am signing this object:
@gregopet
gregopet / gist:4e6834b30c5cbcdf0ae1
Created July 29, 2014 15:50
Grails where query oddities..

After encountering some shortcomings of named queries I decided to try out Grails' where queries, mainly for their more powerful composition capabilities.

The results were surprising. For the following domain class..

class Bike {
	Operator operator

	static forOperator(Operator op) {
 Bike.where { operator == op }