this post was submitted on 10 May 2026
268 points (99.3% liked)

Programmer Humor

32681 readers
373 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 3 years ago
MODERATORS
 
top 33 comments
sorted by: hot top controversial new old
[–] TootSweet@lemmy.world 47 points 2 months ago (2 children)
create table boolean (
  id integer primary key,
  name text not null unique
)
insert into boolean (name) values ('true');
insert into boolean (name) values ('false');
create table document (
  id integer primary key,
  name text not null unique,
  body text not null,
  is_archived not null integer,
  foreign key (is_archived) references boolean (id)
    on delete cascade
    on update no action
);

Solved.

Bonus: DBAs hate this one weird trick that can free up incredible amounts of disk space by deleting just two rows.

[–] folekaule@lemmy.world 30 points 2 months ago

That on delete cascade is evil. I love it.

[–] Baizey@feddit.dk 15 points 2 months ago (1 children)

Would this make 0 = true and 1 = false?

[–] TootSweet@lemmy.world 29 points 2 months ago (1 children)

You're right, that's way too simple. Definitely need to rotate the booleans daily. For... security. Yeah, security.

[–] RustyNova@lemmy.world 42 points 2 months ago (2 children)

I think you got the wrong caption. It's the world if SQLite supported multiple concurent writes.

Stupid transaction deadlocks...

[–] irelephant@lemmy.dbzer0.com 8 points 2 months ago (3 children)

In my case, I want to use sqlite locally, for development, but I don't want to add a load of jank to handle booleans for sqlite.

[–] RustyNova@lemmy.world 11 points 2 months ago (2 children)

I use rust's SQLx which map bools to numbers so it must be a problem with your connector maybe

[–] irelephant@lemmy.dbzer0.com 3 points 2 months ago

Yeah I should probably open an issue.

[–] WhyJiffie@sh.itjust.works -1 points 2 months ago (1 children)

username checks out

so it must be a problem with your connector maybe

or with their programming language

[–] RustyNova@lemmy.world 2 points 2 months ago

I actually started using rust well after picking this username :P

[–] nilloc@discuss.tchncs.de 4 points 2 months ago (1 children)

That’s what I like about Ruby ORMs. They did all the conversion for you, and you could have SQLite on your dev box, Postgres on the test server and MySQL on the annoying production host that wouldn’t run anything else.

This was 18 years ago though.

[–] HK65@sopuli.xyz 1 points 2 months ago* (last edited 2 months ago)

Are not all ORMs like that? I only used ActiveRecord before fucking off from backend 10 years ago

[–] qevlarr@lemmy.world 1 points 2 months ago

This is sqlite's intended use case. To replace configure files and local data

[–] dan@upvote.au 2 points 2 months ago (1 children)

WAL mode makes writes a lot faster, which is sufficient for a bunch of use cases. It's still not the right choice for write-heavy use cases, of course.

[–] RustyNova@lemmy.world 2 points 2 months ago

I'm not actually looking for the speed most of the time, but more about preventing partial writes, so I'm still using it

[–] Hadriscus@jlai.lu 10 points 2 months ago (4 children)

What do you use instead of booleans ? floats ?

[–] MultipleAnimals@sopuli.xyz 43 points 2 months ago (2 children)

strings "true" and "false" ofc like any sane developer

[–] Valmond@lemmy.dbzer0.com 27 points 2 months ago (2 children)

I got a better one: O for true and N for false.

Seen in production for quite important stuff (payment requests).

O is from Oui, N from Non, of course!

😐🫤

[–] felbane@lemmy.world 5 points 2 months ago (1 children)

This is awful and aweful at the same time.

[–] Valmond@lemmy.dbzer0.com 1 points 2 months ago* (last edited 2 months ago)

Non affective, non effective.

[–] psud@aussie.zone 2 points 2 months ago

The system I work on uses "Y" and "N".

[–] Hadriscus@jlai.lu 25 points 2 months ago (1 children)
[–] kubica@fedia.io 28 points 2 months ago (1 children)

it allows for mood changes, some parts of the code can check charAt(0) == 't'others can do val != 'false' just let it flow.

[–] Hadriscus@jlai.lu 21 points 2 months ago (1 children)

lord mary joseph make it stop

[–] sznowicki@lemmy.world 17 points 2 months ago

And for double fun if the output doesn’t matter you can make if endsWith(“e”).

[–] deadbeef79000@lemmy.nz 11 points 2 months ago* (last edited 2 months ago) (1 children)

Use a CHAR(1) you can then use it as an enumeration.

Don't use T/F for true/false use it for the actual sematic meaning for the thing that the Boolean is toggling. E g. S for subscribed, U for unsubscribed, or whatever.

It also means when you inevitably grow to needing a tri-state it makes sense.

Unless SQLite actually supports enumerations, then just use them

[–] SpaceNoodle@lemmy.world 4 points 2 months ago

I think you could use a CHECK constraint to effectively create en enum

[–] irelephant@lemmy.dbzer0.com 9 points 2 months ago

Sometimes it's 0 and 1

[–] lord_ryvan@ttrpg.network 3 points 2 months ago

Smallest INT it can support and only ever use 0 and 1.

[–] altphoto@lemmy.today 3 points 2 months ago

But that's IFF.

[–] dalakkin@lemmy.world 3 points 2 months ago

If it just supported sorting by random with a seed..

[–] lambisio@feddit.cl 2 points 2 months ago

I can live without Booleans I think... what saddens me more than nothing else is the lack of more proper treatment for Decimal-like types.