Switch to: V10V9V8V7V6V5

Valentina Client Features

Thin vs Fat

There are SQL database servers having very THIN CLIENTS, for example MySQL client driver, which offers you only 15-25 major C functions and implement only more or less simple protocol for them.

Then, there are database servers with very FAT CLIENTS, for example Sybase or MS SQL, where these clients have size of many megabytes.

Valentina Server has currently a middle-sized client with nearly 1,000 functions implemented in the protocol. Naturally, such a large number of methods cannot be programmed manually, so Paradigma has developed an auto-generation mechanism for that purpose.

Don`t be afraid, though, of this number of methods, because they belong to just about 20 major classes, and the methods use natural naming conventions and have consistent functionality.

Packet-Based Protocol

Valentina Client/Server implements not stream-based protocol as e.g. mySQL and Postgre does, but packet-based one. This gives the number of advantages, e.g. the ability to compress packages, do versioning, do additional checks of packet boundaries.

Compression of Protocol

Thanks to packet based protocol it is possible to compress packet before sending it. Does this helps? A lots! For example, image you doing a SELECT query and asking for client/side cursor. Let it has 1000 records and takes 100Kb. Being compressed it can be as small as e.g. 10Kb. So Valentina wins on time of networking.

Compression of Pictures

Valentina Client can even do JPG/PNG/TIFF compression of Pictures, to get for this kind of data even better compression rate.

Easy SSL

Using Valentina Server and Client you can easily setup SSL, just set it ON in the VServer.ini file, and provide your KEY files (demo key files are provided but do not use them for your release!).

Any Encoding for Connection

Valentina provides connectivity to many IDEs and languages having quite different supported encodings. For example Adobe (Macromedia) Director uses Latin-1, REALbasic uses UTF-8, VB6 uses UTF-16.

The solution Valentina uses is: on connect client informs Valentina Server about encoding this connection will use, and client start send/get strings using this encoding. Valentina Server on the fly convert all strings from/to this encoding into UTF-16, which Valentina engine uses.

Any DateTime Format for Connection

When you connect to a Valentina Server database, you can specify any date/time format you want. Valentina Server converts your format to its native on the fly for all input/output strings.

OO API of Valentina Client

Valentina Client provides 99.9% the same Object-Oriented API as Valentina C++ ADK.

That means that while mySQL, Postgre developers use set of 30-40 C functions, Valentina developers can work with C++ classes as VConnection, VDatabase, VCursor, … which simplifies a lots coding and reduces the size of a code.

Multi-threading programming and Valentina Client

Most of regular vClient functionality is thread-safe to use without any external synch (BTW, MT-builds are completely safe). Different threads usually make own vConnection to vServer and so - use own set of Valentina objects (vDatabase, vCursor…), but it is legal to share single vConnection and even vDatabase as well. Meanwhile, some functionality like vCursor, vTable … could not be shared because of their nature (It is hard imaging how to loop vCursor records in different threads for example).

The only thing you should keep in mind is: if user does not use Valentina's Thread_Simple wrapper to create a thread he must call a couple of functions himself (in his thread-function) to avoid memory leaks:

thread_func(...)
{
  ValentinaThreadInit();
  ...
  ...
  ValentinaThreadShutDown();
}

You can find few multi-threading examples in VSDK's Example/Multithreading folder.