douglasshuang

douglasshuang

High Performance PostgreSQL for Rails: Off-by-one length bug in `SCRUB_EMAIL` (page 52)

Hi @andatki,

This is a follow-up to my previous error report, High Performance PostgreSQL for Rails: Confusing `SUBSTR` arguments in `SCRUB_EMAIL` (page 52). The + 1 after GREATEST(…) was necessary when we were passing 0 as the start index to SUBSTR, but now it’s incorrect and results in a scrubbed email address that is one character too long when the original email username has a length greater than or equal to 5. The example on Page 53 actually demonstrates the bug:

SELECT SCRUB_EMAIL('bob-and-jane@gmail.com');
-- scrub_email
-- ------------------------
-- 2bffb502c463@gmail.com

“bob-and-jane@gmail.com” has length 22, whereas “2bffb502c463@gmail.com” has length 23:

owner@localhost:5432 rideshare_development# SELECT LENGTH('bob-and-jane@gmail.com'), LENGTH(SCRUB_EMAIL('bob-and-jane@gmail.com'));
 length | length
--------+--------
     22 |     23
(1 row)

Thank you,

Doug

First Post!

andatki

andatki

Author of High Performance PostgreSQL for Rails

Hi @douglasshuang Shoot! Well unfortunately it’s too late to fix it in the book. I do have the functions or similar ones here in the Rideshare source. If you’d like to create a PR it might help someone else who goes looking. This thread may also help them find it. rideshare/db/functions at main · andyatkinson/rideshare · GitHub Fortunately since the intent was to have similar sized data but scrubbed, if it’s one character too long of random text, at least it will be uniformly 1 character too long, so the proportions of lengths should stay the same. Thanks for continuing to be a reader and bug finder. This forum had gotten pretty quiet lately! :slight_smile:

Where Next?

Popular Pragmatic Bookshelf topics Top

abtin
page 20: … protoc command… I had to additionally run the following go get commands in order to be able to compile protobuf code using go...
New
johnp
Running the examples in chapter 5 c under pytest 5.4.1 causes an AttributeError: ‘module’ object has no attribute ‘config’. In particula...
New
herminiotorres
Hi @Margaret , On page VII the book tells us the example and snippets will be all using Elixir version 1.11 But on page 3 almost the en...
New
HarryDeveloper
Hi @venkats, It has been mentioned in the description of ‘Supervisory Job’ title that 2 things as mentioned below result in the same eff...
New
Henrai
Hi, I’m working on the Chapter 8 of the book. After I add add the point_offset, I’m still able to see acne: In the image above, I re...
New
a.zampa
@mfazio23 I’m following the indications of the book and arriver ad chapter 10, but the app cannot be compiled due to an error in the Bas...
New
dtonhofer
@parrt In the context of Chapter 4.3, the grammar Java.g4, meant to parse Java 6 compilation units, no longer passes ANTLR (currently 4....
New
New
gorkaio
root_layout: {PentoWeb.LayoutView, :root}, This results in the following following error: no “root” html template defined for PentoWeb...
New
roadbike
From page 13: On Python 3.7, you can install the libraries with pip by running these commands inside a Python venv using Visual Studio ...
New

Other popular topics Top

AstonJ
If it’s a mechanical keyboard, which switches do you have? Would you recommend it? Why? What will your next keyboard be? Pics always w...
New
PragmaticBookshelf
Brace yourself for a fun challenge: build a photorealistic 3D renderer from scratch! In just a couple of weeks, build a ray tracer that r...
New
PragmaticBookshelf
Design and develop sophisticated 2D games that are as much fun to make as they are to play. From particle effects and pathfinding to soci...
New
brentjanderson
Bought the Moonlander mechanical keyboard. Cherry Brown MX switches. Arms and wrists have been hurting enough that it’s time I did someth...
New
Rainer
My first contact with Erlang was about 2 years ago when I used RabbitMQ, which is written in Erlang, for my job. This made me curious and...
New
Exadra37
I am asking for any distro that only has the bare-bones to be able to get a shell in the server and then just install the packages as we ...
New
PragmaticBookshelf
Author Spotlight: Peter Ullrich @PJUllrich Data is at the core of every business, but it is useless if nobody can access and analyze ...
New
CommunityNews
A Brief Review of the Minisforum V3 AMD Tablet. Update: I have created an awesome-minisforum-v3 GitHub repository to list information fo...
New
AstonJ
This is cool! DEEPSEEK-V3 ON M4 MAC: BLAZING FAST INFERENCE ON APPLE SILICON We just witnessed something incredible: the largest open-s...
New
xiji2646-netizen
Woke up to this today: Claude Code’s complete source code exposed via npm source map. Not a snippet. All 512,000 lines. 1,900 TypeScript ...
New

Sub Categories: