code: @Override
    public <RET extends ORecordInternal<?>> RET save(final ORecordInternal<?> iRecord) {
      return (RET) save(iRecord, OPERATION_MODE.SYNCHRONOUS, null);
    }
docs: Saves a document to the database. Behavior depends by the current running transaction if any. If no transaction is running then
  changes apply immediately. If an Optimistic transaction is running then the record will be changed at commit time. The current
  transaction will continue to see the record as modified, while others not. If a Pessimistic transaction is running, then an
  exclusive lock is acquired against the record. Current transaction will continue to see the record as modified, while others
  cannot access to it since it's locked.
  <p/>
  If MVCC is enabled and the version of the document is different by the version stored in the database, then a
  {@link OConcurrentModificationException} exception is thrown.Before to save the document it must be valid following the
  constraints declared in the schema if any (can work also in schema-less mode). To validate the document the
  {@link ODocument#validate()} is called.
  
  @param iRecord
  Record to save.
  @return The Database instance itself giving a "fluent interface". Useful to call multiple methods in chain.
  @throws OConcurrentModificationException
  if the version of the document is different by the version contained in the database.
  @throws OValidationException
  if the document breaks some validation constraints defined in the schema
  @see #setMVCC(boolean), {@link #isMVCC()}