diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9885282..2804e57 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,8 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release.
 
 ### Changed
 
+- Update parsing enum macro of `errcode.h` from Tarantool 3.2.0 (#6).
+
 ### Fixed
 
 ## [1.0.0] - 2023-12-27
diff --git a/doc.go b/doc.go
index d93e1cc..62f93ce 100644
--- a/doc.go
+++ b/doc.go
@@ -3,8 +3,8 @@
 // The package code generated from:
 //
 //	Repository: https://github.com/tarantool/tarantool.git
-//	Tag or branch: 3.0.0
-//	Commit: 6ba34da7f840357f2093cf6ee9a0ef2fc0a0f590
+//	Tag or branch: master
+//	Commit: 72eeaee8b25b86486b041e59cc48afb7e015365e
 package iproto
 
 // Code generated by generate.sh; DO NOT EDIT.
diff --git a/error.go b/error.go
index 579b097..82d873d 100644
--- a/error.go
+++ b/error.go
@@ -9,17 +9,17 @@ type Error int
 const (
 	// "Unknown error"
 	ER_UNKNOWN Error = 0
-	// "Illegal parameters, %s"
+	// "%s"
 	ER_ILLEGAL_PARAMS Error = 1
 	// "Failed to allocate %u bytes in %s for %s"
 	ER_MEMORY_ISSUE Error = 2
 	// "Duplicate key exists in unique index \"%s\" in space \"%s\" with old tuple - %s and new tuple - %s"
 	ER_TUPLE_FOUND Error = 3
-	// "Tuple doesn't exist in index '%s' in space '%s'"
+	// Unused
 	ER_TUPLE_NOT_FOUND Error = 4
 	// "%s does not support %s"
 	ER_UNSUPPORTED Error = 5
-	// "Can't modify data on a replication slave. My master is: %s"
+	// Unused
 	ER_NONMASTER Error = 6
 	// "Can't modify data on a read-only instance"
 	ER_READONLY Error = 7
@@ -49,7 +49,7 @@ const (
 	ER_EXACT_MATCH Error = 19
 	// "Invalid MsgPack - %s"
 	ER_INVALID_MSGPACK Error = 20
-	// "msgpack.encode: can not encode Lua type '%s'"
+	// Unused
 	ER_PROC_RET Error = 21
 	// "Tuple/Key must be MsgPack array"
 	ER_TUPLE_NOT_ARRAY Error = 22
@@ -73,7 +73,7 @@ const (
 	ER_KEY_PART_COUNT Error = 31
 	// "%s"
 	ER_PROC_LUA Error = 32
-	// "Procedure '%.*s' is not defined"
+	// "Procedure '%s' is not defined"
 	ER_NO_SUCH_PROC Error = 33
 	// "Trigger '%s' doesn't exist"
 	ER_NO_SUCH_TRIGGER Error = 34
@@ -143,7 +143,7 @@ const (
 	ER_INSTANCE_UUID_MISMATCH Error = 66
 	// "Can't initialize replica id with a reserved value %u"
 	ER_REPLICA_ID_IS_RESERVED Error = 67
-	// "Invalid LSN order for instance %u: previous LSN = %llu, new lsn = %llu"
+	// Unused
 	ER_INVALID_ORDER Error = 68
 	// "Missing mandatory field '%s' in request"
 	ER_MISSING_REQUEST_FIELD Error = 69
@@ -155,11 +155,11 @@ const (
 	ER_ITERATOR_TYPE Error = 72
 	// "Replica count limit reached: %u"
 	ER_REPLICA_MAX Error = 73
-	// "Failed to read xlog: %lld"
+	// Unused
 	ER_INVALID_XLOG Error = 74
-	// "Invalid xlog name: expected %lld got %lld"
+	// Unused
 	ER_INVALID_XLOG_NAME Error = 75
-	// "Invalid xlog order: %lld and %lld"
+	// Unused
 	ER_INVALID_XLOG_ORDER Error = 76
 	// "Connection is not established"
 	ER_NO_CONNECTION Error = 77
@@ -169,7 +169,7 @@ const (
 	ER_ACTIVE_TRANSACTION Error = 79
 	// "The transaction the cursor belongs to has ended"
 	ER_CURSOR_NO_TRANSACTION Error = 80
-	// "A multi-statement transaction can not use multiple storage engines"
+	// "Storage engine '%s' does not support cross-engine transactions"
 	ER_CROSS_ENGINE_TRANSACTION Error = 81
 	// "Role '%s' is not found"
 	ER_NO_SUCH_ROLE Error = 82
@@ -185,7 +185,7 @@ const (
 	ER_ROLE_LOOP Error = 87
 	// "Incorrect grant arguments: %s"
 	ER_GRANT Error = 88
-	// "User '%s' already has %s access on %s%s"
+	// "User '%s' already has %s access on %s"
 	ER_PRIV_GRANTED Error = 89
 	// "User '%s' already has role '%s'"
 	ER_ROLE_GRANTED Error = 90
@@ -213,11 +213,11 @@ const (
 	ER_RTREE_RECT Error = 101
 	// "%s"
 	ER_PROC_C Error = 102
-	// "Unknown RTREE index distance type %s"
+	// Unused
 	ER_UNKNOWN_RTREE_INDEX_DISTANCE_TYPE Error = 103
 	// "%s"
 	ER_PROTOCOL Error = 104
-	// "Space %s has a unique secondary index and does not support UPSERT"
+	// Unused
 	ER_UPSERT_UNIQUE_SECONDARY_KEY Error = 105
 	// "Wrong record in _index space: got {%s}, expected {%s}"
 	ER_WRONG_INDEX_RECORD Error = 106
@@ -243,7 +243,7 @@ const (
 	ER_LOADING Error = 116
 	// "Connection to self"
 	ER_CONNECTION_TO_SELF Error = 117
-	// "Key part is too long: %u of %u bytes"
+	// Unused
 	ER_KEY_PART_IS_TOO_LONG Error = 118
 	// "Compression error: %s"
 	ER_COMPRESSION Error = 119
@@ -279,11 +279,11 @@ const (
 	ER_CASCADE_ROLLBACK Error = 134
 	// "Timed out waiting for Vinyl memory quota"
 	ER_VY_QUOTA_TIMEOUT Error = 135
-	// "%s index does not support selects via a partial key (expected %u parts, got %u). Please Consider changing index type to TREE."
+	// "%s index  does not support selects via a partial key (expected %u parts, got %u). Please Consider changing index type to TREE."
 	ER_PARTIAL_KEY Error = 136
 	// "Can't truncate a system space, space '%s'"
 	ER_TRUNCATE_SYSTEM_SPACE Error = 137
-	// "Failed to dynamically load module '%.*s': %s"
+	// "Failed to dynamically load module '%s': %s"
 	ER_LOAD_MODULE Error = 138
 	// "Failed to allocate %u bytes for tuple: tuple is too large. Check 'vinyl_max_tuple_size' configuration option."
 	ER_VINYL_MAX_TUPLE_SIZE Error = 139
@@ -319,7 +319,7 @@ const (
 	ER_TRANSACTION_YIELD Error = 154
 	// "Replication group '%s' does not exist"
 	ER_NO_SUCH_GROUP Error = 155
-	// "Bind value for parameter %s is out of range for type %s"
+	// Unused
 	ER_SQL_BIND_VALUE Error = 156
 	// "Bind value type %s for parameter %s is not supported"
 	ER_SQL_BIND_TYPE Error = 157
@@ -343,7 +343,7 @@ const (
 	ER_NO_SUCH_COLLATION Error = 166
 	// "Failed to create foreign key constraint '%s': %s"
 	ER_CREATE_FK_CONSTRAINT Error = 167
-	// "Failed to drop foreign key constraint '%s': %s"
+	// Unused
 	ER_DROP_FK_CONSTRAINT Error = 168
 	// "Constraint '%s' does not exist in space '%s'"
 	ER_NO_SUCH_CONSTRAINT Error = 169
@@ -359,7 +359,7 @@ const (
 	ER_ILLEGAL_COLLATION_MIX Error = 174
 	// "Pragma '%s' does not exist"
 	ER_SQL_NO_SUCH_PRAGMA Error = 175
-	// "Can’t resolve field '%s'"
+	// "Can't resolve field '%s'"
 	ER_SQL_CANT_RESOLVE_FIELD Error = 176
 	// "Index '%s' already exists in space '%s'"
 	ER_INDEX_EXISTS_IN_SPACE Error = 177
@@ -373,33 +373,33 @@ const (
 	ER_SQL_SELECT_WILDCARD Error = 181
 	// "Failed to execute an empty SQL statement"
 	ER_SQL_STATEMENT_EMPTY Error = 182
-	// "At line %d at or near position %d: keyword '%.*s' is reserved. Please use double quotes if '%.*s' is an identifier."
+	// "At line %d at or near position %d: keyword '%s' is reserved. Please use double quotes if '%s' is an identifier."
 	ER_SQL_KEYWORD_IS_RESERVED Error = 183
-	// "Syntax error at line %d near '%.*s'"
+	// "Syntax error at line %d near '%s'"
 	ER_SQL_SYNTAX_NEAR_TOKEN Error = 184
-	// "At line %d at or near position %d: unrecognized token '%.*s'"
+	// "At line %d at or near position %d: unrecognized token '%s'"
 	ER_SQL_UNKNOWN_TOKEN Error = 185
 	// "%s"
 	ER_SQL_PARSER_GENERIC Error = 186
-	// "ANALYZE statement argument %s is not a base table"
+	// Unused
 	ER_SQL_ANALYZE_ARGUMENT Error = 187
 	// "Failed to create space '%s': space column count %d exceeds the limit (%d)"
 	ER_SQL_COLUMN_COUNT_MAX Error = 188
-	// "Hex literal %s%s length %d exceeds the supported limit (%d)"
+	// "Hex literal %s length %d exceeds the supported limit (%d)"
 	ER_HEX_LITERAL_MAX Error = 189
-	// "Integer literal %s%s exceeds the supported range [-9223372036854775808, 18446744073709551615]"
+	// "Integer literal %s exceeds the supported range [-9223372036854775808, 18446744073709551615]"
 	ER_INT_LITERAL_MAX Error = 190
 	// "%s %d exceeds the limit (%d)"
 	ER_SQL_PARSER_LIMIT Error = 191
 	// "%s are prohibited in an index definition"
 	ER_INDEX_DEF_UNSUPPORTED Error = 192
-	// "%s are prohibited in a ck constraint definition"
+	// Unused
 	ER_CK_DEF_UNSUPPORTED Error = 193
 	// "Field %s is used as multikey in one index and as single key in another"
 	ER_MULTIKEY_INDEX_MISMATCH Error = 194
 	// "Failed to create check constraint '%s': %s"
 	ER_CREATE_CK_CONSTRAINT Error = 195
-	// "Check constraint failed '%s': %s"
+	// Unused
 	ER_CK_CONSTRAINT_FAILED Error = 196
 	// "Unequal number of entries in row expression: left side has %u, but right side - %u"
 	ER_SQL_COLUMN_COUNT Error = 197
@@ -437,7 +437,7 @@ const (
 	ER_NO_SUCH_SESSION_SETTING Error = 213
 	// "Found uncommitted sync transactions from other instance with id %u"
 	ER_UNCOMMITTED_FOREIGN_SYNC_TXNS Error = 214
-	// "CONFIRM message arrived for an unknown master id %d, expected %d"
+	// Unused
 	ER_SYNC_MASTER_MISMATCH Error = 215
 	// "Quorum collection for a synchronous transaction is timed out"
 	ER_SYNC_QUORUM_TIMEOUT Error = 216
@@ -549,7 +549,7 @@ const (
 	ER_INSTANCE_NAME_DUPLICATE Error = 269
 	// "Instance name mismatch: name '%s' provided in config confilcts with the instance one '%s'"
 	ER_INSTANCE_NAME_MISMATCH Error = 270
-	// "Your schema version is %u.%u.%u while Tarantool %s requires a more recent schema version. Please, consider using box.schema.upgrade()."
+	// "Your schema version is %s while Tarantool feature %s requires schema version %s or higher. Please, consider using box.schema.upgrade()."
 	ER_SCHEMA_NEEDS_UPGRADE Error = 271
 	// "Schema upgrade is already in progress"
 	ER_SCHEMA_UPGRADE_IN_PROGRESS Error = 272
@@ -565,4 +565,30 @@ const (
 	ER_INVALID_DEC Error = 277
 	// "box.ctl.promote() is already running"
 	ER_IN_ANOTHER_PROMOTE Error = 278
+	// "Server is shutting down"
+	ER_SHUTDOWN Error = 279
+	// "The value of field %s exceeds the supported range for type '%s': %s"
+	ER_FIELD_VALUE_OUT_OF_RANGE Error = 280
+	// "The replicaset was not found by its name"
+	ER_REPLICASET_NOT_FOUND Error = 281
+	// "Writable instance was not found in replicaset"
+	ER_REPLICASET_NO_WRITABLE Error = 282
+	// "More than one writable was found in replicaset"
+	ER_REPLICASET_MORE_THAN_ONE_WRITABLE Error = 283
+	// "Transaction was committed"
+	ER_TXN_COMMIT Error = 284
+	// "The read view is busy"
+	ER_READ_VIEW_BUSY Error = 285
+	// "The read view is closed"
+	ER_READ_VIEW_CLOSED Error = 286
+	// "The WAL queue is full"
+	ER_WAL_QUEUE_FULL Error = 287
+	// "Invalid vclock"
+	ER_INVALID_VCLOCK Error = 288
+	// "Failed to encode Arrow IPC data"
+	ER_ARROW_IPC_ENCODE Error = 289
+	// "Failed to decode Arrow IPC data"
+	ER_ARROW_IPC_DECODE Error = 290
+	// "The synchronous transaction queue is full"
+	ER_SYNC_QUEUE_FULL Error = 291
 )
diff --git a/error_string.go b/error_string.go
index c4aab00..d7a9dc7 100644
--- a/error_string.go
+++ b/error_string.go
@@ -287,11 +287,24 @@ func _() {
 	_ = x[ER_DEFAULT_FUNC_FAILED-276]
 	_ = x[ER_INVALID_DEC-277]
 	_ = x[ER_IN_ANOTHER_PROMOTE-278]
+	_ = x[ER_SHUTDOWN-279]
+	_ = x[ER_FIELD_VALUE_OUT_OF_RANGE-280]
+	_ = x[ER_REPLICASET_NOT_FOUND-281]
+	_ = x[ER_REPLICASET_NO_WRITABLE-282]
+	_ = x[ER_REPLICASET_MORE_THAN_ONE_WRITABLE-283]
+	_ = x[ER_TXN_COMMIT-284]
+	_ = x[ER_READ_VIEW_BUSY-285]
+	_ = x[ER_READ_VIEW_CLOSED-286]
+	_ = x[ER_WAL_QUEUE_FULL-287]
+	_ = x[ER_INVALID_VCLOCK-288]
+	_ = x[ER_ARROW_IPC_ENCODE-289]
+	_ = x[ER_ARROW_IPC_DECODE-290]
+	_ = x[ER_SYNC_QUEUE_FULL-291]
 }
 
-const _Error_name = "ER_UNKNOWNER_ILLEGAL_PARAMSER_MEMORY_ISSUEER_TUPLE_FOUNDER_TUPLE_NOT_FOUNDER_UNSUPPORTEDER_NONMASTERER_READONLYER_INJECTIONER_CREATE_SPACEER_SPACE_EXISTSER_DROP_SPACEER_ALTER_SPACEER_INDEX_TYPEER_MODIFY_INDEXER_LAST_DROPER_TUPLE_FORMAT_LIMITER_DROP_PRIMARY_KEYER_KEY_PART_TYPEER_EXACT_MATCHER_INVALID_MSGPACKER_PROC_RETER_TUPLE_NOT_ARRAYER_FIELD_TYPEER_INDEX_PART_TYPE_MISMATCHER_UPDATE_SPLICEER_UPDATE_ARG_TYPEER_FORMAT_MISMATCH_INDEX_PARTER_UNKNOWN_UPDATE_OPER_UPDATE_FIELDER_FUNCTION_TX_ACTIVEER_KEY_PART_COUNTER_PROC_LUAER_NO_SUCH_PROCER_NO_SUCH_TRIGGERER_NO_SUCH_INDEX_IDER_NO_SUCH_SPACEER_NO_SUCH_FIELD_NOER_EXACT_FIELD_COUNTER_FIELD_MISSINGER_WAL_IOER_MORE_THAN_ONE_TUPLEER_ACCESS_DENIEDER_CREATE_USERER_DROP_USERER_NO_SUCH_USERER_USER_EXISTSER_CREDS_MISMATCHER_UNKNOWN_REQUEST_TYPEER_UNKNOWN_SCHEMA_OBJECTER_CREATE_FUNCTIONER_NO_SUCH_FUNCTIONER_FUNCTION_EXISTSER_BEFORE_REPLACE_RETER_MULTISTATEMENT_TRANSACTIONER_TRIGGER_EXISTSER_USER_MAXER_NO_SUCH_ENGINEER_RELOAD_CFGER_CFGER_SAVEPOINT_EMPTY_TXER_NO_SUCH_SAVEPOINTER_UNKNOWN_REPLICAER_REPLICASET_UUID_MISMATCHER_INVALID_UUIDER_REPLICASET_UUID_IS_ROER_INSTANCE_UUID_MISMATCHER_REPLICA_ID_IS_RESERVEDER_INVALID_ORDERER_MISSING_REQUEST_FIELDER_IDENTIFIERER_DROP_FUNCTIONER_ITERATOR_TYPEER_REPLICA_MAXER_INVALID_XLOGER_INVALID_XLOG_NAMEER_INVALID_XLOG_ORDERER_NO_CONNECTIONER_TIMEOUTER_ACTIVE_TRANSACTIONER_CURSOR_NO_TRANSACTIONER_CROSS_ENGINE_TRANSACTIONER_NO_SUCH_ROLEER_ROLE_EXISTSER_CREATE_ROLEER_INDEX_EXISTSER_SESSION_CLOSEDER_ROLE_LOOPER_GRANTER_PRIV_GRANTEDER_ROLE_GRANTEDER_PRIV_NOT_GRANTEDER_ROLE_NOT_GRANTEDER_MISSING_SNAPSHOTER_CANT_UPDATE_PRIMARY_KEYER_UPDATE_INTEGER_OVERFLOWER_GUEST_USER_PASSWORDER_TRANSACTION_CONFLICTER_UNSUPPORTED_PRIVER_LOAD_FUNCTIONER_FUNCTION_LANGUAGEER_RTREE_RECTER_PROC_CER_UNKNOWN_RTREE_INDEX_DISTANCE_TYPEER_PROTOCOLER_UPSERT_UNIQUE_SECONDARY_KEYER_WRONG_INDEX_RECORDER_WRONG_INDEX_PARTSER_WRONG_INDEX_OPTIONSER_WRONG_SCHEMA_VERSIONER_MEMTX_MAX_TUPLE_SIZEER_WRONG_SPACE_OPTIONSER_UNSUPPORTED_INDEX_FEATUREER_VIEW_IS_ROER_NO_TRANSACTIONER_SYSTEMER_LOADINGER_CONNECTION_TO_SELFER_KEY_PART_IS_TOO_LONGER_COMPRESSIONER_CHECKPOINT_IN_PROGRESSER_SUB_STMT_MAXER_COMMIT_IN_SUB_STMTER_ROLLBACK_IN_SUB_STMTER_DECOMPRESSIONER_INVALID_XLOG_TYPEER_ALREADY_RUNNINGER_INDEX_FIELD_COUNT_LIMITER_LOCAL_INSTANCE_ID_IS_READ_ONLYER_BACKUP_IN_PROGRESSER_READ_VIEW_ABORTEDER_INVALID_INDEX_FILEER_INVALID_RUN_FILEER_INVALID_VYLOG_FILEER_CASCADE_ROLLBACKER_VY_QUOTA_TIMEOUTER_PARTIAL_KEYER_TRUNCATE_SYSTEM_SPACEER_LOAD_MODULEER_VINYL_MAX_TUPLE_SIZEER_WRONG_DD_VERSIONER_WRONG_SPACE_FORMATER_CREATE_SEQUENCEER_ALTER_SEQUENCEER_DROP_SEQUENCEER_NO_SUCH_SEQUENCEER_SEQUENCE_EXISTSER_SEQUENCE_OVERFLOWER_NO_SUCH_INDEX_NAMEER_SPACE_FIELD_IS_DUPLICATEER_CANT_CREATE_COLLATIONER_WRONG_COLLATION_OPTIONSER_NULLABLE_PRIMARYER_NO_SUCH_FIELD_NAME_IN_SPACEER_TRANSACTION_YIELDER_NO_SUCH_GROUPER_SQL_BIND_VALUEER_SQL_BIND_TYPEER_SQL_BIND_PARAMETER_MAXER_SQL_EXECUTEER_UPDATE_DECIMAL_OVERFLOWER_SQL_BIND_NOT_FOUNDER_ACTION_MISMATCHER_VIEW_MISSING_SQLER_FOREIGN_KEY_CONSTRAINTER_NO_SUCH_MODULEER_NO_SUCH_COLLATIONER_CREATE_FK_CONSTRAINTER_DROP_FK_CONSTRAINTER_NO_SUCH_CONSTRAINTER_CONSTRAINT_EXISTSER_SQL_TYPE_MISMATCHER_ROWID_OVERFLOWER_DROP_COLLATIONER_ILLEGAL_COLLATION_MIXER_SQL_NO_SUCH_PRAGMAER_SQL_CANT_RESOLVE_FIELDER_INDEX_EXISTS_IN_SPACEER_INCONSISTENT_TYPESER_SQL_SYNTAX_WITH_POSER_SQL_STACK_OVERFLOWER_SQL_SELECT_WILDCARDER_SQL_STATEMENT_EMPTYER_SQL_KEYWORD_IS_RESERVEDER_SQL_SYNTAX_NEAR_TOKENER_SQL_UNKNOWN_TOKENER_SQL_PARSER_GENERICER_SQL_ANALYZE_ARGUMENTER_SQL_COLUMN_COUNT_MAXER_HEX_LITERAL_MAXER_INT_LITERAL_MAXER_SQL_PARSER_LIMITER_INDEX_DEF_UNSUPPORTEDER_CK_DEF_UNSUPPORTEDER_MULTIKEY_INDEX_MISMATCHER_CREATE_CK_CONSTRAINTER_CK_CONSTRAINT_FAILEDER_SQL_COLUMN_COUNTER_FUNC_INDEX_FUNCER_FUNC_INDEX_FORMATER_FUNC_INDEX_PARTSER_NO_SUCH_FIELD_NAMEER_FUNC_WRONG_ARG_COUNTER_BOOTSTRAP_READONLYER_SQL_FUNC_WRONG_RET_COUNTER_FUNC_INVALID_RETURN_TYPEER_SQL_PARSER_GENERIC_WITH_POSER_REPLICA_NOT_ANONER_CANNOT_REGISTERER_SESSION_SETTING_INVALID_VALUEER_SQL_PREPAREER_WRONG_QUERY_IDER_SEQUENCE_NOT_STARTEDER_NO_SUCH_SESSION_SETTINGER_UNCOMMITTED_FOREIGN_SYNC_TXNSER_SYNC_MASTER_MISMATCHER_SYNC_QUORUM_TIMEOUTER_SYNC_ROLLBACKER_TUPLE_METADATA_IS_TOO_BIGER_XLOG_GAPER_TOO_EARLY_SUBSCRIBEER_SQL_CANT_ADD_AUTOINCER_QUORUM_WAITER_INTERFERING_PROMOTEER_ELECTION_DISABLEDER_TXN_ROLLBACKER_NOT_LEADERER_SYNC_QUEUE_UNCLAIMEDER_SYNC_QUEUE_FOREIGNER_UNABLE_TO_PROCESS_IN_STREAMER_UNABLE_TO_PROCESS_OUT_OF_STREAMER_TRANSACTION_TIMEOUTER_ACTIVE_TIMERER_TUPLE_FIELD_COUNT_LIMITER_CREATE_CONSTRAINTER_FIELD_CONSTRAINT_FAILEDER_TUPLE_CONSTRAINT_FAILEDER_CREATE_FOREIGN_KEYER_FOREIGN_KEY_INTEGRITYER_FIELD_FOREIGN_KEY_FAILEDER_COMPLEX_FOREIGN_KEY_FAILEDER_WRONG_SPACE_UPGRADE_OPTIONSER_NO_ELECTION_QUORUMER_SSLER_SPLIT_BRAINER_OLD_TERMER_INTERFERING_ELECTIONSER_ITERATOR_POSITIONER_DEFAULT_VALUE_TYPEER_UNKNOWN_AUTH_METHODER_INVALID_AUTH_DATAER_INVALID_AUTH_REQUESTER_WEAK_PASSWORDER_OLD_PASSWORDER_NO_SUCH_SESSIONER_WRONG_SESSION_TYPEER_PASSWORD_EXPIREDER_AUTH_DELAYER_AUTH_REQUIREDER_SQL_SEQ_SCANER_NO_SUCH_EVENTER_BOOTSTRAP_NOT_UNANIMOUSER_CANT_CHECK_BOOTSTRAP_LEADERER_BOOTSTRAP_CONNECTION_NOT_TO_ALLER_NIL_UUIDER_WRONG_FUNCTION_OPTIONSER_MISSING_SYSTEM_SPACESER_CLUSTER_NAME_MISMATCHER_REPLICASET_NAME_MISMATCHER_INSTANCE_NAME_DUPLICATEER_INSTANCE_NAME_MISMATCHER_SCHEMA_NEEDS_UPGRADEER_SCHEMA_UPGRADE_IN_PROGRESSER_DEPRECATEDER_UNCONFIGUREDER_CREATE_DEFAULT_FUNCER_DEFAULT_FUNC_FAILEDER_INVALID_DECER_IN_ANOTHER_PROMOTE"
+const _Error_name = "ER_UNKNOWNER_ILLEGAL_PARAMSER_MEMORY_ISSUEER_TUPLE_FOUNDER_TUPLE_NOT_FOUNDER_UNSUPPORTEDER_NONMASTERER_READONLYER_INJECTIONER_CREATE_SPACEER_SPACE_EXISTSER_DROP_SPACEER_ALTER_SPACEER_INDEX_TYPEER_MODIFY_INDEXER_LAST_DROPER_TUPLE_FORMAT_LIMITER_DROP_PRIMARY_KEYER_KEY_PART_TYPEER_EXACT_MATCHER_INVALID_MSGPACKER_PROC_RETER_TUPLE_NOT_ARRAYER_FIELD_TYPEER_INDEX_PART_TYPE_MISMATCHER_UPDATE_SPLICEER_UPDATE_ARG_TYPEER_FORMAT_MISMATCH_INDEX_PARTER_UNKNOWN_UPDATE_OPER_UPDATE_FIELDER_FUNCTION_TX_ACTIVEER_KEY_PART_COUNTER_PROC_LUAER_NO_SUCH_PROCER_NO_SUCH_TRIGGERER_NO_SUCH_INDEX_IDER_NO_SUCH_SPACEER_NO_SUCH_FIELD_NOER_EXACT_FIELD_COUNTER_FIELD_MISSINGER_WAL_IOER_MORE_THAN_ONE_TUPLEER_ACCESS_DENIEDER_CREATE_USERER_DROP_USERER_NO_SUCH_USERER_USER_EXISTSER_CREDS_MISMATCHER_UNKNOWN_REQUEST_TYPEER_UNKNOWN_SCHEMA_OBJECTER_CREATE_FUNCTIONER_NO_SUCH_FUNCTIONER_FUNCTION_EXISTSER_BEFORE_REPLACE_RETER_MULTISTATEMENT_TRANSACTIONER_TRIGGER_EXISTSER_USER_MAXER_NO_SUCH_ENGINEER_RELOAD_CFGER_CFGER_SAVEPOINT_EMPTY_TXER_NO_SUCH_SAVEPOINTER_UNKNOWN_REPLICAER_REPLICASET_UUID_MISMATCHER_INVALID_UUIDER_REPLICASET_UUID_IS_ROER_INSTANCE_UUID_MISMATCHER_REPLICA_ID_IS_RESERVEDER_INVALID_ORDERER_MISSING_REQUEST_FIELDER_IDENTIFIERER_DROP_FUNCTIONER_ITERATOR_TYPEER_REPLICA_MAXER_INVALID_XLOGER_INVALID_XLOG_NAMEER_INVALID_XLOG_ORDERER_NO_CONNECTIONER_TIMEOUTER_ACTIVE_TRANSACTIONER_CURSOR_NO_TRANSACTIONER_CROSS_ENGINE_TRANSACTIONER_NO_SUCH_ROLEER_ROLE_EXISTSER_CREATE_ROLEER_INDEX_EXISTSER_SESSION_CLOSEDER_ROLE_LOOPER_GRANTER_PRIV_GRANTEDER_ROLE_GRANTEDER_PRIV_NOT_GRANTEDER_ROLE_NOT_GRANTEDER_MISSING_SNAPSHOTER_CANT_UPDATE_PRIMARY_KEYER_UPDATE_INTEGER_OVERFLOWER_GUEST_USER_PASSWORDER_TRANSACTION_CONFLICTER_UNSUPPORTED_PRIVER_LOAD_FUNCTIONER_FUNCTION_LANGUAGEER_RTREE_RECTER_PROC_CER_UNKNOWN_RTREE_INDEX_DISTANCE_TYPEER_PROTOCOLER_UPSERT_UNIQUE_SECONDARY_KEYER_WRONG_INDEX_RECORDER_WRONG_INDEX_PARTSER_WRONG_INDEX_OPTIONSER_WRONG_SCHEMA_VERSIONER_MEMTX_MAX_TUPLE_SIZEER_WRONG_SPACE_OPTIONSER_UNSUPPORTED_INDEX_FEATUREER_VIEW_IS_ROER_NO_TRANSACTIONER_SYSTEMER_LOADINGER_CONNECTION_TO_SELFER_KEY_PART_IS_TOO_LONGER_COMPRESSIONER_CHECKPOINT_IN_PROGRESSER_SUB_STMT_MAXER_COMMIT_IN_SUB_STMTER_ROLLBACK_IN_SUB_STMTER_DECOMPRESSIONER_INVALID_XLOG_TYPEER_ALREADY_RUNNINGER_INDEX_FIELD_COUNT_LIMITER_LOCAL_INSTANCE_ID_IS_READ_ONLYER_BACKUP_IN_PROGRESSER_READ_VIEW_ABORTEDER_INVALID_INDEX_FILEER_INVALID_RUN_FILEER_INVALID_VYLOG_FILEER_CASCADE_ROLLBACKER_VY_QUOTA_TIMEOUTER_PARTIAL_KEYER_TRUNCATE_SYSTEM_SPACEER_LOAD_MODULEER_VINYL_MAX_TUPLE_SIZEER_WRONG_DD_VERSIONER_WRONG_SPACE_FORMATER_CREATE_SEQUENCEER_ALTER_SEQUENCEER_DROP_SEQUENCEER_NO_SUCH_SEQUENCEER_SEQUENCE_EXISTSER_SEQUENCE_OVERFLOWER_NO_SUCH_INDEX_NAMEER_SPACE_FIELD_IS_DUPLICATEER_CANT_CREATE_COLLATIONER_WRONG_COLLATION_OPTIONSER_NULLABLE_PRIMARYER_NO_SUCH_FIELD_NAME_IN_SPACEER_TRANSACTION_YIELDER_NO_SUCH_GROUPER_SQL_BIND_VALUEER_SQL_BIND_TYPEER_SQL_BIND_PARAMETER_MAXER_SQL_EXECUTEER_UPDATE_DECIMAL_OVERFLOWER_SQL_BIND_NOT_FOUNDER_ACTION_MISMATCHER_VIEW_MISSING_SQLER_FOREIGN_KEY_CONSTRAINTER_NO_SUCH_MODULEER_NO_SUCH_COLLATIONER_CREATE_FK_CONSTRAINTER_DROP_FK_CONSTRAINTER_NO_SUCH_CONSTRAINTER_CONSTRAINT_EXISTSER_SQL_TYPE_MISMATCHER_ROWID_OVERFLOWER_DROP_COLLATIONER_ILLEGAL_COLLATION_MIXER_SQL_NO_SUCH_PRAGMAER_SQL_CANT_RESOLVE_FIELDER_INDEX_EXISTS_IN_SPACEER_INCONSISTENT_TYPESER_SQL_SYNTAX_WITH_POSER_SQL_STACK_OVERFLOWER_SQL_SELECT_WILDCARDER_SQL_STATEMENT_EMPTYER_SQL_KEYWORD_IS_RESERVEDER_SQL_SYNTAX_NEAR_TOKENER_SQL_UNKNOWN_TOKENER_SQL_PARSER_GENERICER_SQL_ANALYZE_ARGUMENTER_SQL_COLUMN_COUNT_MAXER_HEX_LITERAL_MAXER_INT_LITERAL_MAXER_SQL_PARSER_LIMITER_INDEX_DEF_UNSUPPORTEDER_CK_DEF_UNSUPPORTEDER_MULTIKEY_INDEX_MISMATCHER_CREATE_CK_CONSTRAINTER_CK_CONSTRAINT_FAILEDER_SQL_COLUMN_COUNTER_FUNC_INDEX_FUNCER_FUNC_INDEX_FORMATER_FUNC_INDEX_PARTSER_NO_SUCH_FIELD_NAMEER_FUNC_WRONG_ARG_COUNTER_BOOTSTRAP_READONLYER_SQL_FUNC_WRONG_RET_COUNTER_FUNC_INVALID_RETURN_TYPEER_SQL_PARSER_GENERIC_WITH_POSER_REPLICA_NOT_ANONER_CANNOT_REGISTERER_SESSION_SETTING_INVALID_VALUEER_SQL_PREPAREER_WRONG_QUERY_IDER_SEQUENCE_NOT_STARTEDER_NO_SUCH_SESSION_SETTINGER_UNCOMMITTED_FOREIGN_SYNC_TXNSER_SYNC_MASTER_MISMATCHER_SYNC_QUORUM_TIMEOUTER_SYNC_ROLLBACKER_TUPLE_METADATA_IS_TOO_BIGER_XLOG_GAPER_TOO_EARLY_SUBSCRIBEER_SQL_CANT_ADD_AUTOINCER_QUORUM_WAITER_INTERFERING_PROMOTEER_ELECTION_DISABLEDER_TXN_ROLLBACKER_NOT_LEADERER_SYNC_QUEUE_UNCLAIMEDER_SYNC_QUEUE_FOREIGNER_UNABLE_TO_PROCESS_IN_STREAMER_UNABLE_TO_PROCESS_OUT_OF_STREAMER_TRANSACTION_TIMEOUTER_ACTIVE_TIMERER_TUPLE_FIELD_COUNT_LIMITER_CREATE_CONSTRAINTER_FIELD_CONSTRAINT_FAILEDER_TUPLE_CONSTRAINT_FAILEDER_CREATE_FOREIGN_KEYER_FOREIGN_KEY_INTEGRITYER_FIELD_FOREIGN_KEY_FAILEDER_COMPLEX_FOREIGN_KEY_FAILEDER_WRONG_SPACE_UPGRADE_OPTIONSER_NO_ELECTION_QUORUMER_SSLER_SPLIT_BRAINER_OLD_TERMER_INTERFERING_ELECTIONSER_ITERATOR_POSITIONER_DEFAULT_VALUE_TYPEER_UNKNOWN_AUTH_METHODER_INVALID_AUTH_DATAER_INVALID_AUTH_REQUESTER_WEAK_PASSWORDER_OLD_PASSWORDER_NO_SUCH_SESSIONER_WRONG_SESSION_TYPEER_PASSWORD_EXPIREDER_AUTH_DELAYER_AUTH_REQUIREDER_SQL_SEQ_SCANER_NO_SUCH_EVENTER_BOOTSTRAP_NOT_UNANIMOUSER_CANT_CHECK_BOOTSTRAP_LEADERER_BOOTSTRAP_CONNECTION_NOT_TO_ALLER_NIL_UUIDER_WRONG_FUNCTION_OPTIONSER_MISSING_SYSTEM_SPACESER_CLUSTER_NAME_MISMATCHER_REPLICASET_NAME_MISMATCHER_INSTANCE_NAME_DUPLICATEER_INSTANCE_NAME_MISMATCHER_SCHEMA_NEEDS_UPGRADEER_SCHEMA_UPGRADE_IN_PROGRESSER_DEPRECATEDER_UNCONFIGUREDER_CREATE_DEFAULT_FUNCER_DEFAULT_FUNC_FAILEDER_INVALID_DECER_IN_ANOTHER_PROMOTEER_SHUTDOWNER_FIELD_VALUE_OUT_OF_RANGEER_REPLICASET_NOT_FOUNDER_REPLICASET_NO_WRITABLEER_REPLICASET_MORE_THAN_ONE_WRITABLEER_TXN_COMMITER_READ_VIEW_BUSYER_READ_VIEW_CLOSEDER_WAL_QUEUE_FULLER_INVALID_VCLOCKER_ARROW_IPC_ENCODEER_ARROW_IPC_DECODEER_SYNC_QUEUE_FULL"
 
-var _Error_index = [...]uint16{0, 10, 27, 42, 56, 74, 88, 100, 111, 123, 138, 153, 166, 180, 193, 208, 220, 241, 260, 276, 290, 308, 319, 337, 350, 377, 393, 411, 440, 460, 475, 496, 513, 524, 539, 557, 576, 592, 611, 631, 647, 656, 678, 694, 708, 720, 735, 749, 766, 789, 813, 831, 850, 868, 889, 918, 935, 946, 963, 976, 982, 1003, 1023, 1041, 1068, 1083, 1107, 1132, 1157, 1173, 1197, 1210, 1226, 1242, 1256, 1271, 1291, 1312, 1328, 1338, 1359, 1383, 1410, 1425, 1439, 1453, 1468, 1485, 1497, 1505, 1520, 1535, 1554, 1573, 1592, 1618, 1644, 1666, 1689, 1708, 1724, 1744, 1757, 1766, 1802, 1813, 1843, 1864, 1884, 1906, 1929, 1952, 1974, 2002, 2015, 2032, 2041, 2051, 2072, 2095, 2109, 2134, 2149, 2170, 2193, 2209, 2229, 2247, 2273, 2306, 2327, 2347, 2368, 2387, 2408, 2427, 2446, 2460, 2484, 2498, 2521, 2540, 2561, 2579, 2596, 2612, 2631, 2649, 2669, 2690, 2717, 2741, 2767, 2786, 2816, 2836, 2852, 2869, 2885, 2910, 2924, 2950, 2971, 2989, 3008, 3033, 3050, 3070, 3093, 3114, 3135, 3155, 3175, 3192, 3209, 3233, 3254, 3279, 3303, 3324, 3346, 3367, 3389, 3411, 3437, 3461, 3481, 3502, 3525, 3548, 3566, 3584, 3603, 3627, 3648, 3674, 3697, 3720, 3739, 3757, 3777, 3796, 3817, 3840, 3861, 3888, 3915, 3945, 3964, 3982, 4014, 4028, 4045, 4068, 4094, 4126, 4149, 4171, 4187, 4215, 4226, 4248, 4271, 4285, 4307, 4327, 4342, 4355, 4378, 4399, 4429, 4463, 4485, 4500, 4526, 4546, 4572, 4598, 4619, 4643, 4670, 4699, 4729, 4750, 4756, 4770, 4781, 4805, 4825, 4846, 4868, 4888, 4911, 4927, 4942, 4960, 4981, 5000, 5013, 5029, 5044, 5060, 5086, 5116, 5150, 5161, 5186, 5210, 5234, 5261, 5287, 5312, 5335, 5364, 5377, 5392, 5414, 5436, 5450, 5471}
+var _Error_index = [...]uint16{0, 10, 27, 42, 56, 74, 88, 100, 111, 123, 138, 153, 166, 180, 193, 208, 220, 241, 260, 276, 290, 308, 319, 337, 350, 377, 393, 411, 440, 460, 475, 496, 513, 524, 539, 557, 576, 592, 611, 631, 647, 656, 678, 694, 708, 720, 735, 749, 766, 789, 813, 831, 850, 868, 889, 918, 935, 946, 963, 976, 982, 1003, 1023, 1041, 1068, 1083, 1107, 1132, 1157, 1173, 1197, 1210, 1226, 1242, 1256, 1271, 1291, 1312, 1328, 1338, 1359, 1383, 1410, 1425, 1439, 1453, 1468, 1485, 1497, 1505, 1520, 1535, 1554, 1573, 1592, 1618, 1644, 1666, 1689, 1708, 1724, 1744, 1757, 1766, 1802, 1813, 1843, 1864, 1884, 1906, 1929, 1952, 1974, 2002, 2015, 2032, 2041, 2051, 2072, 2095, 2109, 2134, 2149, 2170, 2193, 2209, 2229, 2247, 2273, 2306, 2327, 2347, 2368, 2387, 2408, 2427, 2446, 2460, 2484, 2498, 2521, 2540, 2561, 2579, 2596, 2612, 2631, 2649, 2669, 2690, 2717, 2741, 2767, 2786, 2816, 2836, 2852, 2869, 2885, 2910, 2924, 2950, 2971, 2989, 3008, 3033, 3050, 3070, 3093, 3114, 3135, 3155, 3175, 3192, 3209, 3233, 3254, 3279, 3303, 3324, 3346, 3367, 3389, 3411, 3437, 3461, 3481, 3502, 3525, 3548, 3566, 3584, 3603, 3627, 3648, 3674, 3697, 3720, 3739, 3757, 3777, 3796, 3817, 3840, 3861, 3888, 3915, 3945, 3964, 3982, 4014, 4028, 4045, 4068, 4094, 4126, 4149, 4171, 4187, 4215, 4226, 4248, 4271, 4285, 4307, 4327, 4342, 4355, 4378, 4399, 4429, 4463, 4485, 4500, 4526, 4546, 4572, 4598, 4619, 4643, 4670, 4699, 4729, 4750, 4756, 4770, 4781, 4805, 4825, 4846, 4868, 4888, 4911, 4927, 4942, 4960, 4981, 5000, 5013, 5029, 5044, 5060, 5086, 5116, 5150, 5161, 5186, 5210, 5234, 5261, 5287, 5312, 5335, 5364, 5377, 5392, 5414, 5436, 5450, 5471, 5482, 5509, 5532, 5557, 5593, 5606, 5623, 5642, 5659, 5676, 5695, 5714, 5732}
 
 func (i Error) String() string {
 	if i < 0 || i >= Error(len(_Error_index)-1) {
diff --git a/error_test.go b/error_test.go
index 31d7ab8..2f9521b 100644
--- a/error_test.go
+++ b/error_test.go
@@ -292,6 +292,19 @@ func TestError(t *testing.T) {
 		{iproto.ER_DEFAULT_FUNC_FAILED, "ER_DEFAULT_FUNC_FAILED"},
 		{iproto.ER_INVALID_DEC, "ER_INVALID_DEC"},
 		{iproto.ER_IN_ANOTHER_PROMOTE, "ER_IN_ANOTHER_PROMOTE"},
+		{iproto.ER_SHUTDOWN, "ER_SHUTDOWN"},
+		{iproto.ER_FIELD_VALUE_OUT_OF_RANGE, "ER_FIELD_VALUE_OUT_OF_RANGE"},
+		{iproto.ER_REPLICASET_NOT_FOUND, "ER_REPLICASET_NOT_FOUND"},
+		{iproto.ER_REPLICASET_NO_WRITABLE, "ER_REPLICASET_NO_WRITABLE"},
+		{iproto.ER_REPLICASET_MORE_THAN_ONE_WRITABLE, "ER_REPLICASET_MORE_THAN_ONE_WRITABLE"},
+		{iproto.ER_TXN_COMMIT, "ER_TXN_COMMIT"},
+		{iproto.ER_READ_VIEW_BUSY, "ER_READ_VIEW_BUSY"},
+		{iproto.ER_READ_VIEW_CLOSED, "ER_READ_VIEW_CLOSED"},
+		{iproto.ER_WAL_QUEUE_FULL, "ER_WAL_QUEUE_FULL"},
+		{iproto.ER_INVALID_VCLOCK, "ER_INVALID_VCLOCK"},
+		{iproto.ER_ARROW_IPC_ENCODE, "ER_ARROW_IPC_ENCODE"},
+		{iproto.ER_ARROW_IPC_DECODE, "ER_ARROW_IPC_DECODE"},
+		{iproto.ER_SYNC_QUEUE_FULL, "ER_SYNC_QUEUE_FULL"},
 	}
 
 	for i, tc := range cases {
diff --git a/feature.go b/feature.go
index 80573cd..7cbcbe4 100644
--- a/feature.go
+++ b/feature.go
@@ -49,4 +49,13 @@ const (
 	// Tuples in IPROTO_TUPLE request field are encoded as MP_TUPLE and
 	// tuple formats are received in IPROTO_TUPLE_FORMATS field.
 	IPROTO_FEATURE_CALL_ARG_TUPLE_EXTENSION Feature = 9
+	// Cursor (for checkpoint join) in FETCH_SNAPSHOT support:
+	// IPROTO_IS_CHECKPOINT_JOIN, IPROTO_CHECKPOINT_VCLOCK and
+	// IRPOTO_CHECKPOINT_LSN.
+	IPROTO_FEATURE_FETCH_SNAPSHOT_CURSOR Feature = 10
+	// Synchronous transaction support:
+	// IS_SYNC flag in IPROTO_BEGIN, IPROTO_COMMIT
+	IPROTO_FEATURE_IS_SYNC Feature = 11
+	// Support of data insertion in Arrow format.
+	IPROTO_FEATURE_INSERT_ARROW Feature = 12
 )
diff --git a/feature_string.go b/feature_string.go
index 132e7f6..d8b1d3d 100644
--- a/feature_string.go
+++ b/feature_string.go
@@ -18,11 +18,14 @@ func _() {
 	_ = x[IPROTO_FEATURE_DML_TUPLE_EXTENSION-7]
 	_ = x[IPROTO_FEATURE_CALL_RET_TUPLE_EXTENSION-8]
 	_ = x[IPROTO_FEATURE_CALL_ARG_TUPLE_EXTENSION-9]
+	_ = x[IPROTO_FEATURE_FETCH_SNAPSHOT_CURSOR-10]
+	_ = x[IPROTO_FEATURE_IS_SYNC-11]
+	_ = x[IPROTO_FEATURE_INSERT_ARROW-12]
 }
 
-const _Feature_name = "IPROTO_FEATURE_STREAMSIPROTO_FEATURE_TRANSACTIONSIPROTO_FEATURE_ERROR_EXTENSIONIPROTO_FEATURE_WATCHERSIPROTO_FEATURE_PAGINATIONIPROTO_FEATURE_SPACE_AND_INDEX_NAMESIPROTO_FEATURE_WATCH_ONCEIPROTO_FEATURE_DML_TUPLE_EXTENSIONIPROTO_FEATURE_CALL_RET_TUPLE_EXTENSIONIPROTO_FEATURE_CALL_ARG_TUPLE_EXTENSION"
+const _Feature_name = "IPROTO_FEATURE_STREAMSIPROTO_FEATURE_TRANSACTIONSIPROTO_FEATURE_ERROR_EXTENSIONIPROTO_FEATURE_WATCHERSIPROTO_FEATURE_PAGINATIONIPROTO_FEATURE_SPACE_AND_INDEX_NAMESIPROTO_FEATURE_WATCH_ONCEIPROTO_FEATURE_DML_TUPLE_EXTENSIONIPROTO_FEATURE_CALL_RET_TUPLE_EXTENSIONIPROTO_FEATURE_CALL_ARG_TUPLE_EXTENSIONIPROTO_FEATURE_FETCH_SNAPSHOT_CURSORIPROTO_FEATURE_IS_SYNCIPROTO_FEATURE_INSERT_ARROW"
 
-var _Feature_index = [...]uint16{0, 22, 49, 79, 102, 127, 163, 188, 222, 261, 300}
+var _Feature_index = [...]uint16{0, 22, 49, 79, 102, 127, 163, 188, 222, 261, 300, 336, 358, 385}
 
 func (i Feature) String() string {
 	if i < 0 || i >= Feature(len(_Feature_index)-1) {
diff --git a/feature_test.go b/feature_test.go
index 19e4cc8..54c2276 100644
--- a/feature_test.go
+++ b/feature_test.go
@@ -25,6 +25,9 @@ func TestFeature(t *testing.T) {
 		{iproto.IPROTO_FEATURE_DML_TUPLE_EXTENSION, "IPROTO_FEATURE_DML_TUPLE_EXTENSION", 7},
 		{iproto.IPROTO_FEATURE_CALL_RET_TUPLE_EXTENSION, "IPROTO_FEATURE_CALL_RET_TUPLE_EXTENSION", 8},
 		{iproto.IPROTO_FEATURE_CALL_ARG_TUPLE_EXTENSION, "IPROTO_FEATURE_CALL_ARG_TUPLE_EXTENSION", 9},
+		{iproto.IPROTO_FEATURE_FETCH_SNAPSHOT_CURSOR, "IPROTO_FEATURE_FETCH_SNAPSHOT_CURSOR", 10},
+		{iproto.IPROTO_FEATURE_IS_SYNC, "IPROTO_FEATURE_IS_SYNC", 11},
+		{iproto.IPROTO_FEATURE_INSERT_ARROW, "IPROTO_FEATURE_INSERT_ARROW", 12},
 	}
 
 	for _, tc := range cases {
diff --git a/generate.sh b/generate.sh
index 7625848..9a6f50b 100755
--- a/generate.sh
+++ b/generate.sh
@@ -11,12 +11,12 @@ if [[ -z "${TT_REPO}" ]]; then
 	TT_REPO="https://github.com/tarantool/tarantool.git"
 fi
 
-TT_DIR=tarantool
+TT_DIR=tarantool-${TT_TAG}
 
 # Cleanup.
 rm -rf ${TT_DIR}
 
-git clone --depth 1 --branch ${TT_TAG} ${TT_REPO} -o ${TT_DIR}
+git clone --depth 1 --branch ${TT_TAG} ${TT_REPO} ${TT_DIR}
 cd ${TT_DIR}
 TT_COMMIT=$(git log -n 1 | head -n 1 | sed "s/commit //")
 cd ..
@@ -227,25 +227,30 @@ EOF
 echo "${FOOTER}" > ${DST_ERRORS}
 cat << EOF >> ${DST_ERRORS}
 // IPROTO error code constants, generated from
-// ${SRC_ERRORS}
+// ${SRC_ERRORS//-${TT_TAG}/}
 type Error int
 
 const (
 EOF
 
-grep "(ER_" ${SRC_ERRORS} | \
-	# Remove comments symbols.
-	sed "s/\/\*//" | \
-	sed "s/\*\/_(//" | \
-	# Remove and of values.
-	sed "s/) *\\\//" | \
-	# Remove comma at an end of a value.
-	sed "s/,/ /" | \
-	# Finally print parsed values in Golang format.
-	awk '{
-		com="";
-		for(i=3;i<=NF;i++){com=com" "$i};
-		printf("\t//%s\n\t%s Error = %s\n", com, $2, $1)
+# Extract body of define ERROR_CODES
+ERROR_CODES=`sed -n '/^#define ERROR_CODES(/,/This one should be last/{//!p;}' ${SRC_ERRORS}`
+
+echo "${ERROR_CODES}" | \
+	# Get line with ER_* description.
+	sed -nE 's/^[^E]*(ER_.+)\s*\\\s*$/\1/p'  | \
+	# Remove trailing parenthesis or comment's ending.
+	sed -E 's/(.*)\s*(:?\)|\*\/)\s*$/\1/' | \
+	# Extract three fields: name, id and first comment string.
+	# Match string based on https://regex101.com/library/zI0yV6
+	sed -E 's/^([^"]+)("([^"]|\\")*[^\\]"|"").*$/\1\2/' | \
+	# Format three fields comma separated for Go lang const declaration.
+	awk '
+	BEGIN{ FS=",[[:space:]]*" }
+	{
+		com=$3;
+		for(i=4; i<=NF; i++){ com=com", "$i };
+		printf("\t// %s\n\t%s Error = %s\n", com, $1, $2)
 	}' >> ${DST_ERRORS}
 
 echo ")" >> ${DST_ERRORS}
@@ -259,7 +264,7 @@ func TestError(t *testing.T) {
 	} {
 EOF
 
-grep -o "ER_[A-Z0-9_]\+," ${SRC_ERRORS} | \
+echo "${ERROR_CODES}" | grep -o "ER_[A-Z0-9_]\+," | \
 	sed "s/,$//" | \
 	awk '{printf("\t\t{iproto.%s, \"%s\"},\n", $1, $1)}' >> ${DST_ERRORS_TEST}
 
@@ -286,7 +291,7 @@ EOF
 echo "${FOOTER}" > ${DST_FEATURES}
 cat << EOF >> ${DST_FEATURES}
 // IPROTO feature constants, generated from
-// ${SRC_FEATURES}
+// ${SRC_FEATURES//-${TT_TAG}/}
 EOF
 
 read_define_with_prefix IPROTO_FEATURES iproto_feature_id ${SRC_FEATURES} | \
@@ -304,7 +309,7 @@ read_define_with_prefix IPROTO_FEATURES iproto_feature_id ${SRC_FEATURES} | \
 echo "${FOOTER}" > ${DST_FLAGS}
 cat << EOF >> ${DST_FLAGS}
 // IPROTO flag constants, generated from
-// ${SRC_CONST}
+// ${SRC_CONST//-${TT_TAG}/}
 EOF
 
 read_define_with_prefix IPROTO_FLAGS iproto_flag ${SRC_CONST} | \
@@ -322,7 +327,7 @@ read_define_with_prefix IPROTO_FLAGS iproto_flag ${SRC_CONST} | \
 echo "${FOOTER}" > ${DST_ITERATORS}
 cat << EOF >> ${DST_ITERATORS}
 // IPROTO iterators constants, generated from
-// ${SRC_ITERATORS}
+// ${SRC_ITERATORS//-${TT_TAG}/}
 EOF
 
 read_enum iterator_type ${SRC_ITERATORS} | \
@@ -340,7 +345,7 @@ read_enum iterator_type ${SRC_ITERATORS} | \
 echo "${FOOTER}" > ${DST_TYPES}
 cat << EOF >> ${DST_TYPES}
 // IPROTO type constants, generated from
-// ${SRC_CONST}
+// ${SRC_CONST//-${TT_TAG}/}
 EOF
 
 read_define_with_prefix IPROTO_TYPES iproto_type ${SRC_CONST} | \
@@ -358,7 +363,7 @@ read_define_with_prefix IPROTO_TYPES iproto_type ${SRC_CONST} | \
 echo "${FOOTER}" > ${DST_KEYS}
 cat << EOF >> ${DST_KEYS}
 // IPROTO key constants, generated from
-// ${SRC_CONST}
+// ${SRC_CONST//-${TT_TAG}/}
 EOF
 
 read_define_with_prefix IPROTO_KEYS iproto_key ${SRC_CONST} | \
@@ -367,7 +372,7 @@ read_define_with_prefix IPROTO_KEYS iproto_key ${SRC_CONST} | \
 cat << EOF >> ${DST_KEYS}
 
 // IPROTO metadata key constants, generated from
-// ${SRC_CONST}
+// ${SRC_CONST//-${TT_TAG}/}
 EOF
 
 read_define_with_prefix IPROTO_METADATA_KEYS iproto_metadata_key ${SRC_CONST} | \
@@ -376,7 +381,7 @@ read_define_with_prefix IPROTO_METADATA_KEYS iproto_metadata_key ${SRC_CONST} |
 cat << EOF >> ${DST_KEYS}
 
 // IPROTO ballot key constants, generated from
-// ${SRC_CONST}
+// ${SRC_CONST//-${TT_TAG}/}
 EOF
 
 read_define_with_prefix IPROTO_BALLOT_KEYS iproto_ballot_key ${SRC_CONST} | \
@@ -385,7 +390,7 @@ read_define_with_prefix IPROTO_BALLOT_KEYS iproto_ballot_key ${SRC_CONST} | \
 cat << EOF >> ${DST_KEYS}
 
 // IPROTO raft key constants, generated from
-// ${SRC_CONST}
+// ${SRC_CONST//-${TT_TAG}/}
 EOF
 
 read_define_with_prefix IPROTO_RAFT_KEYS iproto_raft_key ${SRC_CONST} | \
@@ -394,7 +399,7 @@ read_define_with_prefix IPROTO_RAFT_KEYS iproto_raft_key ${SRC_CONST} | \
 cat << EOF >> ${DST_KEYS}
 
 // IPROTO SQL info key constants, generated from
-// ${SRC_EXECUTE}
+// ${SRC_EXECUTE//-${TT_TAG}/}
 EOF
 
 read_enum sql_info_key ${SRC_EXECUTE} | \
diff --git a/iterator.go b/iterator.go
index 40251e3..de0b22c 100644
--- a/iterator.go
+++ b/iterator.go
@@ -19,5 +19,7 @@ const (
 	ITER_BITS_ANY_SET     Iterator = 8  // at least one x's bit is set
 	ITER_BITS_ALL_NOT_SET Iterator = 9  // all bits are not set
 	ITER_OVERLAPS         Iterator = 10 // key overlaps x
-	ITER_NEIGHBOR         Iterator = 11 // tuples in distance ascending order from specified point
+	ITER_NEIGHBOR         Iterator = 11 // tuples as they move away from x point
+	ITER_NP               Iterator = 12 // next prefix, ASC order
+	ITER_PP               Iterator = 13 // previous prefix, DESC order
 )
diff --git a/iterator_string.go b/iterator_string.go
index c9c4e6d..b5d8bd1 100644
--- a/iterator_string.go
+++ b/iterator_string.go
@@ -20,11 +20,13 @@ func _() {
 	_ = x[ITER_BITS_ALL_NOT_SET-9]
 	_ = x[ITER_OVERLAPS-10]
 	_ = x[ITER_NEIGHBOR-11]
+	_ = x[ITER_NP-12]
+	_ = x[ITER_PP-13]
 }
 
-const _Iterator_name = "ITER_EQITER_REQITER_ALLITER_LTITER_LEITER_GEITER_GTITER_BITS_ALL_SETITER_BITS_ANY_SETITER_BITS_ALL_NOT_SETITER_OVERLAPSITER_NEIGHBOR"
+const _Iterator_name = "ITER_EQITER_REQITER_ALLITER_LTITER_LEITER_GEITER_GTITER_BITS_ALL_SETITER_BITS_ANY_SETITER_BITS_ALL_NOT_SETITER_OVERLAPSITER_NEIGHBORITER_NPITER_PP"
 
-var _Iterator_index = [...]uint8{0, 7, 15, 23, 30, 37, 44, 51, 68, 85, 106, 119, 132}
+var _Iterator_index = [...]uint8{0, 7, 15, 23, 30, 37, 44, 51, 68, 85, 106, 119, 132, 139, 146}
 
 func (i Iterator) String() string {
 	if i < 0 || i >= Iterator(len(_Iterator_index)-1) {
diff --git a/iterator_test.go b/iterator_test.go
index a98249c..fb39c90 100644
--- a/iterator_test.go
+++ b/iterator_test.go
@@ -27,6 +27,8 @@ func TestIterator(t *testing.T) {
 		{iproto.ITER_BITS_ALL_NOT_SET, "ITER_BITS_ALL_NOT_SET", 9},
 		{iproto.ITER_OVERLAPS, "ITER_OVERLAPS", 10},
 		{iproto.ITER_NEIGHBOR, "ITER_NEIGHBOR", 11},
+		{iproto.ITER_NP, "ITER_NP", 12},
+		{iproto.ITER_PP, "ITER_PP", 13},
 	}
 
 	for _, tc := range cases {
diff --git a/keys.go b/keys.go
index 51176d0..315e528 100644
--- a/keys.go
+++ b/keys.go
@@ -70,6 +70,9 @@ const (
 	IPROTO_BIND_COUNT    Key = 0x34
 	// Position of last selected tuple in response.
 	IPROTO_POSITION Key = 0x35
+	// Also request keys. See the comment above.
+	// The data in Arrow format.
+	IPROTO_ARROW Key = 0x36
 	// Leave a gap between response keys and SQL keys.
 	IPROTO_SQL_TEXT Key = 0x40
 	IPROTO_SQL_BIND Key = 0x41
@@ -119,6 +122,15 @@ const (
 	IPROTO_TUPLE_FORMATS Key = 0x60
 	// Flag indicating whether the transaction is synchronous.
 	IPROTO_IS_SYNC Key = 0x61
+	// Flag indicating whether checkpoint join should be done.
+	IPROTO_IS_CHECKPOINT_JOIN Key = 0x62
+	// Shows the signature of the checkpoint to read from.
+	// Requires CHECKPOINT_JOIN to be true.
+	IPROTO_CHECKPOINT_VCLOCK Key = 0x63
+	// Shows the lsn to start sending from. Server sends all rows
+	// >= IPROTO_CHECKPOINT_LSN. Requires CHECKPOINT_JOIN to be
+	// true and CHECKPOINT_VCLOCK to be set.
+	IPROTO_CHECKPOINT_LSN Key = 0x64
 )
 
 // IPROTO metadata key constants, generated from
diff --git a/keys_string.go b/keys_string.go
index c667822..34c9980 100644
--- a/keys_string.go
+++ b/keys_string.go
@@ -48,6 +48,7 @@ func _() {
 	_ = x[IPROTO_BIND_METADATA-51]
 	_ = x[IPROTO_BIND_COUNT-52]
 	_ = x[IPROTO_POSITION-53]
+	_ = x[IPROTO_ARROW-54]
 	_ = x[IPROTO_SQL_TEXT-64]
 	_ = x[IPROTO_SQL_BIND-65]
 	_ = x[IPROTO_SQL_INFO-66]
@@ -70,22 +71,25 @@ func _() {
 	_ = x[IPROTO_INDEX_NAME-95]
 	_ = x[IPROTO_TUPLE_FORMATS-96]
 	_ = x[IPROTO_IS_SYNC-97]
+	_ = x[IPROTO_IS_CHECKPOINT_JOIN-98]
+	_ = x[IPROTO_CHECKPOINT_VCLOCK-99]
+	_ = x[IPROTO_CHECKPOINT_LSN-100]
 }
 
 const (
 	_Key_name_0 = "IPROTO_REQUEST_TYPEIPROTO_SYNCIPROTO_REPLICA_IDIPROTO_LSNIPROTO_TIMESTAMPIPROTO_SCHEMA_VERSIONIPROTO_SERVER_VERSIONIPROTO_GROUP_IDIPROTO_TSNIPROTO_FLAGSIPROTO_STREAM_ID"
 	_Key_name_1 = "IPROTO_SPACE_IDIPROTO_INDEX_IDIPROTO_LIMITIPROTO_OFFSETIPROTO_ITERATORIPROTO_INDEX_BASE"
-	_Key_name_2 = "IPROTO_FETCH_POSITIONIPROTO_KEYIPROTO_TUPLEIPROTO_FUNCTION_NAMEIPROTO_USER_NAMEIPROTO_INSTANCE_UUIDIPROTO_REPLICASET_UUIDIPROTO_VCLOCKIPROTO_EXPRIPROTO_OPSIPROTO_BALLOTIPROTO_TUPLE_METAIPROTO_OPTIONSIPROTO_OLD_TUPLEIPROTO_NEW_TUPLEIPROTO_AFTER_POSITIONIPROTO_AFTER_TUPLEIPROTO_DATAIPROTO_ERROR_24IPROTO_METADATAIPROTO_BIND_METADATAIPROTO_BIND_COUNTIPROTO_POSITION"
+	_Key_name_2 = "IPROTO_FETCH_POSITIONIPROTO_KEYIPROTO_TUPLEIPROTO_FUNCTION_NAMEIPROTO_USER_NAMEIPROTO_INSTANCE_UUIDIPROTO_REPLICASET_UUIDIPROTO_VCLOCKIPROTO_EXPRIPROTO_OPSIPROTO_BALLOTIPROTO_TUPLE_METAIPROTO_OPTIONSIPROTO_OLD_TUPLEIPROTO_NEW_TUPLEIPROTO_AFTER_POSITIONIPROTO_AFTER_TUPLEIPROTO_DATAIPROTO_ERROR_24IPROTO_METADATAIPROTO_BIND_METADATAIPROTO_BIND_COUNTIPROTO_POSITIONIPROTO_ARROW"
 	_Key_name_3 = "IPROTO_SQL_TEXTIPROTO_SQL_BINDIPROTO_SQL_INFOIPROTO_STMT_ID"
-	_Key_name_4 = "IPROTO_REPLICA_ANONIPROTO_ID_FILTERIPROTO_ERRORIPROTO_TERMIPROTO_VERSIONIPROTO_FEATURESIPROTO_TIMEOUTIPROTO_EVENT_KEYIPROTO_EVENT_DATAIPROTO_TXN_ISOLATIONIPROTO_VCLOCK_SYNCIPROTO_AUTH_TYPEIPROTO_REPLICASET_NAMEIPROTO_INSTANCE_NAMEIPROTO_SPACE_NAMEIPROTO_INDEX_NAMEIPROTO_TUPLE_FORMATSIPROTO_IS_SYNC"
+	_Key_name_4 = "IPROTO_REPLICA_ANONIPROTO_ID_FILTERIPROTO_ERRORIPROTO_TERMIPROTO_VERSIONIPROTO_FEATURESIPROTO_TIMEOUTIPROTO_EVENT_KEYIPROTO_EVENT_DATAIPROTO_TXN_ISOLATIONIPROTO_VCLOCK_SYNCIPROTO_AUTH_TYPEIPROTO_REPLICASET_NAMEIPROTO_INSTANCE_NAMEIPROTO_SPACE_NAMEIPROTO_INDEX_NAMEIPROTO_TUPLE_FORMATSIPROTO_IS_SYNCIPROTO_IS_CHECKPOINT_JOINIPROTO_CHECKPOINT_VCLOCKIPROTO_CHECKPOINT_LSN"
 )
 
 var (
 	_Key_index_0 = [...]uint8{0, 19, 30, 47, 57, 73, 94, 115, 130, 140, 152, 168}
 	_Key_index_1 = [...]uint8{0, 15, 30, 42, 55, 70, 87}
-	_Key_index_2 = [...]uint16{0, 21, 31, 43, 63, 79, 99, 121, 134, 145, 155, 168, 185, 199, 215, 231, 252, 270, 281, 296, 311, 331, 348, 363}
+	_Key_index_2 = [...]uint16{0, 21, 31, 43, 63, 79, 99, 121, 134, 145, 155, 168, 185, 199, 215, 231, 252, 270, 281, 296, 311, 331, 348, 363, 375}
 	_Key_index_3 = [...]uint8{0, 15, 30, 45, 59}
-	_Key_index_4 = [...]uint16{0, 19, 35, 47, 58, 72, 87, 101, 117, 134, 154, 172, 188, 210, 230, 247, 264, 284, 298}
+	_Key_index_4 = [...]uint16{0, 19, 35, 47, 58, 72, 87, 101, 117, 134, 154, 172, 188, 210, 230, 247, 264, 284, 298, 323, 347, 368}
 )
 
 func (i Key) String() string {
@@ -95,13 +99,13 @@ func (i Key) String() string {
 	case 16 <= i && i <= 21:
 		i -= 16
 		return _Key_name_1[_Key_index_1[i]:_Key_index_1[i+1]]
-	case 31 <= i && i <= 53:
+	case 31 <= i && i <= 54:
 		i -= 31
 		return _Key_name_2[_Key_index_2[i]:_Key_index_2[i+1]]
 	case 64 <= i && i <= 67:
 		i -= 64
 		return _Key_name_3[_Key_index_3[i]:_Key_index_3[i+1]]
-	case 80 <= i && i <= 97:
+	case 80 <= i && i <= 100:
 		i -= 80
 		return _Key_name_4[_Key_index_4[i]:_Key_index_4[i+1]]
 	default:
diff --git a/keys_test.go b/keys_test.go
index 8dfdab4..6fc66fa 100644
--- a/keys_test.go
+++ b/keys_test.go
@@ -55,6 +55,7 @@ func TestKey(t *testing.T) {
 		{iproto.IPROTO_BIND_METADATA, "IPROTO_BIND_METADATA", 0x33},
 		{iproto.IPROTO_BIND_COUNT, "IPROTO_BIND_COUNT", 0x34},
 		{iproto.IPROTO_POSITION, "IPROTO_POSITION", 0x35},
+		{iproto.IPROTO_ARROW, "IPROTO_ARROW", 0x36},
 		{iproto.IPROTO_SQL_TEXT, "IPROTO_SQL_TEXT", 0x40},
 		{iproto.IPROTO_SQL_BIND, "IPROTO_SQL_BIND", 0x41},
 		{iproto.IPROTO_SQL_INFO, "IPROTO_SQL_INFO", 0x42},
@@ -77,6 +78,9 @@ func TestKey(t *testing.T) {
 		{iproto.IPROTO_INDEX_NAME, "IPROTO_INDEX_NAME", 0x5f},
 		{iproto.IPROTO_TUPLE_FORMATS, "IPROTO_TUPLE_FORMATS", 0x60},
 		{iproto.IPROTO_IS_SYNC, "IPROTO_IS_SYNC", 0x61},
+		{iproto.IPROTO_IS_CHECKPOINT_JOIN, "IPROTO_IS_CHECKPOINT_JOIN", 0x62},
+		{iproto.IPROTO_CHECKPOINT_VCLOCK, "IPROTO_CHECKPOINT_VCLOCK", 0x63},
+		{iproto.IPROTO_CHECKPOINT_LSN, "IPROTO_CHECKPOINT_LSN", 0x64},
 	}
 
 	for _, tc := range cases {
diff --git a/type.go b/type.go
index b676d5d..518ffd7 100644
--- a/type.go
+++ b/type.go
@@ -41,7 +41,9 @@ const (
 	IPROTO_COMMIT Type = 15
 	// Rollback transaction
 	IPROTO_ROLLBACK Type = 16
-	IPROTO_RAFT     Type = 30
+	// INSERT Arrow request.
+	IPROTO_INSERT_ARROW Type = 17
+	IPROTO_RAFT         Type = 30
 	// PROMOTE request.
 	IPROTO_RAFT_PROMOTE Type = 31
 	// DEMOTE request.
@@ -104,7 +106,7 @@ const (
 	// Used for overriding the unknown request handler
 	IPROTO_UNKNOWN Type = -1
 	// The maximum typecode used for box.stat()
-	IPROTO_TYPE_STAT_MAX Type = IPROTO_ROLLBACK + 1
+	IPROTO_TYPE_STAT_MAX Type = IPROTO_INSERT_ARROW + 1
 	// Vinyl run info stored in .index file
 	VY_INDEX_RUN_INFO Type = 100
 	// Vinyl page info stored in .index file
diff --git a/type_string.go b/type_string.go
index b863c12..28dfda5 100644
--- a/type_string.go
+++ b/type_string.go
@@ -25,6 +25,7 @@ func _() {
 	_ = x[IPROTO_BEGIN-14]
 	_ = x[IPROTO_COMMIT-15]
 	_ = x[IPROTO_ROLLBACK-16]
+	_ = x[IPROTO_INSERT_ARROW-17]
 	_ = x[IPROTO_RAFT-30]
 	_ = x[IPROTO_RAFT_PROMOTE-31]
 	_ = x[IPROTO_RAFT_DEMOTE-32]
@@ -47,14 +48,14 @@ func _() {
 	_ = x[IPROTO_CHUNK-128]
 	_ = x[IPROTO_TYPE_ERROR-32768]
 	_ = x[IPROTO_UNKNOWN - -1]
-	_ = x[IPROTO_TYPE_STAT_MAX-17]
+	_ = x[IPROTO_TYPE_STAT_MAX-18]
 	_ = x[VY_INDEX_RUN_INFO-100]
 	_ = x[VY_INDEX_PAGE_INFO-101]
 	_ = x[VY_RUN_ROW_INDEX-102]
 }
 
 const (
-	_Type_name_0 = "IPROTO_UNKNOWNIPROTO_OKIPROTO_SELECTIPROTO_INSERTIPROTO_REPLACEIPROTO_UPDATEIPROTO_DELETEIPROTO_CALL_16IPROTO_AUTHIPROTO_EVALIPROTO_UPSERTIPROTO_CALLIPROTO_EXECUTEIPROTO_NOPIPROTO_PREPAREIPROTO_BEGINIPROTO_COMMITIPROTO_ROLLBACKIPROTO_TYPE_STAT_MAX"
+	_Type_name_0 = "IPROTO_UNKNOWNIPROTO_OKIPROTO_SELECTIPROTO_INSERTIPROTO_REPLACEIPROTO_UPDATEIPROTO_DELETEIPROTO_CALL_16IPROTO_AUTHIPROTO_EVALIPROTO_UPSERTIPROTO_CALLIPROTO_EXECUTEIPROTO_NOPIPROTO_PREPAREIPROTO_BEGINIPROTO_COMMITIPROTO_ROLLBACKIPROTO_INSERT_ARROWIPROTO_TYPE_STAT_MAX"
 	_Type_name_1 = "IPROTO_RAFTIPROTO_RAFT_PROMOTEIPROTO_RAFT_DEMOTE"
 	_Type_name_2 = "IPROTO_RAFT_CONFIRMIPROTO_RAFT_ROLLBACK"
 	_Type_name_3 = "IPROTO_PINGIPROTO_JOINIPROTO_SUBSCRIBEIPROTO_VOTE_DEPRECATEDIPROTO_VOTEIPROTO_FETCH_SNAPSHOTIPROTO_REGISTERIPROTO_JOIN_METAIPROTO_JOIN_SNAPSHOTIPROTO_IDIPROTO_WATCHIPROTO_UNWATCHIPROTO_EVENTIPROTO_WATCH_ONCE"
@@ -64,7 +65,7 @@ const (
 )
 
 var (
-	_Type_index_0 = [...]uint8{0, 14, 23, 36, 49, 63, 76, 89, 103, 114, 125, 138, 149, 163, 173, 187, 199, 212, 227, 247}
+	_Type_index_0 = [...]uint16{0, 14, 23, 36, 49, 63, 76, 89, 103, 114, 125, 138, 149, 163, 173, 187, 199, 212, 227, 246, 266}
 	_Type_index_1 = [...]uint8{0, 11, 30, 48}
 	_Type_index_2 = [...]uint8{0, 19, 39}
 	_Type_index_3 = [...]uint8{0, 11, 22, 38, 60, 71, 92, 107, 123, 143, 152, 164, 178, 190, 207}
@@ -73,7 +74,7 @@ var (
 
 func (i Type) String() string {
 	switch {
-	case -1 <= i && i <= 17:
+	case -1 <= i && i <= 18:
 		i -= -1
 		return _Type_name_0[_Type_index_0[i]:_Type_index_0[i+1]]
 	case 30 <= i && i <= 32:
diff --git a/type_test.go b/type_test.go
index 5796239..7bb5946 100644
--- a/type_test.go
+++ b/type_test.go
@@ -32,6 +32,7 @@ func TestType(t *testing.T) {
 		{iproto.IPROTO_BEGIN, "IPROTO_BEGIN", 14},
 		{iproto.IPROTO_COMMIT, "IPROTO_COMMIT", 15},
 		{iproto.IPROTO_ROLLBACK, "IPROTO_ROLLBACK", 16},
+		{iproto.IPROTO_INSERT_ARROW, "IPROTO_INSERT_ARROW", 17},
 		{iproto.IPROTO_RAFT, "IPROTO_RAFT", 30},
 		{iproto.IPROTO_RAFT_PROMOTE, "IPROTO_RAFT_PROMOTE", 31},
 		{iproto.IPROTO_RAFT_DEMOTE, "IPROTO_RAFT_DEMOTE", 32},
@@ -54,7 +55,7 @@ func TestType(t *testing.T) {
 		{iproto.IPROTO_CHUNK, "IPROTO_CHUNK", 128},
 		{iproto.IPROTO_TYPE_ERROR, "IPROTO_TYPE_ERROR", 1 << 15},
 		{iproto.IPROTO_UNKNOWN, "IPROTO_UNKNOWN", -1},
-		{iproto.IPROTO_TYPE_STAT_MAX, "IPROTO_TYPE_STAT_MAX", int(iproto.IPROTO_ROLLBACK) + 1},
+		{iproto.IPROTO_TYPE_STAT_MAX, "IPROTO_TYPE_STAT_MAX", int(iproto.IPROTO_INSERT_ARROW) + 1},
 		{iproto.VY_INDEX_RUN_INFO, "VY_INDEX_RUN_INFO", 100},
 		{iproto.VY_INDEX_PAGE_INFO, "VY_INDEX_PAGE_INFO", 101},
 		{iproto.VY_RUN_ROW_INDEX, "VY_RUN_ROW_INDEX", 102},