Beginning jOOQ Learn to Write Efficient and Effective Java Based SQL Database Operations 1st Edition Tayo Koleoso All Chapters Instant Download
Beginning jOOQ Learn to Write Efficient and Effective Java Based SQL Database Operations 1st Edition Tayo Koleoso All Chapters Instant Download
com
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
ebookmeta.com
https://ebookmeta.com/product/art-in-crisis-the-lost-center-2nd-
edition-hans-sedlmayr/
ebookmeta.com
https://ebookmeta.com/product/teaching-fairly-in-an-unfair-world-2nd-
edition-kathleen-gould-lundy/
ebookmeta.com
https://ebookmeta.com/product/deep-learning-based-face-analytics-1st-
edition-nalini-k-ratha/
ebookmeta.com
https://ebookmeta.com/product/grays-anatomy-review-3rd-edition-marios-
loukas/
ebookmeta.com
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
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 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.
1. Welcome to jOOQ
Tayo Koleoso1
(1) Silver Spring, MD, USA
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.
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.
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
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.
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.
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…
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:
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.
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.
Select Statements
Let’s say hello to our old friend, DSLContext:
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:
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:
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ő…