100% found this document useful (1 vote)
15 views

Beginning jOOQ Learn to Write Efficient and Effective Java Based SQL Database Operations 1st Edition Tayo Koleoso All Chapters Instant Download

Learn

Uploaded by

raikapexa
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
15 views

Beginning jOOQ Learn to Write Efficient and Effective Java Based SQL Database Operations 1st Edition Tayo Koleoso All Chapters Instant Download

Learn

Uploaded by

raikapexa
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 65

Download Full Version ebook - Visit ebookmeta.

com

Beginning jOOQ Learn to Write Efficient and


Effective Java Based SQL Database Operations 1st
Edition Tayo Koleoso

https://ebookmeta.com/product/beginning-jooq-learn-to-write-
efficient-and-effective-java-based-sql-database-
operations-1st-edition-tayo-koleoso-2/

OR CLICK HERE

DOWLOAD NOW

Discover More Ebook - Explore Now at ebookmeta.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

Beginning jOOQ: Learn to Write Efficient and Effective


Java-Based SQL Database Operations 1st Edition Tayo
Koleoso
https://ebookmeta.com/product/beginning-jooq-learn-to-write-efficient-
and-effective-java-based-sql-database-operations-1st-edition-tayo-
koleoso-3/
ebookmeta.com

Beginning jOOQ: Learn to Write Efficient and Effective


Java-Based SQL Database Operations 1st Edition Tayo
Koleoso
https://ebookmeta.com/product/beginning-jooq-learn-to-write-efficient-
and-effective-java-based-sql-database-operations-1st-edition-tayo-
koleoso/
ebookmeta.com

Effective SQL 61 Specific Ways to Write Better SQL 1st


Edition John L. Viescas & Douglas J. Steele & Ben G.
Clothier
https://ebookmeta.com/product/effective-sql-61-specific-ways-to-write-
better-sql-1st-edition-john-l-viescas-douglas-j-steele-ben-g-clothier/

ebookmeta.com

A Focus on Addition and Subtraction Bringing Mathematics


Education Research to the Classroom 1st Edition Caroline
B. Ebby
https://ebookmeta.com/product/a-focus-on-addition-and-subtraction-
bringing-mathematics-education-research-to-the-classroom-1st-edition-
caroline-b-ebby/
ebookmeta.com
Art in Crisis The Lost Center 2nd Edition Hans Sedlmayr

https://ebookmeta.com/product/art-in-crisis-the-lost-center-2nd-
edition-hans-sedlmayr/

ebookmeta.com

Teaching Fairly in an Unfair World 2nd Edition Kathleen


Gould Lundy

https://ebookmeta.com/product/teaching-fairly-in-an-unfair-world-2nd-
edition-kathleen-gould-lundy/

ebookmeta.com

Deep Learning-Based Face Analytics 1st Edition Nalini K


Ratha

https://ebookmeta.com/product/deep-learning-based-face-analytics-1st-
edition-nalini-k-ratha/

ebookmeta.com

Gray's Anatomy Review 3rd Edition Marios Loukas

https://ebookmeta.com/product/grays-anatomy-review-3rd-edition-marios-
loukas/

ebookmeta.com

Lost & Hound. 1st Edition Rita Mae Brown.

https://ebookmeta.com/product/lost-hound-1st-edition-rita-mae-brown/

ebookmeta.com
Captives How Stolen People Changed the World Borderlands
and Transcultural Studies Cameron

https://ebookmeta.com/product/captives-how-stolen-people-changed-the-
world-borderlands-and-transcultural-studies-cameron/

ebookmeta.com
Tayo Koleoso

Beginning jOOQ
Learn to Write Efficient and Effective Java-Based
SQL Database Operations
1st ed.
Tayo Koleoso
Silver Spring, MD, USA

ISBN 978-1-4842-7430-9 e-ISBN 978-1-4842-7431-6


https://doi.org/10.1007/978-1-4842-7431-6

© Tayo Koleoso 2022

This work is subject to copyright. All rights are solely and exclusively
licensed by the Publisher, whether the whole or part of the material is
concerned, specifically the rights of translation, reprinting, reuse of
illustrations, recitation, broadcasting, reproduction on microfilms or in
any other physical way, and transmission or information storage and
retrieval, electronic adaptation, computer software, or by similar or
dissimilar methodology now known or hereafter developed.

The use of general descriptive names, registered names, trademarks,


service marks, etc. in this publication does not imply, even in the
absence of a specific statement, that such names are exempt from the
relevant protective laws and regulations and therefore free for general
use.

The publisher, the authors and the editors are safe to assume that the
advice and information in this book are believed to be true and accurate
at the date of publication. Neither the publisher nor the authors or the
editors give a warranty, expressed or implied, with respect to the
material contained herein or for any errors or omissions that may have
been made. The publisher remains neutral with regard to jurisdictional
claims in published maps and institutional affiliations.

This Apress imprint is published by the registered company APress


Media, LLC part of Springer Nature.
The registered company address is: 1 New York Plaza, New York, NY
10004, U.S.A.
Any source code or other supplementary material referenced by the
author in this book is available to readers on GitHub via the book’s
product page, located at www.apress.com/9781484274309. For more
detailed information, please visit http://www.apress.com/source-code.
Table of Contents
Chapter 1:​Welcome to jOOQ
Database Operations in Java:​The Good Parts
Database Operations in Java:​The…Not So Good Parts
You Have Got to Be jOOQing
jOOQ Feature Tour
Database Aware
Code Generation
Type Safety
Domain-Specific Language
Tooling Support
JVM Languages
Chapter 2:​Getting Started with jOOQ
Eden Auto Mart
Setting Up jOOQ
Install Dependencies for Commercial-Licensed jOOQ
CRUD with jOOQ
Your SQL Dialect and You
Tools of CRUD in jOOQ
Select Statements
Insert Statements
Update Statements
Delete Statements
Alternative Data Access Modes
Transactions
With Locking
Configuration
Connection Management
Schema, Catalog, and Multi-tenant Deployment
Query Management
Query Lifecycle Integration
Chapter 3:​Working with jOOQ
Generating Code
Tools of jOOQ Code Generation
Working with Generated Code
CRUD with Generated Code
Advanced Database Operations
Joins
Batch Operations
Advanced Query Syntax
Chapter 4:​Integrating with jOOQ
Java Persistence API with jOOQ
Generate JPA Entities
Generate from JPA Entities
Generate SQL Queries
Spring Boot and jOOQ
Configure jOOQ in Spring Boot
Quarkus and jOOQ
Chapter 5:​Packaging and Testing jOOQ
Package Code with jOOQ
When You Don’t Need Code Generation
When You Don’t Have an Active Database Connection
When Your Schema Needs to Incrementally Evolve
Testing with jOOQ
Tools of the (SQL) Testing Trade
Unit Testing with jOOQ
Integration Testing with Docker and TestContainers
Index
About the Author
Tayo Koleoso
is the Founder and CEO of LettuceWork
(www.lettucework.io), the platform
dedicated to engineering culture. He
created the Better Managed
Development method for building and
sustaining an effective product
engineering culture. He’s a lifelong
learner, engineer, and engineering leader
committed to building people and
software in a healthy, sustainable, and
effective ecosystem. Outside of tech,
comedy is the only thing he consumes in
large quantity. King of the Hill, Peep
Show and 30 Rock are his comfort telly, I
tell you what.
He got his start in software
engineering as a teenage database
programmer with Oracle 8i. The jOOQ platform is therefore a natural fit
and a return to his roots: his love affair with SQL.
About the Technical Reviewer
Vishwesh Ravi Shrimali
graduated in 2018 from BITS Pilani,
where he studied mechanical
engineering. Currently, he is working at
Mercedes Benz Research and
Development India Pvt. Ltd. as an ADAS
Engineer. He has also co-authored
Machine Learning for OpenCV 4 (Second
Edition), The Computer Vision Workshop,
and Data Science for Marketing Analytics
(Second Edition) by Packt. When he is
not writing blogs or working on projects,
he likes to go on long walks or play his
acoustic guitar.
© The Author(s), under exclusive license to APress Media, LLC, part of Springer
Nature 2022
T. Koleoso, Beginning jOOQ
https://doi.org/10.1007/978-1-4842-7431-6_1

1. Welcome to jOOQ
Tayo Koleoso1
(1) Silver Spring, MD, USA

I got my start in software engineering (and really, serious computer


business) at 15 years old, with Oracle 8i SQL. Yes, I’ve been an old man
from a young age, technologically speaking. Playing with SQL* Plus,
trying (and failing) my first Oracle SQL certification exam, before I even
started university, taught me the value of getting SQL right. Don’t take it
from me, take it from this chap:
I was a data access purist: I like my DAOs chilled, my
PreparedStatements prepared, and my SQL handwritten with the
care and tenderness of a lover... The world moved on to Hibernate,
Java Persistence API (JPA), and everything in between... I still
believe in raw SQL – a well-crafted SQL statement will outperform
Object-Relational Mapping (ORM).
—A tall, dark, dashing young and cool man, with flowing locks of
jet black hair and piercing brown eyes1

That tall drink of SQL? Probably me; I don’t know. The point is I
deeply appreciate Structured Query Language (SQL) and all it has to
offer. The industry’s been going gaga about NoSQL because it’s “easy to
use” and it “scales quickly,” but the fact of the matter is that SQL is still
the undisputed king of Online Analytical Processing (OLAP). When you
want sanity and integrity in your data, SQL is there. When you want
(most of2) the guarantees of reliable transaction handling (à la ACID),
you’re still going to need solid SQL in your stack. Not for nothing,
database stored procedures will typically outperform application-layer
(e.g., Java, .Net) processing in many cases. In the words of the late, great
Thanos: “SQL is inevitable. It’s in the interests of your application’s
scalability and correctness to get it right.”
Unfortunately, SQL gets very short shrift from devs nowadays. The
database is just another “black box” that we’re supposed to yell
commands at, so it yields some data and then we move on. It’s not until
our queries progressively degrade due to preventable problems; our
schema is an incoherent mess after two versions of our applications;
SQL injection attacks expose our weaknesses; the application chokes on
queries returning more than a few hundred rows. One of the dark sides
of SQL is that you’re not likely to realize that your SQL query is
returning incorrect or incomplete data at first glance. You ran a query, it
returned some queries, and that’s that, right? Yikes.
This book isn’t about the fundamentals of SQL. Or even the joys of
SQL per se (there are many). This book is about taking a different look
at handling SQL work in Java.

Database Operations in Java: The Good Parts


Your options for handling SQL data in the Java world are fairly
straightforward:
1. JDBC (Java Database Connectivity): JDBC is the most fundamental
API supporting Relational Database Management System (RDBMS)
access. It provides
Connection management
Direct SQL statement control
Stored procedure and function execution
Mostly SQL injection safe componentry
Transaction management

Save for one or two JakartaEE specifications, pretty much


everything else RDBMS related in the Java ecosystem is based on JDBC.
Because of JDBC, we can then have…
2. Mapping Frameworks: Yes, I’m talking about Object-Relational
Mapping (ORM) frameworks like Hibernate, MyBatis, and
EclipseLink. These are très convenient frameworks, based on the
premise that developers don’t want to spend any time…developing
SQL or other database-related constructs. Neato. With these
mapping frameworks, you get to define some classes, slap some
annotations on them and the framework:
Maps your java classes (the object model) to your database tables
(the domain model). This mapping is used to convert query
results into java objects, known as entities. These entities are
managed objects – like a concierge service – changes to the
entities in memory are tracked and persisted by the ORM
runtime.
Allows you to declaratively model the relationships between your
tables in your RDBMS, using java object relationships (is-a, has-a
type stuff). An absolute cornucopia of annotations supports this
feature of ORMs.
Completely spares you of any details related to the SQL involved
in all this magic. It just works.
Provides declarative transaction handling – with more
annotations.
Provides an additional query language, Hibernate Query
Language (HQL) , that introduces an object-oriented flavor to the
mix. This way, you can abandon SQL altogether (!) and just speak
fluent OOP all the time!

Most ORM providers offer some form of caching of the results of


database queries. The goal here is to save the travel time to the
database for subsequent trips to the database. So that when one user
loads some data once, if they request the same rows, it’s already in
memory.
Then we have the Java Persistence API (JPA) . This is a JakartaEE
specification that attempts to standardize the usage and behavior of
ORMs in the Java platform. The various providers (Hibernate, etc.)
implement this specification to varying degrees. They each also have
implementation-specific syntactic sugar that isn’t supported by the API.
The API still allows you to write your raw SQL if you like, and the
results can still be managed objects. Pretty neat.
In addition to all this, a framework like Spring offers the
JdbcTemplate as a wrapper around JDBC proper. SQL in the Java
system is just one raging party of convenience. Nice!

Database Operations in Java: The…Not So Good


Parts
Ask yourself this: why aren’t JavaServer Pages (JSP) and JavaServer
Faces (JSF) as wildly popular as, say, React.js or Vue.js, when front-end
development is concerned? A lot of Java-based organizations are happy
to have Java or Kotlin Spring Boot back ends, but fronted by not Java.
Because when you care about performance and resource efficiency in a
domain like the browser, nothing beats raw JavaScript.
And I say this as someone that’s spent a fair bit of time teaching
about JSF and answering questions on StackOverflow. Don’t get me
wrong: JSF is super convenient. Heck, that’s why I got into the business
of JSF in the first place: a cheap, convenient, and practical way to belch
out markup and scripting into a web page. But when no one’s watching,
I know. I know that raw JavaScript is still where it’s at. If you want to
make your browser dance, deal with the quirks and nuances of
individual browsers, you turn to the language invented for browsers.
These hips stylesheets don’t lie.
Yet here we are, where many have decided that SQL should take a
backseat when interacting with databases. Park the language built for
the platform in the garage; Java, the language of kings, is preferable. In
many scenarios, it isn’t. Here are some reasons why:
1. JPA isn’t aware of what type of database you’re using, which is a
shame, when you consider that there are specific quirks, features,
and limitations of individual databases, for example:
MySQL doesn’t support the INTERSECT or EXCEPT set
operations; FULL JOIN is also off the menu. You wouldn’t know
until you tried to use it and your operation chokes.
JPA doesn’t know what to do with nulls in the ORDER BY clause;
there’s also no support for the ORDER BY NULLS FIRST
clause from standard SQL.3 You’re on your own here.
JPA doesn’t deal well with the IN clause in some scenarios:
When you want to take advantage of query plan caching
When there are nulls in the list of parameters passed to the IN
clause
PostgreSQL supports a massive array of data types that are
hyper-specific and hyper-optimized to some use cases. There’s a
wide assortment of data types you can leverage in this RDBMS
that you will have to do a bunch of extra work to support with
UserTypes in Hibernate.
Many of the mainstream database providers (Oracle, PostgreSQL,
and MySQL at least) provide document storage and SQL querying
– that’s right, you can save your JSON documents in these
databases, query, and navigate inside the documents with SQL.
Basically combine NoSQL and SQL in the same box. Some
benchmarks have shown the performance to be comparable to
the likes of MongoDB up to certain scales. These aren’t your
grandmother’s RDBMSes.
“But I want to make my application portable.” Your enterprise
has spent borderline sinful sums of money on an Oracle license, but
you’re going to use like 5% of its capabilities, like a really fancy
Excel spreadsheet?

2. Even with native query capabilities, neither JPA nor Hibernate will
save you from yourself. Your raw SQL is still open to SQL injection if
you make the right mistakes. Your SQL could still be incorrect, and
you won’t find out until you try to execute the native query. Java
Persistence Query Language (JPQL) and Hibernate Query Language
(HQL) aren’t going to save you either. You won’t find out your query
syntax is broken or incorrect until you try to run it. And if you
accidentally make changes to a managed JPA entity, it’s going to be
committed to the database the first chance it gets.

3. Remember the caching that Hibernate and other tools will do for
you by default? Guess whose RAM is slowly being devoured? Go on,
guess. You might be surprised to find out that every entity retrieved
and managed by a single hibernate session is cached – for just that
hibernate session – so that in a large enterprise application with
any number of concurrent users, they’re all liable to hold copies of
exactly the same data in RAM of the application server. Imagine
how thirsty your application will get at scale!
4. Can you confidently say you know what’s going on inside of
Hibernate or EclipseLink? Have you tried to look at the actual
queries being generated by Hibernate? You might be in for a lot of
disappointment. There are many scenarios where Hibernate is
simply wasteful with database trips that are hidden from view:
Batch inserts and updates aren’t enabled by default, and you’re
going to do a bit of work to fully support both.
Even more specifically, using GenerationType.IDENTITY
with PostgreSQL and some others, Hibernate will still ignore any
batching directives.4

5. The challenges of an ORM really get in your face when you need to
scale. A couple rows, maybe a couple hundred, and you could skate
by. Larger result sets, on the other hand, are sometimes not
practical (see the previous discussion: loading all retrieved entities
into memory). You could struggle to handle an increase in query
volume. JPA 2.2 introduced support for more efficient streaming
from the database; but again different kinds of databases handle
this feature differently. So that despite your best efforts, MySQL and
PostgreSQL could still very well retrieve the entire ResultSet,5
ignoring your JPA 2.2 expectations of efficient results streaming.

6. Fundamentally, ORM as a concept is at odds with relational data


representations. The technical name for it is the Object-Relational
Impedance Mismatch. Don’t take it from me; ask the nerds at
Hibernate themselves6:

The way you access data in Java is fundamentally different


than (sic) the way you do it in a relational database. In Java,
you navigate from one association to another walking the
object network. This is not an efficient way of retrieving data
from a relational database. You typically want to minimize
the number of SQL queries and thus load several entities via
JOINs and select the targeted entities before you start
walking the object network.

Point is that past a certain point, you’re either going to be dealing


with a mess of annotations and a hopelessly complex entity class graph,
or you’re going to need to roll up your sleeves and get SQL-y.
You can’t avoid writing SQL if you’re going to do data access
correctly in Java. This isn’t a dig at the gang over at Hibernate; that
framework is a dang miracle for many use cases. But we’re not here to
talk about Hibernate, are we?

You Have Got to Be jOOQing


Yes, I’m here to give you the good news of the jOOQ framework. First
things first: jOOQ is not a complete replacement for Hibernate, JPA, or
anything in that realm. JPA delivers on its goals of standardizing most of
RDBMS access for Java developers. Hibernate is hella powerful and
convenient; particularly for write operations, you can ORM to your
heart’s content and delight. I mean, what can beat the convenience of
simply updating a field of a java object and persist-ing or flush-
ing?
For adult-tier, large-scale SQL data wrestling? Where there are a lot
of read operations? You’ll need the big guns. jOOQ is as big a gun as
you’ll get in this business of ours. Don’t take it from me, take it from an
actual ORM expert:
How about this chap:

…But while abstracting the SQL write statements is a doable task,


when it comes to reading data, nothing can beat native
SQL...native querying is unavoidable on almost any enterprise
system...While you can fire native queries from JPA, there’s no
support for dynamic native query building. jOOQ allows you to
build typesafe dynamic native queries, strengthening your
application against SQL injection attacks. jOOQ can be integrated
with JPA, as I already proven on my blog, and the JPA-jOOQ combo
can provide a solid data access stack.
—Vlad Mihalcea7
Vlad was a contributor to the Hibernate platform and continues to
support his own query performance optimizer, and he’s an authority on
the relationship between Java and relational databases. Cheers to that.
If you think of JPA and its implementations as being too Object-
Oriented Programming (OOP) friendly, jOOQ seeks to bring a balance to
the force. Providing strong awareness of the nuances of safe, effective,
and efficient SQL handling, all the while maintaining a solid grip on the
object-oriented side of things. So what’s in the jOOQ box?

jOOQ Feature Tour


Alright, gather round everyone8! Let me sing you the song of my people
jOOQ. Ohhh, this is a tale of…

Database Aware
jOOQ is unapologetically RDBMS vendor aware.9 Unlike those other
guys, jOOQ provides API kits built specifically for a wide range of major
database vendors. This way, when you’re using jOOQ tools and APIs,
you can be sure you’re idiomatically correct; the syntax and semantics
of your code is transparently optimized and tightly mated with your
database of choice. And the delightful part of this is that it doesn’t
translate to a tight coupling to your Java code. Because jOOQ skews
closer to the database, your Java code can still remain technically
database agnostic; your jOOQ library implementation will quietly
handle the finer details and nuances of your specific database of choice.
You can then quite easily flip a configuration in jOOQ to support
another, should you choose to switch databases.

Code Generation
jOOQ is all about convenience when it comes to the developer
experience. Observe.
Starting with any one of the following:
Existing database schema
Database table
Stored procedure or function
Sequence
JPA entity
XML file
Plaintext file containing SQL
Liquibase YAML, XML, or JSON file
Custom data types
jOOQ will generate java classes, JPA-annotated entity classes,
interfaces, or even XML that correctly maps what is represented in the
source material. If you’re starting with stored procedures or functions,
jOOQ will generate “routines”: classes that represent that database
code, making it as convenient as physically possible to use what’s
already available.

Type Safety
All the entities, data, and fields you’ll be working with are typesafe –
guaranteed correct. The fields from your database tables, bind variables
from your stored procedures and functions, etc. are translated to the
closest match available in Java.

Domain-Specific Language
jOOQ provides a DSL that mirrors the specific SQL dialect that’s
implemented by your choice of database vendor. Even beyond that, the
library integrates the quirks and non-standard features of the
supported database vendors. You know the ones, the bad boy databases
(looking at you, Oracle). This compile-time checking of your SQL syntax
means that you’ll have to go out of your way to write broken or
otherwise unsupported SQL. No more waiting till runtime to find out
your SQL doesn’t compile!

Tooling Support
You also get a robust toolkit to support a lot of developer convenience
and safe usage of the library:
Maven: jOOQ offers configurable Maven plugins and tools to support
a variety of tasks around the code generation feature.
Command Line: Also supports the powerful code generation feature
of jOOQ. Additionally, there’s a Schema Diff feature that helps
compare two schemata and output the difference.
Flyway and Liquibase: You can use the two most popular DML and
DDL version control libraries with jOOQ.
Raw SQL Vendor Safety: Should you opt to not use the SQL DSL,
instead choosing raw SQL, you can use jOOQ’s Parser anywhere in
your code to ensure that the SQL you’re writing is correct and valid
for the selected database.
SQL Disabler: The PlainSQLChecker allows you to disable
support for raw SQL anywhere in your project. Drop it in your Maven
POM.xml and it’ll disallow compilation of any raw SQL in your
project. This way, you can guarantee that anyone that’s working on
your project or codebase will have to use jOOQ-generated code and
jOOQ’s fluent API; eliminating the probability of incorrect SQL
creeping into the code.

JVM Languages
We get to take the jOOQ box on tour! You can use jOOQ with
Kotlin
Scala
Groovy
This has been a 50,000 ft. flyover of jOOQ and what it brings to the
table. I want to stress here that jOOQ isn’t a replacement for ORM – the
right tool for the right job, etc. Where Hibernate, etc. don’t give you the
coverage you need, that’s where jOOQ swings into action.
So! Whaddya think so far? Pretty neat, huh? I’ll just catch my breath
for a moment here, and see you in the next chapter!

Footnotes
1 Editor’s note: Oh brother. Here we go again.

2 I say “most of” here because different Relational Database Management Systems
provide varying degrees of ACID strength.
3 Coming soon with Hibernate 6:
https://docs.jboss.org/hibernate/orm/6.0/userguide/html_singl
e/Hibernate_User_Guide.html#hql-order-by

4 https://vladmihalcea.com/postgresql-serial-column-
hibernate-identity/

5 https://vladmihalcea.com/whats-new-in-jpa-2-2-stream-the-
result-of-a-query-execution/

6 http://hibernate.org/orm/what-is-an-orm/

7 https://blog.jooq.org/2015/04/14/jooq-tuesdays-vlad-
mihalcea-gives-deep-insight-into-sql-and-hibernate/

8 Editor’s note: How many people do you think are concurrently reading a single
copy of your book?

9 www.jooq.org/download/support-matrix
© The Author(s), under exclusive license to APress Media, LLC, part of Springer Nature 2022
T. Koleoso, Beginning jOOQ
https://doi.org/10.1007/978-1-4842-7431-6_2

2. Getting Started with jOOQ


Tayo Koleoso1
(1) Silver Spring, MD, USA

Let’s take this thing for spin! But first, you should get to know these classes and interfaces; they’re at the
heart of 75% of what you’ll be doing in jOOQ:
1. org.jooq.impl.DSL
This is the sturdy, wise grandparent of most of jOOQ’s functionality. With this class, you can
Manipulate parts of a strongly typed SQL query in a typesafe manner.
Access database functions (concat, coalesce, etc.) as if they were java methods.
Specify database dialects. This is for when you need to perform operations that are unique to your
datastore (Oracle, Amazon Redshift, PostgreSQL, etc.).
Carry out Database Definition Language (DDL) operations like ALTER, CREATE, DROP, etc., all in a
typesafe manner.
Perform more mundane tasks like
Constructing plaintext SQL
Configuring the database connections
Almost all of its functionality are static methods in the class, so you’ll typically just need to perform
an import static org.jooq.impl.DSL.* to use its features.

2. org.jooq.DSLContext
Where DSL offers almost all its functionality in static methods without state, DSLContext is more object
oriented. There’s some overlap between this component and the DSL class, but there’s a fundamental
difference. It’s really in the name DSL: Domain-Specific Language Context. Keeping state in a context
object provides runtime capabilities that you’re not going to get from DSL – comes in handy when your
SQL operation is a multi-step one or is part of a longer process. Overall, DSLContext offers
Fluent programming style
Stateful components
Better integration with dependency injection frameworks like Spring (more on that later)
The fluent programming style of DSLContext is remarkable. This isn’t your standard builder-
pattern style chain of method calls. This is a true DSL that will prevent you from accidentally (or even
purposefully) constructing incorrect SQL. Each method call in the chain is possible only if the previous
method call will correctly support it. Truly, you’ll need to work super hard to construct incorrect SQL in
jOOQ. Because the DSLContext usage is mostly stateful, you’ll need to be more conscious of thread safety
when using this class.

3. org.jooq.conf.Settings
The Settings class will let you further customize your jOOQ context with simple, straightforward
parameters that change the behavior of the API. An instance of this class can help you control factors like
The kind of JDBC Statement that’s jOOQ uses – a regular Statement or a PreparedStatement.1
Mapping different schemas in same jOOQ context.
Controlling the logging of SQL statements being executed by jOOQ.
Disabling support for Java Persistence API (JPA) annotations, for a slight performance improvement.
Configuring the behavior of jOOQ’s internal SQL parser – for example, to set it up for a specific SQL
dialect. This would apply if you’re using jOOQ to process raw SQL strings instead of its typesafe
options.
Configuring JDBC-specific options like queryTimeout and maxRows.
Configuring batch size for batch operations.
4. org.jooq.Configuration
The Configuration class contains the core configuration items that control how your jOOQ runtime
behaves. Configuration is responsible for managing your database connection, plugging into the
jOOQ engine to customize its behavior on a broader scope than just individual SQL queries.
org.jooq.Configuration provides methods that allow you to plug in custom code that can replace
or support standard jOOQ functionality altogether.

5. org.jooq.meta.jaxb.Configuration
You’ll be using this class to control the code generation feature of jOOQ. It’s a direct analog of a jOOQ
configuration file named library.xml. Generating java representations of your database tables, rows,
columns, stored procedures, etc. is a major feature of the jOOQ platform, and I’m looking forward to
getting to that part of this book! Yes: org.jooq.Configuration vs.
org.jooq.meta.jaxb.Configuration could lead to some awkwardness.

Which import statement is wearing it best? Trick question: it’s Becky .

Eden Auto Mart


I’m going to use a car dealership as the background for all the examples that I’ll be showing throughout this
book. Eden Auto is a car dealer that sells new and used cars via a web portal so that customers can
Search for cars by many different attributes of the vehicle itself
Search across brands of vehicle
Search across a price range
On the back end, the staff of Eden Auto can
Upload cars for sale
Update existing prices and other attributes
Remove cars from the inventory
View existing inventory
Search the inventory for cars by many attributes
We’re going to use a relatively simplified data model here just for the purpose of demonstrating specific
jOOQ features. Here’s what that looks like.
To help run some of the examples in this book, you can bootstrap with the database definition that comes
with the code sample attached to this book.

Setting Up jOOQ
To start, you’ll need to reckon with the particulars of the RDBMS you’re going to be working with. A lot of the
beauty of jOOQ is how it allows you to use pretty much any database with tons of convenience. Features that
aren’t available in your chosen database can be emulated transparently by the jOOQ API. For this book, I’ll be
doing most of the demonstrations with MySQL, with some detours into the some other popular databases
every now and then.
I’ll need MySQL’s Connector/J database driver as a dependency:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-driver-version}</version>
</dependency>

On to the actual setup of jOOQ, where things get a little…interesting. See, jOOQ is offered as both free and
commercial software – a dual licensing model. The license model determines (among other things)
The SQL dialects you can use in your application
The way you set jOOQ up in your project
For the free version of jOOQ, it’s a straightforward maven entry, because it’s publicly available in the
global Maven repo:

<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen</artifactId>
<version>3.15.1</version>
</dependency>
Simple enough, yes? Bueno. When you’ve paid for the commercial version however, things get a bit more
manual. Here’s how.

Install Dependencies for Commercial-Licensed jOOQ


The dependencies for the commercial2 version of jOOQ aren’t available in public repositories because, well,
they’re not free and thus not available for public download. To get the commercial version (or a trial), visit
www.jooq.org/download/versions to download the version that matches your version of Java.

<screenshot of versions page>

Once you’ve plugged in your particulars, you’ll be prompted to download a zip file containing
Sources
Compiled JARs
Helper scripts
There are two helper scripts in the zip file:
maven-deploy
maven-install
Both helpers do the same thing with different targets: build and install the jOOQ jars into repositories.
maven-deploy will set up the jOOQ JARs in a remote repository, so reach for that to set up the JAR in a
central Artifactory or similar dependency repository. For a local maven repository, reach for the maven-
install script and you’re sorted. After all this scriptin’ action, you can then add commercial jOOQ to your
project like so:

<dependency>
<groupId>org.jooq.pro</groupId>
<artifactId>jooq</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>org.jooq.pro</groupId>
<artifactId>jooq-meta</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>org.jooq.pro</groupId>
<artifactId>jooq-codegen</artifactId>
<version>3.15.1</version>
</dependency>

It’s the same artifactId as the free version, but with a different groupId:org.jooq.pro . You can
use a trial license for the commercial version of jOOQ by using org.jooq.trial for the groupId. The
open source version is just as functional for many use cases, but with limited database vendor support and
fewer features.3 Also noteworthy that jOOQ’s JDK support starts from JDK 6, all the way up to the latest (17,
as at the time of this writing). The older JDK versions are supported only with the paid version.
Tip The trial version of the commercial jOOQ distribution will print a message indicating that yes, you
are indeed on a trial version of the commercial jOOQ distribution. But rejoice, oh ye trial version users, for
jOOQ is effective as it is generous: set the org.jooq.no-logo=true JVM property to disable the trial
license warning message.

And that’s it! jOOQ is set up in your project. Now to do stuff with it…

CRUD with jOOQ


With your jOOQ JARs in place, database driver configured, we now should start using this bad boy. We’re
going to need to acquire connections, load the driver, etc. If you haven’t done database work in Java before
now, I’m going to show you how the least cool way to do it in Java:

try(Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost/test?
user=testuser&password=thisisaterriblepassword")){
//more to come
}catch(SQLException sqlex){

The goal of the preceding snippet is to acquire a database connection; jOOQ can take care of everything
following that. jOOQ on its own isn’t too particular about how you acquire the connection if you follow some
established commonsense principles. This isn’t a particularly great way to do connection acquisition in a
modern application. You should be using the javax.sql.Datasource class and connection pools instead
of manually wrangling connection drivers. But more on that later. For now, we have a database connection,
and thus it’s time to start jOOQin’.

Remember DSL and DSLContext are the primary entry points into the jOOQ ecosystem.

Fundamentally, most jOOQ operations will begin with some variation of the following:

DSLContext context = DSL.using(connection,SQLDialect.MYSQL);

In the preceding sample


I supply the JDBC connection object (how I obtained the connection isn’t important for now).
And I supply a dialect from the SQLDialect enum to pass to the DSLContext.
According to the manufacturer, DSLContext isn’t always guaranteed to be thread safe – it is a context
object after all. However, if you personally take sensible precautions, you could enjoy thread safety with this
class. Having provided DSLContext with a valid JDBC connection, you can now get into the nitty-gritty of
Create, Read, Update, and Delete (CRUD). But first, a word from our sponsors…

Your SQL Dialect and You


While it’s not mandatory to set a SQL dialect on your DSLContext, it’s ideal you do. See, RDBMSes have
many different quirks as I’ve already covered. Some of them are glaring and easily detectable. Other more
trivial ones can trip you up unexpectedly. Take my choice of MySQL database, for example:
Identifier Style: You might already be aware that different databases use different quote styles for
identifiers. Because of this, standard SQL will have

select "e"."first_name", "e"."last_name" from "employees" "e"

but MySQL has4


select `e`.`first_name`, `e`.`last_name` from `employees` `e`
Backticks, instead of double quotes. This isn’t to say that you’ll be denied a lot of functionality without
specifying a dialect. Au contraire, jOOQ will routinely go out of its way to emulate features that are supported
natively by one or two databases but not by others, for example:
Returning Keys: A SQL INSERT... RETURNING in PostgreSQL will return with the generated keys of
the rows that have been inserted, and it’s immediately available because of the insert operation. This is
provided for by the SQL standard but isn’t uniformly supported by databases. Among those that do, the
implementation details vary. jOOQ can emulate this feature for you, regardless of the kind of database
you’re using. Fair warning here: depending on the kind of support your database has for it, jOOQ may be
forced to silently initiate a second SELECT trip to the database to retrieve the generated keys.
Dummy Tables: Different SQL databases allow you to select from dummy tables in different ways. Oracle
has the famous DUAL table, for example. Sometimes, you just want to run some functions, but then your
RDBMS requires you to specify a FROM clause – without offering a dummy table. jOOQ supports select
statements without from clauses so you can do whatever sorcery you like, with or without a dummy table.
If you don’t specify any dialect, you’ll get the default SQLDialect.DEFAULT and then via con Dios!5

Caution For your own peace of mind, go ahead and configure the
org.jooq.conf.Settings.backslashEscaping property on your Settings object. MySQL and
some versions of PostgreSQL support non-standard escape characters that can cause you a lot of grief
when you least expect it. This property lets jOOQ properly handle this “feature” from MySQL.

And that has been the word from our sponsors!

Thank you for reading!


Okay, let’s now get into…

Tools of CRUD in jOOQ


jOOQ offers a lot of fine-grained control of the entirety of a SQL statement – really, an insane amount of
control at your fingertips. Starting from a pretty high level, I’m going to go over some of the key components
that you’re going to need to get familiar with if you’re going to CRUD with jOOQ:
1. org.jooq.Query
This is the fundamental unit of a SQL query in jOOQ-land. It extends org.jooq.Statement along
with the jOOQ representations of other executable database units of work like stored procedures and
functions. You can use it to execute
Plaintext SQL that you pass in as an argument
Strongly typed SQL fragments constructed using the jOOQ API
It can help you convert a manually derived plaintext SQL to a jOOQ DSL-typed SQL object and vice versa.
It’s the quintessential representation of a SQL query; use it to execute SQL statements when you don’t need a
return value from the operation (like Data Manipulation Language operations).
2. org.jooq.ResultQuery
This class is basically org.jooq.Query, but you can obtain return values from it, like query results.
Some notable qualities of this class:
It’s efficient in that it doesn’t need an active database connection to provide access to its results – once
the query has been successfully executed, the connection can be discharged, and you can interrogate
your instance of this class for all the query results.6 This is useful when you are resource conscious
and want to protect against long-running transactions. Compare this feature to detached hibernate
entities.
It provides typed or untyped result fetching, comparable to what you get with the Spring
JdbcTemplate.
It maps to custom Plain Old Java Objects (POJOs).
It supports lazy fetching of query results using an underlying database cursor. If you go this route, be
mindful that it depends on maintaining the live database connection.
It supports reactive programming.
It supports streams via the java.util.stream.Stream interface.

All told, it provides a very flexible interface for wrangling query results. It’s as powerful as anything
you’ll get with Hibernate or JPA, with much less verbosity than what JDBC would put you through for the
same outcomes.
3. org.jooq.QueryPart
On its own, not too powerful. But it’s the parent type of a large suite of classes that help you construct
complex queries dynamically. Compare this class to the CriteriaBuilder in JPA or the
Specification from Spring Data JPA. To be clear, this API is exorbitantly richer than either of what
JPA or Spring Data provide. Pretty much every fragment of the SQL standard specification can be
represented as variant of org.jooq.QueryPart, for example:
Field to represent a field that can be used anywhere, in any kind of SQL statement
Condition to represent predicates like WHERE, HAVING
SQL to represent a whole SQL statement or fragment
Table to represent a whole table, wherever a table is needed in your query
Row to represent tuples (or in layman’s terms, something like a row of a table)
Field to represent…yes, a column
Constraint to represent a database constraint, as part of a DDL operation
Schema to represent the schema part of any SQL query

This is a small sampling of the level of granularity that QueryPart can get to. Heck, there are even more
specialized versions of each of these that offer specific advantages. If you’ve ever dreamed of being able to
support a powerful dynamic filter as part of a search function, but without concatenating strings of ugly
plaintext SQL all over the place, this is where you want to be.
You get powerful and reusable components to construct any kind of SQL use case you can dream of.
When you use jOOQ’s code generation feature, the artifacts that are generated inherit from this family as
well. Incredibly powerful stuff.
4. org.jooq.Record
This is the parent class for representations of a row of data from a table. This is in addition to jOOQ’s
capability to work with your custom POJOs and Data Transfer Object (DTOs). You get the following
specializations of this class, among others:
org.jooq.UpdatableRecord
Compare this to a hibernate entity: it’s a live object that remains bound to the underlying database
row for its lifetime. This way, you can modify the refresh, modify, or delete an instance of
UpdatableRecord, and it can reflect the change in the underlying table.
When you use jOOQ’s generated artifacts, you’ll get classes that extend this one by default. This
applies only to tables with primary keys – without primary keys, you’ll get a different generated
artifact. Additionally, you’ll be able to navigate to related entities of an updatable record using its
foreign key references. Just like JPA! But better! UpdatableRecords isn’t cached, so you can be
guaranteed you’re always working with up-to-date, live data. It’s also easier on RAM.
org.jooq.TableRecord
This is what you get instead of an UpdatableRecord when the underlying table doesn’t use a
primary key. So, you won’t be able to refresh or update parts of these records; you’ll still be able to
insert rows with this class, however.
org.jooq.RecordMapper
Use this class for finer-grained control over the translation of your query results. Compare this to
Spring’s RowMapper class.

5. org.jooq.Result
This is a container class to hold query results. In practice, your Record objects or lists of Record
objects will be wrapped by an instance of Result. It’s a Collection, Iterable, List, and
Serializable – so you can do a lot with it (functional, reactive, and JDK Stream programming). It’s
interoperable with JDBC’s ResultSet as well. It has the added advantage that it doesn’t hang on to the
open database connection like the ResultSet.

Do you feel the power?


Do you?
I hope so because we’re about to use this power for…

Select Statements
Let’s say hello to our old friend, DSLContext:

DSLContext context = DSL.using(connection,SQLDialect.MYSQL); //hullo!

For starters, we need to be able to run a vanilla SQL query. Here’s what that looks like. Given a custom
CompleteVehicleRecord POJO that I manually created:

public class CompleteVehicleRecord {


Long id;
String brand;
String model;
String trim;
BigDecimal price;
String color;
//getters, setters, toString and hashCode;
}

This class encapsulates an individual vehicle for sale in the database. I’m interested in selecting all
available vehicles in the database. In SQL terms, it would look something like this:

SELECT * FROM edens_car.complete_car_listing;

Here’s how it looks in terms of jOOQ:

DSLContext context = DSL.using(connection,SQLDialect.MYSQL);


ResultQuery resultQuery = context.resultQuery("SELECT * FROM
edens_car.complete_car_listing"); (1)
List<CompleteVehicleRecord> allVehicles =
resultQuery.fetchInto(CompleteVehicleRecord.class); (2)
logger.info(allVehicles.toString());

Nothing fancy, just your vanilla select statement.7 Here:


1. I pass in my plaintext SQL to the DSLContext#resultQuery method to retrieve all available cars. I
choose to obtain a ResultQuery from the execution because I want to get the results from it. If this
were a query that I didn’t want results from (say, a delete or insert statement), I would have just used
the Query class instead.

2. On the ResultQuery, I call the fetchInto method to automatically map each row from the results by
Mapping each row returned into an instance of CompleteVehicleRecord
Putting all the mapped rows into a list of CompleteVehicleRecord

jOOQ is able to infer the mappings between the fields of my POJO and the columns returned in the jOOQ
select statement. As you’ve probably guessed, the names of the class variables and the columns in the SQL
query need to match. There are other ways to deliberately establish this mapping; we’ll check them out later
in the book.
Alternatively, I could use the fetchMany method so I can take more control of mapping each row:

resultQuery.fetchMany().forEach(results -> {
//container for all the results
results.forEach(record -> {
Discovering Diverse Content Through
Random Scribd Documents
meg a légy hogy zeng az ablak közt, meg hogy a fürdőkád csapja
hogy csepeg egész nap. Én nem tudom, hol ragadt Illetőnéhez.
Szóval kezdett ott ülni. Illetőné fel akarta fedezni nekem: »hallotta
már Redőt? Redő, hogy csepeg a fürdőkád?« Mondtam: ó, már
élveztem, köszönöm. De Redőnek a szája már elő volt készítve és
végigcsinálta, határozottan a szemembe nézve, azt hogy: pitty, pitty,
pitty, pitty, pitty, pitty. A nő félig lehúnyt szemmel gyönyörködött és
csóválta a fejét és suttogta: nagyszerű, nagyszerű, én meg
csüngtem a Redő szemén és gondolkoztam, hogy mit akarhat ez az
alak a nőtől. Hangutánzással csak nem lehet nőt hódítani? Különben
épúgy szítta a cigaretátt és épúgy pletykált és épúgy adott le
adatokat azokról a nőkről, akik a vörös szalonba érkeztek, meg akik
távoztak onnan, mint mások szoktak és a nő épen úgy diskurálta
vele is azt a semmit, amit mindenről diskurálnak és ami elmegy ott,
mint az idő, akár énvelem, vagy Pánczél úrral, vagy pedig csak
hallgatta Redő urat és közben nevetgetett és nézett át a keményen
felatillázott huszárok kék gruppjához, akik a sarokban az ablak
mellett foglaltak állást, rézsút zsebbeillesztett kezekkel és előkelően
németül beszéltek és kinéztek és ide is néztek a nőhöz és engedték
szépen lefelé az orrukból a füstöt, mint egy leereszkedést.
Én ezeket az átnézéseket a nőnél nem vettem tragikusan,
gondoltam, ha gondoltam, hogy szórakozott, vagy csak unatkozik,
vagy legfeljebb egy kicsit kíváncsi, hogy őtet nézik-e s hogy tetszik-e
azoknak is. Igaz, Pánczél úr már kezdett kihagyni, aminek persze
csak örülni tudtam. Mikor már háromszor egymásután nem találtam
a nő mellett Pánczél urat, sőt megláttam az utcai oldalon, hogy ott ül
vagy hat nő közt egy asztalnál, nem állottam meg, hogy meg ne
interpelláljam:
– Mondja, hát Pánczél hova lett?
A nő felhúzta a vállát és csodálkozni kezdett:
– Mit tudom én! Mi közöm van nekem Pánczélhoz?
Hirtelen olyan bátor akartam lenni, mint egy gyerek és követelve
kérdezni, hogy csakugyan, mondja meg nekem, világosítson fel,
hogy mi köze, vagy mi köze volt Pánczélhoz? Az isten áldja meg,
mondja, hadd lássam az életet, mi az tényleg, hogy sétál és összeül
egy ilyen Pánczél úrral egy asszony, hogy mutatja magát vele,
beszélget vele, barátkozik vagy mi. Mit jelent ez? Mennyit, mit
merjek e mögött gondolni? Hogy van ez? Hogy megy ez maguk közt,
mondja! Szerette?
Még nem volt ott más és négyszemközt érezhettem magam a
nővel. Még se mertem semmi ilyen őszintét kérdezni. Azt hiszem,
dadogni kezdtem:
– Csak, csak kíváncsi vagyok. Mégis, olyan régen látni magát
Pánczéllal.
– Hát aztán. Ismerem.
– És egyszerre elmarad. Megharagudott rá valamiért?
– Miért?
– Én nem tudom. Hisz azért kérdeztem, mert nem tudok semmit.
A nő a teáját öntötte ki, arra figyelt, úgy felelt, könnyen:
– Egyszerűen unom ezt a bácsit. Nem hallott még ilyet? Unom.
Adja azt a süteményt, legyen szíves.
Odatoltam az üvegtálat a süteményekkel és figyeltem, hogy
babrál benne, mintha az érdekelne. S rátettem a szemem egy
pusszerlire s megkérdeztem:
– Úgy szeretnék valamit tudni. Megmondja nekem? Mondja, az
ura nem volt féltékeny Pánczélra?
A nő ideges lett:
– Nézze, hagyjon békét.
Én zavarba jöttem:
– De kérem! Talán ne is jöjjek többet ide?
– Miért ne. Sőt.
Ettől a sőttől megint hódító Robur lettem és feladtam az egész
lelkemet. A nő még belekente a kicsavart citromot a csészébe s
elnevette magát:
– Az uram különben jól van nevelve. Nagyon jól vagyok férjnél,
hál istennek! – Felfordította a citrommal a kezét és a középujjának a
kis könyökével kopogtatott az asztal szélén. Épen befutott
Feltünésiné Mindignével és Pörgettyűnével, persze az egész Pánczélt
abbahagytam. Azt hiszem, örültem, hogy nem tudtam megtudni
semmit se. Redő Oszin kívül Sréth is megjelent aznap, úgy
emlékszem, őrült zaj volt az asztalnál és én hamar elszaladtam.
Mit regélhetek erről a télről neked? Kérlek:
Politika.
Semmi politikám nem volt a nő körül. Az volt a politikám, hogy a
fülem mindig a szívemen volt. Hallgatóztam, mikor egy kis csend
volt. Egy harangjáték mikor fog megindulni benne, a nő hangjával és
egy olyan gyönyörű nagy örömmel, amilyennek még nem vagyok
bemutatva vagy egy olyan csuda fájdalommal, nem tudom, nem
tudtam, barátom, öröm vagy fájdalom-e a szerelem. Minden nap
valami olyant képzeltem, hogy másnap meggyulladok mint egy
hasáb fa vagy mi s úgy fogok lángokban a nőhöz elszaladni! Egyszer
álmodtam vele, kérlek. Azt álmodtam, hogy megyünk, megyünk egy
szánon ketten egy fehér földön Lengyelországban vagy hol. Messzire
rózsaszín kastélyok látszottak behavazva s a szán előtt három paripa
vágtatott valami bűbájos édes zörgőkkel és mintha kékek lettek
volna azok a lovak s oly tűzvörös sörényük volt, mint a nőknek a
vörös haja s a kocsis állott elől a szánon mint egy fejedelem és a
nőnek a mellemen volt elbujva a feje s én öleltem a derekát és ő
zokogott, nem tudom mért, talán a boldogságtól és az olyan volt,
mintha dalolt volna valamit. Nekem meg majd kiszakadt a szívem,
olyan jó volt nekem itt belül és a fejem a haján volt és mindig
megcsókoltam a haját és mindig azt mondtam: drága, drága, drága
s mindig jobban húztam, hogy drááá-ga! s úgy volt, ahányszor ezt
kimondtam, mintha drágakövek hullanának a szemem előtt, de
mindig más: rubint, meg zafir, meg smaragd meg tűzopál, meg
gyöngy, de olyan színű gyöngyök jöttek, mint amilyen sárgaságok
meg kékségek, meg rózsaszínek csak a felhők közt vannak
alkonyatkor. Érdekes, hogy meleg volt, pedig végig hó volt, ahol
futott a szán velünk s valami hallatlan halk zengés volt köröskörül, az
isten tudja mitől, olyan, mint mikor az embernek a füle kezd
csengeni s én mint egy bolond ugráltam fel a szánon és néztem
előre, talán sietni akartam valahova, pedig hogy repült az a szán! A
nő meg mindig húzott lefele, elkezdtem vele dulakodni, mire
sikoltozott és kiabált, hogy: kikaparom a szemét és megmondom a
főnök úrnak! A szán állott velünk és néztem a nő arcát. Nem Illetőné
volt, hanem az a szalmahajú kaszírnő a Koronából. Hallottál már
ilyen butaságot!
Napihírek.
Kérlek, este hatig a bankban időztem. Vacsorálni rendesen a
Kerületi Körbe mentem, aztán ott bakkoztam éjjel félkettőig,
félháromig, négyig, esetleg ötig. Az alvást úgy hoztam be, hogy egy
jó negyedórát rendszeresen késtem a bankból. Süteményt a
kávéházban nem ettem a kávéhoz, mert úgy tovább tart a reggeli. A
bankban sikerült egy félórát mindennap úgy könyökölni, hogy a
tenyerem alatt be lehetett a szemem húnyva. A Dréherben ebéd
után míg a fizető jött, szintén aludtam öt percet. Ha nagyon lusta
nem voltam, haza is mentem a Pesti Otthonba a szobámba egy órát
expressz ágyban aludni s mikor volt pénzem, hogy konflison menjek
be délután a bankba, a konflisban is aludtam nyolc usque nyolc és
fél percet, ha meg gyalog mentem be, rendesen megállottam még a
Fürdő-utca sarkán a hirdetőoszlop előtt, mintha végigolvasnám egy
színlapon a szereplőket, s ott állva is aludtam két percet, körülbelül
míg végig lehet olvasni mondjuk az Ember tragédiája személyeit. A
plakátalvást úgy fedeztem fel, hogy egyszer így tényleg el akartam
olvasni, kik játszanak az Ember tragédiájában, de Lucifernél
elaludtam. A telefonfülkében is aludtam mindig a fülemen a
hallgatóval, másfél percig, míg a központ nem jelentkezett. A
borbélynál délben míg vártam és míg szappanoztak, természetesen
én is aludtam mint más rendes ember. A baccarat-asztalnál míg a
téteket kifizették, ott is aludtam hirtelen egy harminc másodpercet.
Evvel azt hiszem egyedül állok vagyis ülök a bakkozók
társadalmában. Különben már régebben feltettem magamban, hogy
ha lesz egy finom nőm, nem fogok többet kártyázni.
A nő karácsonykor felment a Tátrába két hétre. Fel akartam
utána menni, legalább karácsonyra, hogy ott inkább jöhet majd
valami, egy szép nagy csók a néma havas fenyvesekben, egy tiszta
séta kettesben, eltévedünk, egy nagyon nagy meleg hangulat és egy
vallomás… kérlek leadtam az egész kis pénzemet akkor egy nappal
karácsony előtt. Egy vas nélkül sétáltam haza reggel. Különben az
egy rémes éjszaka volt, minden koporsóból három vagy négy coupja
volt a pointeurnek, a többi a banké volt. A bankárok elmentek és az
egész Kör ott ült a teremben leégve s vörös szemekkel merengve,
hogy mit vegyenek másnap estére a gyerekeknek. A nő különben
küldött egy anzikszot a Tátrából. Csak az volt rajta: nagyszerűen
mulatunk! Mindigné is alá volt írva. Sréth is alá volt írva.
Szinház, Zene, Szórakozóhelyek.
Elmentem a prömierekre, pedig nem izgattak a darabok. Illetőnét
néztem a prömieren. Mert ő mindig ott volt. A szerzőnek meg
Illetőnének ott kellett lenni a prömieren. Pardon, hát Mindignének
meg Feltünésinének! Kezdtem csudálkozni, hogy őróluk másnap
semmi sincs a tárcákban a kritikákban. Te nézted már, hogy tapsol
Feltünésiné ott az előkelően feszülő Mindigné mellett az elsőemeleti
páholyban? Hogy hajol ki abból a veszélyes páholyból, amely alatt
nincs háló s hogy hogy néz körül bólingatva, mintha mindenfelől
üdvözölnék, hogy biztatja az egész színházat, hogy lehet tapsolni,
mert ő is tapsol s hogy milyen előre nyújtja a két karját a tapssal s
hogy jár a feje s hogy ragyog és hogy integet annak a szerzőnek:
nagyon jól van, nagyon jól van, mintha csak őhozzá nézne fel az a
szerző, mikor ott megáll a lábai előtt a kínzó villanylámpákkal, hogy
vajjon Feltünésinének megfelel-e a darab s szimpátiával fogadja-e az
ő megjelenését? Isten bizony az ember úgy megsajnálhatja azt a
szerzőt, akinek bizonyosan valami remek ábrándja lehetett valamikor
arról, hogy majd prömierje is lesz! És az ember így körülnéz a
színházban és látja, hogy tényleg az a legszebb, amit itt kaphat az a
szerző, ez hogy Feltünésiné ilyen kegyesen és bizalmasan tapsol
neki. Nekem barátom olyan fádaknak és oly batyubálízűeknek
tetszettek, azaz nem tetszettek ezek a budapesti prömierek. Mindig
azt a dísztársaságot pillantottam meg köröskörül a páholyokban,
mint egy ringlispilt, ahol megint azok a kipingált hattyuk és
aranydisznók jönnek elő s azt a prózai világot a földszinten, akik
mintha elfáradtak volna az utcán s épen csak bejöttek volna leülni
abba a zsöllyébe s felrakni egyik lábukat a másikra s a cipőjüket
leporolni. Azok a sárga meg vörös körúti férfiruhák s azok az
illúziótlan fejek a ruhák fölött! Egy-egy plastron szinte kísértetiesen
tűnt fel az első vagy a második sorban! Én barátom ezelőtt
akármikor mentem el a színházba, felvettem a szmokingot és csak
akkor színház előtt mentem a borbélyhoz és a hajamat huszonötször
átfésültem és a masnit a nyakamon is legalább tízszer kötöttem
meg, míg valahogy bele bírtam nyugodni. Színház! Azt az
ünnepélyességet mindenkin, amit vártam, azt az ittasságot, ami ott
az életünket leönti, azt a karban való halk zokogást vagy majális-
ujjongást és kihasadó danolást és szent ölelkezést, amit én mindig
vártam ilyenkor! Semmi, barátom! És a daraboktól mindig azt
vártam, hogy álmaimat és halálomat fogják ott kiárasztani, mint
valami oceán, ó, de mennyire nem! Csak hallgattam és figyeltem és
semmi nem szólt hozzám, hogy én mért vagyok boldogtalan és mit
gondoljak én a szerelemről és mi lesz a világon énvelem.
Mikor aztán én is prömier-publikum lettem Illetőné miatt, úgy
ültem ott, hogy van egy szép titkom: ő, s füleltem és tanulni
akartam, hogy tudjak majd stílust, taktikát, szavakat, mindent, ha
komoly lesz a nővel a dolog! És nem tudtam ott magamban egy
udvarlót kiképezni, egyáltalán nem! Viszont néztem fel a nőhöz a
páholyba egész felvonások alatt, egy kicsit összehúztam a szemem,
hogy csak őt lássam külön és messzebb, mint ahol van és még
szebbnek, mint amilyen szép, ünnepélyesebbnek, grófnőnek!
Sokszor gyönyörűen tudott ott mozdulatlan maradni egy kicsit
eltartott fejjel és a keble olyan fehér volt, mint a kréta a sötét
derékban és egy gyémánt ék úgy hunyorgott a nyakában, mint
valami csillagzat. Úgy volt, mintha diktáltam volna magamnak: te,
prömieren vagy, egy asszonyt nézel ott a páholyban, aki a tied lehet,
fiatal vagy, itt az élet, ez az, te hisz ez nagyszerű, ez valami
gyönyörű, te, te! A nő közben kérlek diskurálni kezdett ott
Pörgettyűnével meg Pörgettyűvel meg Illetőhöz is szólogatott meg
Redő Oszihoz is hátrahajolt, mert Redő Oszi ott lovagolt leghátul a
páholyban és hogy lásson, egész előre volt a feje buktatva s a
kopaszság szinte kacagott a fején. Undorodtam és csodálkoztam:
hogy mer egy ilyen kis kopasz egy egy nőre rá is nézni!
Észrevettem, hogy a szomszéd páholyból átpisszegnek az ő
páholyukba, mert néha már nagyon éltek ott! Akkor megmeredtek
mind. Illetőné az ő kis aranyozott gukkerjét felvette s
körülgukkerezett a homályban az egész nézőtéren. Aztán meg hogy
hátraáll a tükörhöz és ott veregeti a haját és pedri a szemöldökét.
Meg hogy ül és a reticulejében babrál és a festékes stifttel bekeni
tükörből az ajkát és zsebkendőt használ az orrához. Az ilyen
pillanatok kérlek olyan kínt csináltak bennem, én nem tudom miért,
ilyenkor mindig inkább odanéztem a színpadra vagy elkezdtem
olvasni a Magyar Színpadot. Szünetben esetleg felmehettem volna
vizitelni hozzá, egyszer mikor felköszöntem neki, intett is a
gukkerjével, hogy jöjjek fel, de részint irtóztam Pörgettyűékkel ott
együtt zajongani, részint Redő Oszival mint vetélytárssal vagy mivel
nem volt gusztusom a páholyban együtt futni s még volt egy
problémám azonkívül, az hogy Illetőt nem ismertem személyesen és
kerülni akartam, hogy bemutatkozzunk. Úgy éreztem, hogy egész
fölösleges a férjjel megismerkedni. Minek nekem a férje? Ha
ismerem ezt az őszes fejű, cvikkeres molett embert abban az örökös
zsakettben, akkor már az ügy nagyon enged a romantikájából! Tudni
se szerettem arról, hogy Illető a világon van. Viszont fájt azt a
búcsújárást látni Illetőnéhez a páholyba s szépen kimentem a kapu
elé elszíni egy fél cigarettát és egy kicsit fázni s nézni a szép csukott
fiakkereket s gondolni, hogy milyen forró szerelemmel suhanhatnak
bennük párok és párok, akik nem kíváncsiak a második felvonásra, a
harmadikra se, se semmire ezen a világon, csak egymásra.
Aztán kérlek, voltam azon a télen három koncerten a nő miatt,
mert jelezte hogy el fog menni. Feinhalsnál voltam a Vigadóban meg
a Filharmonikusoknál, mikor a Csajkovszki Pathétique-jét adták elő,
meg egyszer a Royal termében egy privátnak a dalestélyén, akiért
Illetőné meg Feltünésiné mindenkit fellázítottak, azt hiszem
Feltünésinének a sógornője volt, aztán Illetőné volt az, aki nem is
nézett oda a dobogóra, csak emelte folyton a fejét köröskörül, hogy
ki van ott és ki nincs ott. Legalább engem nézne! Észrevett engem is
és rezegtette a fejét és kacsintott a dobogó felé, hogy úgy-e milyen
szép! de aztán tovább kapta a szemét és féltékenyen kezdett egy
szép nőt gusztálni. Én se tudok zenét, de a privátnak a dalestélyén
legalább a zongorakíséretből tudtam élvezni Schumannt, a
Vigadóban meg majd elpityeredtem a Pathétique utolsó tételénél,
olyan fájdalmas és olyan szép volt az, de a nő ott is toaletteket és
frizurákat vizsgált a terem felé fordulva, onnan a legdrágább helyről,
a zenekar elől. Én a nőért mentem el oda s az volt a sejtelmem,
hogy a zene felszakítja majd bennem az óriási szenvedélyt a nő
iránt. De akkor olyasmit éreztem, hogy inkább elválaszt tőle a zene,
mint hogy összekössön vele. Még hozzá Redő Oszi ott a háta
mögött, még az kellett nekem. Hogy kínlódtam ott! Soha egyedül ezt
a nőt nem tudom látni, egyedül, mint egy arany rámában! Ha
behúnytam a szemem és rá gondoltam, a barátnői, meg Redő Oszi,
meg Pánczél úr, meg mind a többi pofák ott ugráltak az ő arca körül
s beleröhögtek a szivembe!
Jaj te, fáradt vagyok. Kérlek, hogy hű maradjak a tényekhez, hát
arról is beszámolok előtted, hogy ebben az érzékeny állapotomban
azért egész jól tudtam mulatni, mikor fiukkal elmentem itt-ott
orfeumba, meg a Foliesba a kis Rottot élvezni vagy a moziba. Akkor
még azokat az őrült párisi humorosokat adták a moziban, amikben
az egész utca kergeti mindig Max Lindert, meg azokat az exotikus
felvételeket. India, Japán, a cambodgei király udvara, Tahiti szigete,
meg tenger és tenger meg cow-boy históriák viharos lovaglásokkal a
vad erdőkön át, hogy szerettem én az ilyen képeket! Volt hogy
magamban mentem el este valamelyik moziba és akkor ott a
sötétben úgy elképzelődtem, mint egy hülye, minden vízi felvételen,
ahol hajó indult vagy ha csónakáztak a képen szerelmesek, úgy
beugrottam minden nyavalyás hangulatnak, még az az ordináré
zongorálás is le tudott a lábamról venni, oh, így kéne lenni a nővel
együtt, így egy csónakban elfeledkezni a napos folyón vagy így a
tengeri hajón megismerkedni s a fedélzeten így a korláton
könyökölni egymás mellett és nézni a nőt, amint a lekötött
sapkájáról a fátyol repked hátra s uszkál össze-vissza a feje körül és
a nő néz a tengerre előre s a hajó megy és mi megyünk rajta nem
látni hova, a végtelenbe. Mit lehetne ott beszélni! Mily szépet
beszélhet ott az a moziszinész, akinek ugrál a szája, hisz mindent
szabad ott mondani! Erővel a magam arcát akartam ott látni a képen
a moziszinész tengerész-sapkája alatt, a nő idegen arcának a helyére
meg Illetőné arcát akartam odaszuggerálni persze! És közben mintha
nehéz ólmot öntöttek volna belém, olyan nehéz lett a mellem. És
aztán egy kocsin tűntek fel így ketten a képen. Egy országúton
nyargalt elő egy kétlovas kocsi velük fák közt, mintha egyenesen a
mozipublikumba rohannának bele a mindig jobban látszott az arcuk,
ahogy közeledtek és a vászon sarkában elkanyarodott a kocsi velük
hirtelen és még látszott, hogy a férfi összecsókolózik a nővel és
utána a nő mosolyogva les a publikum felé, mielőtt eltűnnek. Kérlek,
egy nehezet nyeltem és egyszer csak egy melegség jön a gégémbe s
a szemem mögött is ilyen meleg lett és elhallgathatnám, mert nem
látott senki, hisz sötét volt, de hát tény barátom, nem lehet rajta
változtatni: egy könny kicsúszott ott a szememből. Azaz kettő, mert
mind a két szemem részt vett ebben a mozgalomban. Sőt ez se lehet
pontos, hogy két könnycseppet prezentált a szemem, azt hiszem
három-négy könnycsepp jön össze olyankor az ember szeme alatt,
mikor azt mondja az ember: egy könnyet ejtettem. Meglehetős
dagadt kis langy vízmennyiség az, ami megáll az ember szeme alatt
és úgy ródlizik aztán le az arcon végig. De ezt nem vártam be,
barátom, azon nyomban felvettem mint egy itatóssal az öklömmel
onnan. Minden pillanatban megállhat a kép a vásznon és akkor
világos van a moziban.
Ez például foglalkoztatott akkor. Otthagytam rögtön a mozit és az
utcán megállottam átvenni ezt a dolgot. Ez valami: könnyeztem a
nőért! Olyan hangulatom jött, mintha vőlegény volnék. Jaj, te szép
asszony, szeretni foglak! Vagy már szeretlek is talán! Viszont olyan
közönségesen láttam a villamost, a rendőrt, az embereket, a
cégtáblákat, mindent az utcán és a nőre gondoltam és semmi
lobbanást nem észleltem magamban. Hát hogy lehet, hogy nekem
az imént könny jött a szemembe? Mi az a könny? Egy gyanu lepett
meg, az, hogy azért a kétlovas kocsiért pottyant ki a könnyem. Az
országút szépségéért. A csókért egyáltalán. Az idegenekért, akik
élnek messze s akikkel sohase fogok beszélgetni. S a tengerért lett
oly nehéz a szivem odabent. Azért a tiszta széles és egyenes vizért
amelynek nincs foglalkozása s ilyen buta ifjúsága itt Pesten s nincs
ilyen forró és tanácstalan furcsa hajas feje, egy kék és ragyogó, vad,
örökös sorsa van! Talán az a nagy só, ami a tengervizben van, talán
csak az vonzotta elő ezt a pár csepp sózott vizet a szememből. A
tenger csinálta tán ezt a kunsztot, a tenger talán, még a filmen is
ilyen ereje van a tengernek! Ott ment el a járdán doktor Lakk és
köszönt nekem, elkésve vettem észre, mulyán kalapot emeltem
utána s hadartam: vanszerencsém. Azt hiszem megundorodnak az
embertől, mikor így hiába köszönnek neki mint doktor Lakk köszönt
ott nekem.
Igaz, elég gyakran felmentem a Casinóba is a Kerületi Körből
éjszaka ha hamarabb vége lett a baccaratnak. Rendesen összeállott
egy kis társaság ilyen felületes barátokból, akik a baccaratszobában
melegedtek össze vagy mondjuk összelangyultak s ha nagy nyerés
volt, együtt elmennek örülni valami tánchelyre s ha nagy vesztés
volt, akkor meg elmennek együtt búsulni s felejteni. Hisz te is eljöttél
velünk akkortájban egyszer vagy kétszer, most jut eszembe. Akkor
még bakkoztál te is. Emlékszel milyen szórakozott voltam a bakknál?
Emlékszel, mikor egyszer megfogtál és az ablakba húztál és azt
kérdezted: öregem, tart még a dolog a nővel? – úgy néztem rád,
mintha bicskát szúrtál volna belém. És hebegtem: hogy érted ezt? S
te nevettél és oly könnyen, mintha azt kérdezted volna hány óra,
úgy kérdezted: nem ugrottál még el tőle? Én iszonyú kedélytelen
arcot csináltam és abban a reményben, hogy nem látszik, hogy el
vagyok pirulva, kértelek: ha barátom vagy kérlek ne érintsük ezt a
témát. Nem emlékszel már? Te mintha csudálkoztál volna s aztán
fölényesen mondtad: ugyan, nem értelek. Én erre azt mondtam:
pedig magyarul beszéltem. És szépen elsétáltam mellőled és
odamentem az asztalhoz és már kiabáltam: tíz korona annonce! S a
tablóra bámultam és mintha lázt kaptam volna, úgy tüzelt a fejem.
Nem is gondolkoztam, csak ugrált összevissza a fejemben, hogy mi
az, amit te hiszel és hogy hogy viselkedtem én most veled szemben,
te bántottál-e meg jobban engem vagy én téged? Te kíméletlen és
cinikus voltál, mint akármelyik ordináré alak, én meg viszont talán
meghagytalak most abban a feltevésedben, hogy Illetőnével
viszonyom van és ez egy szemtelen hazugság részemről. Átment a
fejemben, hogy csak hadd higyjed, legalább imponálok neked vele.
Tényleg, nevetséges lehet, hogy már egy fél éve mászkálok a nő
körül és semmi alapom nincs arra, hogy diszkrét legyek! Aztán egy
kis gyűlölet fújt belém irántad, hogy te milyen közönségesnek látod
azt az úri nőt! Komolyan, ha nem vagy orvos, talán nekedmentem
volna, mint egy bolond, de az, hogy orvos vagy, oly gyerekes
tiszteletet és bizalmat tartott bennem mindig teirántad. Szégyelni
kezdtem magam. Azt éreztem, hogy oda kell mennem hozzád:
Lacikám, én úgy beszéltem veled, mint egy majom. Gyere, őszinte
leszek. Menjünk be a biliárdszobába, ott nem zavarnak, gyere,
elmondom neked, hogy semmi de semmi nincs a nővel, én nem
tudom hogy kezdjem el vele, meséld el tenálad hogy volt az ilyen
komoly viszony. Beszélj, te, mondd milyen az élet! Én nem ismerem
ki magamat. Hallgasd meg a szimptomákat és mondd meg, hogy én
hogy vagyok?
De oly féltékeny voltam úgynevezett érzelmeimre s az a
féltékenység mindig húzott vissza attól, hogy valakinek egy szót is
kinyögjek! És azonkívül kérlek beleestem akkor egy bankszériába s
ott ragadtam. Kábultan harcoltam, hogy a pénzt visszahozzam. Jön
barátom a
Sport.
A nő tudniillik kijárt a nagy jégre, mikor a Vigadónál meg az
Oktogonon fenn volt a kis zászló a kék-piros táblán, hogy a jégpálya
ma nyitva. Én diákkorom óta nem csatoltam fel a korcsolyát. Most is
lusta lettem volna korcsolyázni, nem gondoltam én korcsolyázásra,
csak nő és nő kellett már nekem, nő barátom! Ellenben mikor a
banknak vége volt, rohantam a pályára mint vendég, azaz a büffébe
Illetőnét látni. Hallatlan, hogy hatott rám, mikor a büffébe
belépkedett a korcsolyával a lábán avval a kicsipett arcával, mint a
pünkösdi rózsa s oly nagyokat és édeseket lélekzett nevetve a friss
örömtől, úgy hogy alig tudott szavakat adni s úgy nézett, mintha azt
akarta volna mindig mondani: szép vagyok, te, oly jó a hideg, mert
meleg az élet! Oly karcsú volt abban a kurta szoknyában és egy kis
lágy bársony kalapja volt és nem tudom, oly antiknak tetszett! És
aztán leült és evett sandwichet és leszúrta a két korcsolya sarkát a
padlóba, kissé szétvetve a lábát és: mi ujság? És: maga mért nem
csatol? És: jaj most tanulok bógnizni, ez a Sréth, nahát milyen egy
betörő ez! És: tudja, hogy ma kétszer estem? És: mondja, mit szól
ahhoz a kekk sapkához annak a ronda nőnek a fején?
És már jött be ordítva Sréth sveaterben, az a hosszú állat, a
korcsolyával még hosszabb volt és ugrált befelé valami
jambósipkával és muffal, kérlek, Redő Oszi, meg Pereczky, olyan
kosztümben, mint valami dán attasé a moziból és megint vége volt,
hogy jól érezzem magam a nő mellett. Azok ott vitték a hangot, én
meg hallgattam és hagytam a fülembe zörögni az evést és sisteregni
azt a leányrajongást köröskörül, csatolásról meg esésről, meg
hármasokról, meg nyolcasokról, meg kadettugrásról, meg
angyalkázásról. Megtettem, hogy el se köszöntem Illetőnétől,
otthagytam őket és felmentem inkább a kis hídra ott a ligetben és
onnan könyököltem bele a pályába s lestem a nőt abban az uszkáló
fekete tolongásban. Furcsa volt ez, onnan a korcsolyázást nézni.
Mint egy-egy emlék mélyről az életből, úgy jöttek a fiuk hangjai s a
kis lányok apró sikolyai s aztán az az egész mozgás odalenn az
ívlámpáktól világítva, mintha egy világ lenne holdak alatt, ni, ezek
élnek ott és ez valami idegen nekem. Ezek futnak és keringenek és
elhajolgatnak és hátráznak. És én állok és könyökölök. Olyan
szorongás és ámulat vett elő. S a zene úgy hangzott, mintha
messziről zúgna. Rendesen valami csehet játszottak, az úgy
elnyomott engemet! Hiszen ez katonazene, elmulás és búcsú!
Teneked nem a halált hozza mindig a katonazene?
És egyszer csak meglátom így a nőt a közt az álomféle nép közt.
A híd alá futottak hárman összekarolva s bógnizva jobb és balfelé,
Sréthtel meg Redő Oszival. Kinyitottam a szám, be akartam kapni a
nőt a lelkembe! Lehajoltam, már a híd alatt voltak, átszaladtam a
másik oldalra, néztem le ott is, kerestem, elveszett. Egy női nevetést
hallottam és azt képzeltem, hogy ő volt. Megint visszajöttem erre az
oldalra. Mindig csak így egy-egy pillanatra tudtam feledezni a nőt és
mindig karolva vagy ezekkel vagy Pereczkyvel meg még egy alakkal,
akit nem is láttam még soha!
Egyszer megvártam ott és hazakísértem. Ott laktak az Andrássy-
úton. Véletlenül egyedül ment el a jégről. Azt a kis utat is a
földalattin akarta megtenni. Könyörögtem neki, hogy menjünk
gyalog. Olyon finom hó volt a fasorban.
A nő sietett.
– Kérem Margó menjünk lassan. Olyan szép itt sétálni.
– Nekem még el kell mennem vacsora előtt.
– Hova?
Egy kis késéssel mondta:
– Hova, egy kis kommissióm van.
S rögtön lelkesedve Rémesnéről kezdett beszélni nekem, láttam-e
ma a jégen, hogy nem a legnagyobb szemtelenség a jégre kijönni
ettől a nőtől, mikor az egész Pest röhög rajta? Jelzem, én nem
hallottam az egész Pestet röhögni. Hogy Rémesnét a friss férje
rajtacsípte a régi férjével és nagy verekedés volt és a friss férje már
válik és a régi férje nem akarja megint elvenni, mert neki nagyon
megfelel mint barátnő.
Én az ilyen históriákat abban a reményben hallgattam, hogy
rögtön elfelejtek minden szót belőle. Erőlködtem, hogy ne halljam
mit mond Illetőné, csak az arcát néztem a nőnek a barna fátyol alatt.
Azt az élő kármin száját és azt a finom, finom ködöcskét, amit a nő
mindig előlehellt a hidegben beszélve. Mintha valami drága vékony
cigarettet szívna, amit nem látni. S néztem előre a fasorban és úgy
képzeltem, hogy ott állok szembe messze s látom magam a nővel így
sétálni télen. Beleszóltam a nő meséjébe.
– Margó. Milyen szép maga ma!
– Áh hagyjon. Rosszul nézek ki. Egész éjjel nem bírtam elaludni.
– Jaaj. Mi baja volt?
– Semmi. Egy undok fejgörcs. És ilyenkor hiába veszek veronált.
– Mért fájt a feje? Én azt hittem egy szép nőnek sose fáj a feje.
Elnevette magát.
– De ugye most jól érzi magát – mondom.
– Igen, mára már elmult hál istennek.
Ilyen társalgással értünk a kapujok elé. Alig akartam elengedni
azt a megmelegedett feszes keztyűt.
Húzta a kezét:
– Na pá, csak felszaladok, mondom még el kell rohannom
vacsora előtt.
– Megvárom. Elkísérem.
– Nem, nem, most nem, majd máskor.
Beállottam a kapu alá végigélvezni hogy csenget, kinyitják a
liftet, felvinnyog a lift, megáll és zördül az ajtaja s megint nyávog a
lift le a földszintig. Hova fog a nő elrohanni? S mitől fájhatott a feje?
S veronállal alszik? S miért nem mondja meg, hova akar elrohanni?
Milyen regénytelen ez az egész és mégis milyen rejtélyes! És én nem
vagyok beavatva, hogy hogy van ez mind, semmi közöm mindehhez,
istenem!
De majdnem mindig magamban indultam be a ligetből, mikor ott
a hídról néztem a pályát. Te, egyszer a zene azt zúgta utánam, hogy
Ritka asszony az én babám,
Ritka egy úri nő…

Ez a kuplé ment akkor Pesten tudod és a kabaréban mikor


énekelte Ferenczy s rikkantottak ott vele, mikor a refrain jött, hogy:
rrrit! Ferenczynek az orra olyan jókedvvel nézett a publikumba, én
meg a szemében nyomoztam Ferenczynek, hogy tényleg olyan víg
hangulata van-e s csak annak örül, hogy népszerű vagy van
csakugyan a függönyön túl valahol egy ilyen ritka úri nő babája s
arra gondol most? Ha felkiabáltam volna neki: mondja mester, ez
tény és való? Én nem tudtam kivenni, mit mond a Ferenczy szeme.
Láttam már kérlek színészszemeket a színpadon, hogy ragyognak
aztán hogy oly közömbösen vagy erőltetve néznek üresen és láttam
direkt bánatos szemeket, mikor a színésznek nem kell beszélni, csak
ott áll a színpadon és átnézi a publikumban az aznapi fejeket.
Mondom a jégen azt rotyogtatták egyszer és én azt a szívtelen
katonazenét vittem magamban egy darabig és a szöveg csak úgy
magától dalolta bennem hozzá:

Rritka egy úri nő,


Rritka szerencse szállt reám,
Rritka finom és előkelő…

úgyhogy a szám is elkezdte végre s mintha rám is passzolna a


kuplé, valami közösséget vállaltam kérlek a Don Juanokkal és egy
hencegő hangulatban dudorásztam félhangon, mintha már régen
úriasszonyok szerelmében gázolnék és közbe végigsikankóztam egy
kis hosszúkás jégen, amit ott a járdán kigyalultak a talpukkal a
gyerekek a megfagyott havon. Sokszor észreveszek télen így meglett
embereket, hogy végigcsusztatják magukat ilyen kurta kis utcai
jégen járás közben. Nem állják meg! Nem épen olyan gyerekek
vagyunk, mint a gyerekek?
Aztán ahogy beértem a Köröndön túlra, ahol sűrűbben jöttek-
mentek a népek és a kirakatfényben úgy elsiettek ketten-ketten, férfi
nővel és pláne hogy magánzó hópelyhek ereszkedtek lefelé
válogatva, hogy melyik kalapra szálljanak és a csemegeboltok oly
gusztusosan duzzadtak a kirakatok mögött és folyton mentek be
felvágottat venni fiatal férfiak nőkkel vagy jöttek ki s karolva kezdtek
sietni s összedugdosták a fejüket és buzgón tárgyalták életük jó kis
dolgait és zörgős lovakkal elfutott a kocsik meg az autók mellett egy
szép lakkozott szánka s abban is asszony és férfi ült, barátom, olyan
nehéz lett ott menni nekem, mint egy túlöregnek, akinek nagy
munka már egyik lábát a másik elé rakni. Téli este kezdődik és van
mindenkinek valakije, szerelem! A cukrászdában tolakodnak a pult
előtt, kis lukácsot pakoltatnak, teasüteményt, szerelem! Az egész
város szerelem, az egész este szerelem, hó a lámpákon és a barna
házak párkányán, szardinia, kaviár, nyulak és fácánok és narancs és
datolya s rumok az üzletekben, minden csak arra van, hogy csók
támadjon belőle, hogy jó legyen otthon, jó téli est mint a piros tea!
Kicsi fehér csomagokat lógáznak spárgán a muffok mellett, otthon
kibontják majd, minden szerelem, szerelem! Kihasadt testszínű
gesztenye a Gyár-utca sarkán, süti az ujjakat, mikor kapkodják és
dobják befelé a stanicliba! A Párisi Áruház előtt déli világosságban
rohannak sűrűn az irodai lányok, fiuk furakodnak köztük, nem is
venni ki, hogy ki melyik lányhoz beszél, csak hangos a szája
mindnek! Operába szaladnak fehér selyem kendővel a hajukon kis
sorsú nők ünneplő rózsaszín reticule-t lógatva. Mily rokonszenves
mind, milyen kellemes volna akármelyik! Semmi, csak a lágy ruha s
a húzós félselyem harisnya s a szappanlehelletű édes tiszta test! Jaj
nő, nőőh! Hogy sétál elő a két combjuk a szűk szoknyában!
Hozzámdörzsölődnek a tolongásban! Belefordítom a pillantásomat
egy lány szemébe, az visszanéz hirtelen és a meglepetésben
rebbenteti a pilláit és elkapja a fejét és eltűnik. Mit gondolt! Megint
egy lánynak a szemébe nézek, az megnagyítja a szemeit amint
visszanéz. Bátor, kíváncsi, követel: nos? Mit akar? Én jövök zavarba s
én szököm meg tekintetemmel. És aztán utána fordulok és engedem
lökdösni magam és nézek utána. Jaj, egy leány! Mindegy hogy híják
és milyen egyéniség! Egy szagos kemény őszibarack! Csak ne volnék
úgynevezett intelligens úriember! Ne lennének nyügösségeim és
igényeim! Ne akadtam volna bele ebbe az Illetőnébe! Ki ez az
Illetőné, hisz én nem is ismerem! Ó ha Illetőné leány volna még és
engemet ismerne legelőször a világon! Úgy elszorult a szivem
barátom.
Hátha egy rémes tévedés és egy boldogtalan pazarlás ez, ami
mindent izgulok, érzek, képzelek Illetőné miatt! Hátha mindezt egy
lánynak kellene áldozni, ezt az ajándék kort, ezt a sóhajra s a dalra
adott drága szabad időt!
Megmondom kérlek, hogy voltam a lányokkal. A lányok alapjában
véve még prózaiabbaknak látszottak nekem. Férjfogásra láttam az
egész bandát berendezve és csak szánni tudtam őket. És ahol én
előfordultam lányok közt, mindig drezdai meg müncheni intézetekről,
angol nyelvről, német irodalomról és kabaréról és dalkrózról és
festőiskoláról kellett beszélgetni, sőt műegyetemről és boncolásról!
Azonkívül kérlek, ők cigarettákat és likőröket forszíroztak. Aztán
barátom, a dzsiggelést imádták és hülye angol dzsiggdalokat adtak
le fahangot affektálva s mindenféle falleót és oscarstrausst dúdoltak
a zongora mellett, álom és bánat nélkül.
Egyszer egy lánynak azt mondtam: hogy szeretnék lány lenni! Az
ártatlanság lehet az igazi boldogság, azt szeretném érezni! Azt
mondta: pfuj, undok, tudja, undok! Rémes lánynak lenni, nem is
képzeli!
Ezek barátom diákok. Ezek műveltek. Ezeknek fejük van. Ezeknek
programmjuk van. Ezek modernek és felvilágosultak mint egy gép!
Én nem tudom, hogy fejezzem ki, én egy májusi kertet keresek egy
leányban. Meglehet, ha türelmem van lányok közt lenni, találok
köztük egy ilyen tiszta tavaszt, amit sejtek, egy ilyen boldog
fehérséget, aki nem valami reális szerencsétől mosolyog, hanem egy
rózsaálomtól és úgy jön az ember elé, mint egy balettképben egy
megfoghatatlan fehér balerina a holdfényben bokrok közé belebeg a
szive felé nyúlva karjával. De hisz ha elébem kerül esetleg egy ilyen
ideál, azt én elveszem, nem? És ha a megnősülés eszembe jutott,
kétségbeestem barátom! Borzasztó, mondtam magamnak, hát már
ott tartok, hogy megnősülhetek?
A halál attól már csak egy állomás! Haa! elébb végigkóstolni,
mint a likőröket, a nőket, sárga- és bronzhajuakat és kreol és sápadt
szépségeket és utazni, hotelekben, egyéjszakai szerencséket átélni s
plage és Velence és boudoir és szeparé, az egész Magyar Figaró!
nagy bolondságok és kis komolyságok, egy egész ifjúság, ahogy az
ember hallja, olvassa, képzeli s aztán egy őszi este, mikor a szél úgy
fütyörész odakint, mint egy csavargó, aki valakit le fog szúrni az
éjjel, akkor barátom egy begyújtott kandalló párkányára könyökölve
s lenézve, válni szépen az ifjú évektől, emlékezni emlékekre,
leveleket szagolni, valami fonnyadt szalagot meg száraz virágot
fogdosni s egy göndörödött hajszálat kihúzni s nézni s gondolkozni
melyiké lehetett, olyan édes szomorúságban, amiben több az
édesség, mint a szomorúság.
Te hallgass ide, mik jártak az én fejemben, mikor eszembe jutott,
hogy majd én is megnősülök egyszer! Először is nem birtam
elképzelni soha, hogy az ember egy reggeltől fogva, míg csak meg
nem hal, tényleg avval az egy nővel összetartozzon. Azt hittem, én
abba feltétlen beleőrülnék! És gondoltam, a legszebb dolog, amit
tudok egy nőért, a diszkréció, az lehetetlen, a mellett a nő mellett,
akit elveszek! Épen a hitvesem mellett! Hát hogy szabad azt élő
embernek sejteni, hogy nekem micsoda összefüggésem van evvel a
nővel! És gondoltam: mondjuk, ha holnap megnősülnék, hogy
lennék holnapután egész más ember? A fiúk közé menni… rémes!
Mit mondok a barátaimnak, ha például megkérdeznek: mondd,
milyen a nászéj, milyen ez az életben? Teszem ha valaki orcátlanul
rám kacag, mikor másnap szembe jön velem, azt ott stande pityere
leszúrjam? És aztán én nem kérdezhetek már egy fiút: van szeretőd,
mondd? Hátha elkezd majd panaszkodni: senkim sincs, oly
szerencsétlen vagyok! Mit mondhatok majd annak? Hogy
vigasztaljam? Hencegjek az én boldogságommal? Ki nem állhattam
azokat, akik szólóban maradt barátaiknak jöttek dicsekedni a nővel,
meg a koszttal, a nyugalommal, mindennel. Milyen idegenséget
csinál az hirtelen a legjobb barátok közt is, hogyha az egyik
megnősül. És amellett hogy valami kis csalódást okoztak bennem az
ilyenek mindig, olyasmit, mintha ezek, akik megnősülnek, cserben
hagytak volna, amellett kérlek mindig sajnáltam is őket, hogy ők már
a világon el vannak intézve, már nem repkedhetnek mint a madarak,
ők a képzelet ezeregyéjét feladták, őnékik már normális nappal van,
valami hallatlan szép az ő életükkel nem történhet.
Mennyit fecsegek itt neked és te hogy engeded, angyal vagy,
igazán! Ugy-e egy télesti hangulatomat kezdtem ecsetelni? Igen,
menés közben az utcai mozgás közt a fejembe jött az a szó, hogy
ifjúság és oly heves szívfájást kaptam, mint ahogy a fogába áll a
fájás valakinek. Szent isten, úgy volt mintha hirtelen leestem volna
egy magas hintáról a földre. Mit ér, hogy készülődök és egy illúzióm
van, mit ér, hogy itt vagyok és alkalmas vagyok a gyönyörű életre,
mit ér az, ha csak nézek és a két karom, ha kitárom ölelni, egy
zárójel, amiben nincs benne semmi! Az ifjúság énnálam egy szép
bankjegy, amelyiknek nincs bennem aranyfedezete! Jaj, hisz a
valóság az, hogy Illetőné otthon lesz Illetővel este s holnap tán már
nem is szimpatizál majd velem. A valóság az, hogy magamban
mászkálok itt a hidegben és egy bankban vagyok egy jelentéktelen
alak és undorodom ott és nincs nagy pénzem és nincs semmi fix
örömöm a világon és a tényleges szerelmi életem olyan szökve
töltött félórákból áll, amiket csak azonnal elfelejteni szeretek, sőt
mostanában ennyiből se, semmiből, mert félek minden pechtől és
tartogatom magam Illetőnének, akinek az arca a behúnyt
szememben van, mikor lecsavarom a villanyt és átölelem a párnát,
mert úgy kívánok mindig ölelni, mikor lefekszem éjjel! Semmi! S
hátha az egész nagy ifjúság az életben csak annyi, mint egy ilyen
pár véletlen szép havas nap télen Pesten, mikor meg vannak a
színház előtt a lámpák fehérrel sapkázva s ártatlan pici fehér
rendjelek esnek az ember kabátjára s szánok iramodnak
emlékzörgéssel a kocsiúton és aztán egy reggel locspocs lesz vagy
száraz fagy és vége! Őrült vágyam volt, hogy elkezdjek rohanni
végig a járda mellett és ordítani: ifjúsáág! ifjúsááág! Szent isten, mi
lenne! Reagálnának erre ezek a lányok és asszonyok és
fiatalemberek az Andrássy-úton és a kocsisok? Azt hiszem, egy nagy
röhögés kísért volna s aztán kiabáltak volna utánam: fogják meg,
fogják meg! mint egy bolond után és még kergettek volna is »per
hecc«. Emlékszem, az Erzsébet-téren mentem át és a fáknak a
fekete karjait néztem és azok olyanok voltak nekem, mint néma
jajgatás és az égbe bámultam, istenem, mikor hó jön az égből, oly
fakó fekete mindig az ég, oly rossz színe van, oly széptelen és
részvétlen. Egy nagy keserű nosztalgiám vagy micsodám támadt ott
valami utolsó árvaság után, s gondoltam, milyen utálatos nyomorult
vagyok, hogy nem vagyok egész árva, hisz anyám van és van
lakásom és órám és névjegyem. Ha olyan árva lehetnék most, hogy
abszolúte senkim és semmim ne lenne, se egy ismerősöm, se egy
vacok, ahová letehetem a fejem, se egy krajcár a zsebemben, a
nadrágom csupa lyuk lenne s egy kóc a hajam és egy lehúzott rossz
kalappal a fejemen, zsebbenyomott öklökkel mennék itt a fák alatt,
reszkető két könyökkel, egyesegyedül, a jó isten tudja hová!
Aztán kérlek, állva maradtam egy fánál és behúnytam a szemem
és átkaroltam a fa testét. Lesimítottam a fa hátát, hogy egy nő
termetének a simogatását képzelhessem, de úgy akadozott a
tenyerem a fa kérgén lefelé, oly durván éreztem, pedig keztyű volt a
kezemen. Elhúztam magam a fától és még az is rosszul esett, hogy a
fa nem kezd mellettem jönni, hanem ott marad.
Akkor, kérlek, a februári műsorban felfedeztem azt a kis nőt,
tudod, akit az elején meséltem, hogy a ligetben egy nyári este
leültem hozzá s ott bolondoztam vele. Kérlek, elsején vagy
másodikán a Körből felmentünk a Casinóba az új műsort látni. Úgy
emlékszem, sikerült az utolsó számhoz érkezni, úgy félkettő tájban.
Két spenceres angol fiú őrjöngött ott a színpadon, dzsiggeltek
kétfelől a színpad két sarkában, mint a jégeső, közbe makacsul
mosolyogva s a színpadon egy pianino előtt egy angol baba ült a
székben és zongorázott nekik és ő is dzsiggelt a cipőivel és az ujjai is
a billentyűkön inkább dzsiggeltek mint zongoráztak. És egyszer csak
felugrott a székre s onnan taktusra a pianino tetejére s kopogott a
lábaival úgy mint a két fiú s hirtelen leugrált és az egyik fiú termett
ott a helyébe a pianinónál és zongorázott, a nagy baba meg a másik
fiúval dzsiggelt, aztán a másik fiú cserélt az első fiúval, de ez mind
taktusra ment és a dzsigg egy pillanatra sem maradt abba. Végre
már úgy lihegtek, mintha haldokolnának és egyszer csak a pianinóról
odaugrott az a fiú előre s a legsebesebb lábpergésben hopp,
felkapták mind a hárman a jobb lábukat együtt és a másik
pillanatban úgy megállottak ott, mint három rekruta. És úgy
lélegzettek, mint a mozdony szokott és a festék folyt az arcukon és
még mindig mosolyogtak. Őrült taps és bőgés a teremben. A
függönyt összerántották rájok és a terem csak tombolt! Az emberek
kalapáltak a sarkukkal és ugratták a botjukat a padlón, mintha az
egész terem megkábult volna s dzsiggelne minden. A függöny persze
rögtön kinyilt, a három angolság mosolygott és dzsiggelt ugyanazon
a helyen, mintha abba se hagyták volna. A taps és a dobogás
forradalomszerű lett, még a pincérek is álltak kétoldalt a színpad
alatt és szenvedélyesen tapsoltak, pedig az olyan számok után,
amelyeknek úgyis sikerük van, a pincéreknek nem muszáj tapsolni.
Ezt tudnod kell. Csak az olyan számok után kötelességük a
pincéreknek tapsolni, amelyek után a vendégeknek eszükbe nem jut
azt a két buta kezüket elővenni, csak néznek fel a függönyre
életuntan, a dagadt stájer nő után, aki jodlirozott nekik vagy a
gonosz fejű berlini démon után, aki elszántan leadott egy
húszstrófás német kuplét és azalatt vizsgálta a beszélgető urakat
facér szemeivel, mintha válogatná, hogy melyiket szúrja majd le
legelőször egy nagy konyhakéssel. Azt viszont tudták a pincérek,
mert tudniok kellett, hogy az ilyen számok után a személyzeteknek
ká kötelessége hátraállani a bejárathoz és onnan egy sortüzet
tapsolni a színpad felé, hogy a függöny legalább egyszer
szétnyílhasson s az a szám visszasétálhasson egy fejbólintással
fogadni azt a spontán elismerést, amivel a közönség az ő
művészetének adózott. Maga a jó Zsanti mint üzletvezető jó példával
járt elől, illetve ott hátul, csak annyiban különböztette meg magát a
személyzetektől, hogy ő háttal állott a színpadnak, úgy tapsolt. A jó
Zsanti! Neki a leglecsúszottabb számokhoz is volt egypár szíves
tapsa. Lehetetlen, hogy az ilyen angyali szolgálat örökre
jutalmazatlan maradjon. Például, kérlek, hogy Elly Rellynek, akinek
egy félperces spicctáncból állott az egész színpadi szereplése és az
alatt a félperc alatt is legalább egyszer mindig megbicsaklott a
nagyujja s Elly Relly oly keserves grimaszszal nézett a közönségre,
hogy az emberek elröhögték magukat, hogy ennek az Elly Rellynek is
tapsolt a jó Zsanti, mikor behúzták a függönyt, erre csak muszáj
majd mennyországnak lenni, hol ezt a jó Zsantinak felírják a Követel
oldalra. Igaz hogy a jó Zsanti üzletileg tapsol, igaz, de hát ő Elly
Relly után az öltözőbe a legszebb zenét küldi mégis a szívtelenül
hallgató teremből: a tapsot. És kérlek, a jó Zsanti ha nem tetszik
neki megtapsolni egy Elly Rellyt, el is küldheti Elly Rellyt a Casinóból.
Mondhatja neki: nézze nagysád, itt le van csúszva, holnap már
otthon maradhat a mamájánál nagysád. De a jó Zsanti egy Elly
Rellynek is tapsol, hiszen ezért hívják őtet úgy, hogy jó Zsanti. Csak
kell, kérlek, mégis egy jó istennek lenni, hogy a mennyországban
majd a nyakába akassza a jó Zsantinak az Aranygyapjut.
Képzelheted, hogy az angoloknak hogy tapsolt a jó Zsanti!
Ilyenkor ő publikum volt, műbarát, ilyenkor arccal volt ő is a
színpadnak fordulva s kiabált is a tapsolás mellett, hogy: brávó,
brávó! és közben ragyogott és hajlongott az ismerős vendégek elé,
akik jöttek befele a bejáratnál. Az angolok vagy háromszor csinálták
el még azt a kis hála-dzsigget, aztán nyugodtan maradt a függöny
végre. Én ott állottam meg a bejáratnál, szerettem ottmaradni egy
kicsit és onnan átnézegetni a termet. A jó Zsanti észrevett, mert
magamnak is azok közé volt szerencsém tartozni, kiket a jó Zsanti
bizalmával és barátságával tisztelt meg. Nekem is kijárt a grand
mosoly és a kéznyújtás a jó Zsantitól. És az az üdvözlés, amelyiket
csak a príma vendég kap tőle:
– Áldás békesség. Hogy állok kegyeiben?
Én nem tudom minek köszönhettem azt, hogy a jó Zsanti engem
is méltatott. Igaz hogy ha volt nálam valami pénz, nem sajnáltam
egy üveg Irroyt a székre tétetni magam mellé. De hát az, hogy az
ember pezsgőzik, az nem imponált a jó Zsantinak. Ő magában
mélyen lenézte az erőszakos pezsgőzőket és a páholyokban
monoklival feszítő gavallérokat és azokat a vidéki kövéreket és pesti
nagy lumpokat, akik a szeparéban ötszáz- meg ezerkoronás cechet
csinálnak. Neki az mind »palkó« volt, azokat ő nem tisztelte. A jó
Zsanti, aki a legleégettebb nőknek is hódolt, az urakban
megválogatta, kinek adja bizalmát és barátságát. Azt hiszem, inkább
azért lettem előtte népszerű, mert önzetlenül tudtam hallgatni őtet,
mint okos embert, mert a jó Zsanti az összes újonnan
felbársonyozott páholyokra s az újonnan felcsillározott plafondra s az
újonnan függönyözött és hátterezett színpadra nem volt olyan
büszke s az egész műsorra nem volt olyan büszke, mint arra, hogy ő
okos ember és az Alagon meg Káposztásmegyeren körbe futó
lovakhoz meg hotelberendezéshez meg étteremvezetéshez meg
egyéb ilyenekhez, a világon a legnagyobb kaliberű dolgokhoz Pesten
senki sem ért annyit, mint ő, a jó Zsanti. Azt meg kell mondanom
neked, ha véletlenül nem tudnád, hogy a jó Zsanti a turfon folyton
leégett és hogy établissement-alapításaival már hatszor tönkrement
az életben, de hát ez csak pech, kérlek. Azt a jó Zsanti is elismeri,
hogy neki pechje van.
Kérlek, ha sokáig fenn voltam a kaszinóban és úntam ott a
teremben azokat az állandó nőket nézni, sokszor hátramentem a
szeparék folyosójára, hol reggel három órára vacsorát terítettek egy
kis asztalon a jó Zsantinak meg a szép Lezsinek és odaültem inkább
e mellé a két józan és szolíd férfi mellé s néztem, milyen
gusztusosan mártogatnak a jószagú marhapaprikás levében és hozzá
szelíd pilzeni sört iszogatnak pezsgőspoharakból és hallgattam, amit
tárgyalnak ott szép komolyan favoritokról és zsokékról, meg
rheumáról és a masszírozás öröméről és egészségéről, míg ott sorba
a szeparékból cigány meg danolás meg pohártörés meg kurjongatás,
meg zongora meg ugrándozás meg röhögés meg sikolyozás
hallatszott össze-vissza, mint egy bolondokházában. A szép Lezsinek
volt kedvenc témája a rheuma meg a masszőr-tudomány, mert a
szép Lezsi, mint balettmester szenvedett a lábaival, igen, ez is oly
csodálatos volna, ha nem volna a legáltalánosabb tünet ezen a
földön, hogy épen a balettmesterek, akiknek ott kell a parketten
éjszakaszámra táncolni a nőkkel, épen ők kapnak az ifjúságban
rheumát a lábukba. Azt hiszem, erre mondják, hogy a fák nem
nőnek az égig!
Egy szóval ott maradtam a bejáratnál, nekidűltem az első kis
páholy falának és belefeledkeztem a Casino vásárjába. A társaságom
már beült egy páholyba. Nem nagyon vágytam közéjük. A színpad
elől eljött az az öttagú kis zenekar, a zongorista, a prímhegedista,
brácsista, flótista meg az üstdob-cintányér- és trianglista, kik
ilyenkor, mint szolíd zenészek, hazamennek, kivéve a zongoristát, aki
a szeparék felé gravitál, meg az üstdob-cintányér- és trianglistát, ki
mint nőtlen szőke álmodó itt szokott maradni reggelig a cigányokhoz
közel, egy székre ülve, mindig ott a kályha mellett és a fekete
fadózniból cigarettákat sodor és elszívja őket egy kis
meggyfaszipkából. A cigányok a kályha mellett hátul, a nekik
odacsinált dobogón munkába léptek abban a pillanatban, mikor a
műsornak vége lett és a varietézene lezárult ott a függöny előtt és a
zongorista boldogan felugrott és a billentyűkre lecsapta a fedelet és
a prímhegedista meg a brácsista kihúzták a zsebkendőt a nyakukból
és letörülték az arcukat vele és visszatették a zsebökbe. Azon
nyomban kitört a cigányzene, mert a zenének egy fél percig se
szabad elhallgatni ott a Casinóban! És akkor olyan zaj és olyan
mozgalom van abban a percben ott a meleg teremben, ahol mintha
augusztus volna mindig, úgy be van fűtve s olyan világos van és
mintha perzselne, mint a napsütés, az a sok villany! A pincérek
szaladgálnak a pezsgős vedrekkel és a poharakkal és a lányok
repkednek elő mindenfelől a középre, hol az asztalok közt egy nagy
tisztás van, mint az erdőben. A szép Lezsi az ő vén konzervált
frakkjában és sarkatlan escarpinjában kilép a terembe a mögül a
függöny mögül, amelyiken át a színpadra járnak fel, ugyanazzal a
göndör frizurával és ugyanazzal a fehér masnijával, mint tegnap és
ugyanazzal a hirtelen kiderülő arcával és kezel azokkal a
vendégekkel, akik az útjában ülnek és néz körül és kiabál erre meg
amarra:
– Szeervusz, apám! Szehervusz, apám! – és siet a középre, arra a
tisztásra, az úgynevezett parkettre. És már áttette karját a Rozy
Rozinda vagy az Andrássy Tusi derekán és már valcerez vele körbe s
körbe a nyakába nyomott fejjel a divatvalcer zengésében, mint egy
nekikészült munkás, vagy mint egy megnyugodott rab, aki erre az
örök valcerezésre van elítélve. Köröskörül pedig a nők párjával
jönnek és összefogóznak és keringenek és beleütköznek egyik pár a
másik párba, mert szűk a hely és mert a párok nem a táncra
figyelnek, sem egyik pár a másikra nem figyel, sőt a maga
partnerének a mozgására se igen figyel egyik nő se, hanem az
asztalok felé figyelgetnek, meg a páholyba lesnek, hogy kik vannak
itt? Melyik nők helyezkedtek el már egy-egy társaságban? Mennyire
van már az éj mámora a teremben? Nem toppant-e be véletlenül egy
olyan herceg, aki nem is volt még soha fönn a Casinóban, aki egy
milliót fog itt szétszórni ma éjszaka, sőt nem is szórja szét, csak
mind annak az egy nőnek a reticule-jébe szórja, akit meghív mulatni
s aztán esetleg megőrül és másnap elveszi azt a nőt feleségül. Ilyen
az álom, barátom. Biztos, hogy mind a nőnek, mikor ott a Casinóban
a műsor lefutása után elsétál a páholyok előtt és a cigánynyal
dúdolva körülnéz vagy ott forog a hivatali keringőben és elnéz
onnan, egy ilyen túlságos kilátás mereng egy pillanatig a szeméből.
Csak egy nő veszi komolyan ott azt a valcerezést, az a nő, aki
magával a szép Lezsivel táncol. Annak a nőnek, legyen az a büszke
Andrássy Tusi vagy a híres Rozy Rozinda vagy akárki, érezni kell,
hogy az egy nagy kitüntetés, hogy a szép Lezsi ővele produkálja
magát a parketten és az nem az ő szépségéért vagy hírnevéért van,
hanem azért, mert a szép Lezsi mint balettmester csakis elsőrangú
valcertáncosnővel áll oda a publikum elé. Azt nem lehet csak úgy
lezser venni, hogy a terem ott ül köröskörül és nézi a szép Lezsi
forgását a partnernővel. Az nem léhaság és nem kizárólag
kötelesség, az már dísz és művészet, a szép Lezsi partnernőjének
lenni a megnyitó parkettáncban! Az a nő bálkirálynőnek érezheti
magát és hiszem is, hogy bárkirálynőnek érzi magát, míg a szép
Lezsi ott csuszkáltatja az ő derekán vagy vállán a kezét és ott
futtatja mellette sebesen és könnyeden a két munkában megmattult
escarpinját. Elnéztem sokszor így a szép Lezsi partnernőjének az
ünnepélyes arcát a valcerezésben, félig becsukott szemeit és félig
kinyilt száját és egy kis adag szédületben hátrahajtott fejét és
komoly homlokát és rózsaszínre melegedett orcáit, amelyek
mosolyognak, de csak annyira, amennyire a komolyság engedi s
akármilyen pikantériákat súg neki néha a szép Lezsi unalmában, az a
nő el nem neveti magát és nem jön ki az ünnepélyességből.
Nézem ezt a ringlispilt ott a parketten, egyszer csak a szemem a
szivarosfiúra ragad, aki elszaladt mellettem a bejáratnál, a ládával a
hóna alatt fut be a terembe. Ott áll egy kis nő az úton a páholyok
előtt. A szivarosfiú azt mondja:
– Hoopp –
és meglöki a könyökével a kis nőt. A kis nő utána kiabál:
– Mit lökdösődik, taknyos!
A szivarosfiú hátrafordul a szaladásban, sürgősen végigméri a kis
nőt:
– Nézze nagysád vigyázzon magára.
De kiabál feljebb valahol egy pincér:
– Sziaross! –
és a szivarosfiú fut tovább. A kis nő felkapja a fejét, így csinál a fiú
után:
– Hö!
Háttal állt nekem a kis nő s akkor idefordult véletlenül. Ejnye.
Meglepett és átnéztem az arcát, ismerem-e s intenem kell-e neki egy
gyönge szervuszt. Nem volt biztos, hogy ismerem és különben se
kötelező, tudod, hogy az ember következetesen üdvözölje ott a
nőket, csak azért, mert perdut ivott velük és egypárszor társalgott a
fejükkel. A kis nő észrevett és néz rám, félrehajtja a fejét,
összehúzza a szemét és egy kíváncsi grimászt csinál, úgy áll mint
egy gyerek, aki a napba néz. Valami berlinikék vad selyemruha van
rajta s egy rém széles kalap. Egy nagy reticulet lógáz közben a
kezéből. Ezeknél a nőknél mindig náluk van a reticule, mint a párisi
minisztereknél az irattáska. Indultam, hogy bemegyek a többiekhez
a páholyba. Ahogy elmegyek a kis nő mellett, direkt a térdemhez löki
a reticule-jét. És azt mondja:
– Lila ákác – és nevet egyet hozzá.
Nini. Megállottam. Tényleg! Én már úgy elfelejtettem ezt a kis
nőt, mint ahogy egy elhajított cigarettavéget elfelejtünk.
– Te vagy az? – mondom.
– Hát nem lássa?
– Itt vagy a Casinóban?
– Itt hát, hol legyek!
– És emlékszel énrám?
– Hogyne. Azt hiszi, olyan buta vagyok, mint ahogy kinézek?
Nem látszott butának. Néztem a két szemét, eszembe jutottak a
szemei a ligetből. Most is oly nagy kerekek és oly könnyű kékek
voltak a szemei s fehér képével együtt olybá tűnt a kis nőnek a két
szeme, mint két vidám luftballon egymás mellett egy fehér égben.
Viszont igen ordináré kivágott cipő volt a lábán és valami ügyetlen
egy szemtelenség volt rajta az a kék selyemruha. Mondom neki:
– Fordulj meg.
Hátul egy rettentő nagy rózsaszín csokor van kötve a derekán és
az alól két széles rózsaszín szalag lóg le a cipője sarkáig. Megfogtam
az egyik szalagját, megráncigáltam:
– Hát ez itt minek?
– Naa. Hagyja a szallagom!
Olyan volt evvel a két szalaggal, mint egy bohóc, aki nagysámnak
öltözik fel. Nem nagy büszkeség, kérlek, ott megállani a teremben
egy ilyennel. Csak kíváncsi voltam rá, hogy került a Casinóba.
– Te ide vagy szerződve?
– Persze. Tag vagyok a Casinóba!
– Tag! A Casino tagja! Még ilyen büszkeséget nem is hallottál,
ahogy ez a lány leadta, hogy ő tag a Casinóba!
– Nagyszerű. És mióta?
– Gyhete.
– És hogy kerültél ide?
– Barátnőm ajánlott.
– Kicsoda?
– Hédi.
– Melyik az a Hédi?
– Ott van ni, nem lássa?
Ja, Arany Hédi. Persze, hisz ismerem. Ott ült jobbra az első
páholyban, épen kocintottak ott és Arany Hédi a pezsgőspoharát
kinyújtott karjával körbe mutatta az urak szemére nézve sorba s a
fejét lefelé kapkodva.
– Hogy barátkoztál össze Hédivel?
– Hallja! Egy házba lakunk!
– Igen? Hol laktok?
– Kis-Stáció utcába.
– Hol van az?
– Nyolc kerületbe. Hallja, még ezt se tudja?
– Hát aztán otthon mit szóltak ahhoz, hogy te a Casinóba jöttél?
– Mér? Mi van abba?
– Szóval engedtek?
– Mér ne engedjenek! Mit kérdez ennyit!
– Mi az apád?
– Papám rendőr.
– Rendőr? Hol őrzi a rendet a papád?
– Nyolc kerületbe.
Ezt ne úgy értsd, hogy nyolc kerületben, hanem hogy a nyolcadik
kerületben. Sok is volna a rendből, ha nyolc kerületben csinálna
rendet a papája. Elég ha ott van rend a nyolckerületben. Még a
nyolckerületben sem egymaga tartja a papája a rendet, ott is még
sok más rendőrt is enged maga mellett boldogulni.
– Hát a Hédi papája micsoda?
– Az? Ööö, tudja, izé, azokat a koldusgrófnő és vadászlak a
fenyvesekben füzeteket viszi mindig Pesten.
– Ja? Füzetes regényt árul?
– Á, nem árul, maga azt nem érti. Igen: a Hédi papája regény-
kézbesítő. Igen, az van kiírva náluk az ajtóra. Regény-kézbesítő.
– Hogy híják a Hédi papáját?
– Heskovics.
Elkacagta magát és még hozzámondta:
– Soma.
– Mit röhögsz?
– Hogy Soma! A Hédi papája Soma! Nekem mindig úgy kell
nevetni, ha látom kiírva ott az ajtón.

You might also like