рдЯрд╛рд░рдирдЯреВрд▓ рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓


рдЯрд╛рд░реЗрдВрдЯреВрд▓ Mail.Ru рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдорд╣рд╛рди рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдиреЛ-рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рдорд╛рдзрд╛рди рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЛ рдХреБрдВрдЬреА / рдорд╛рди рдореЛрдб рдФрд░ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдорд╛рдкрджрдВрдб (рдЦреЛрдЬ рдлрд╝реАрд▓реНрдб) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рд┐рдХреЙрд░реНрдбрд╕реЗрдЯ рдореЗрдВ рдХрдИ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЪрдпрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред RuNet рдореЗрдВ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдФрд░ рди рдХреЗрд╡рд▓, рдореИрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реВрдВред рдПрдХ рдЦрд┐рдВрдЪрд╛рд╡ рдХреЗ рд╕рд╛рде, рдЖрдк рдореВрд▓реА рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореВрд▓реА рдореЗрдВ - рд╕реВрдЪреА рдбреЗрдЯрд╛ рдФрд░ рд╡реЗ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдЪрдпрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рджрд╛рд╡реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореЗрдо рддрдХ рдкрд╣реБрдВрдЪ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдВрдЬреА рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рддреЗрдЬ рд╣реИ, рдЬрдмрдХрд┐ рдкрд┐рдЫрд▓реЗ рджрд░рд╡рд╛рдЬреЗ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдкрд░реНрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдРрд╕реА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдбрд┐рд╕ рдпрд╛ рдореЗрдорд╛рд╢реЗред

рдбреЙрдХреНрдЯрд░ / рдмреЙрдХреНрд╕-рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реА рдФрд░ рдкреАрдПрдЪрдкреА рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдореВрд▓ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред


рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ MySQL рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИред рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдбрд┐рдЬрд┐рдЯрд▓ (0, 1, 2, рдЖрджрд┐) рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рд╕реНрдерд╛рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рднреА рдбрд┐рдЬрд┐рдЯрд▓ рд╣реИред рд╕реВрдЪрдХрд╛рдВрдХ рдПрдХ рдпрд╛ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдЖрд░реЛрдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕реВрдЪрдХрд╛рдВрдХ рдПрдЪрдПрдПрд╕рдПрдЪ рдпрд╛ рдЯреАрдЖрд░рдИрдИ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рд╕рднреА рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдирд╛рдо рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рджреЛ рд╕реВрдЪрдХрд╛рдВрдХ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдбрд┐рдЬрд┐рдЯрд▓ рдФрд░ рдЪрд░рд┐рддреНрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреВрд╕рд░рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╕рдВрдпреБрдХреНрдд рд╣реИ: namespace[0].enabled = 1
namespace[0].index[0].type = "HASH"
namespace[0].index[0].unique = 1
namespace[0].index[0].key_field[0].fieldno = 0
namespace[0].index[0].key_field[0].type = "NUM"
namespace[0].index[0].key_field[1].fieldno = 1
namespace[0].index[1].type = "TREE"
namespace[0].index[1].key_field[0].fieldno = 0
namespace[0].index[1].key_field[0].type = "STR"
namespace[0].index[1].key_field[1].fieldno = 1
namespace[0].enabled = 1
namespace[0].index[0].type = "HASH"
namespace[0].index[0].unique = 1
namespace[0].index[0].key_field[0].fieldno = 0
namespace[0].index[0].key_field[0].type = "NUM"
namespace[0].index[0].key_field[1].fieldno = 1
namespace[0].index[1].type = "TREE"
namespace[0].index[1].key_field[0].fieldno = 0
namespace[0].index[1].key_field[0].type = "STR"
namespace[0].index[1].key_field[1].fieldno = 1

рдпрд╣ рдЪрд╛рдмрд┐рдпрд╛рдБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдВрдЬреА рдбрд┐рдЬрд┐рдЯрд▓ (1,2,3 ... 6.2 * 10 ^ 9) рдпрд╛ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЧрд╛рдбрд╝реА рдЦреЗрддреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдХреНрд╖реЗрддреНрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдпрд╛ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╡рд┐рдирд┐рдордп рд╕рдВрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯрд╛рд░рдирдЯреВрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдиреБрд░реЛрдз рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдХ рд╣реЗрдбрд░ рд╣реИрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмреЙрдбреА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╕рдВрджреЗрд╢ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░, рд╢рд░реАрд░ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рдЕрдиреБрд░реЛрдз рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред

рд╢реАрд░реНрд╖ рд▓реЗрдЦ рд╕рдВрд░рдЪрдирд╛:
 <blockquote> рдЯрд╛рдЗрдкрдбрд┐рдл рд╕рдВрд░рдЪрдирд╛ {
		 uint32_t рдкреНрд░рдХрд╛рд░;
		 uint32_t рд▓реЗрди;
		 uint32_t request_id;
 } рд╣реИрдбрд░;
 </ Blockquote> 

рдирд┐рдореНрди рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ:
INSERT 0xd (13)
рдЪрдпрдирд┐рдд 0x11 (17)
рдЕрджреНрдпрддрди 0x13 (19)
DELETE 0x14 (29)
рдкрд┐рдВрдЧ 0xff 0xff 0x0 0x0 (65280)

рдЕрдиреБрд░реЛрдз рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдз рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛:
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 рд╣реЗрдбрд░ рд╣реЗрдбрд░
	 рд╕рдВрдШ {
		 рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛;
		 SelectRequest select;
		 UpdateRequest рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ;
		 DeleteRequest рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ;
	 };
 } рдЕрдиреБрд░реЛрдз; 


рдкрд┐рдВрдЧ рдХрдорд╛рдВрдб рдХрд╛ рдХреЛрдИ рд╢рд░реАрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдкрд┐рдВрдЧрд░реЗрд╕рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рд╣реИ;)

INSERT рдХрдорд╛рдВрдб рдХреЗ рдирд┐рдХрд╛рдп рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдзреНрд╡рдЬ рдФрд░ рдЯреНрдпреВрд▓ред

namespace - рдпрд╣ рд╡рд╣ рд╕реНрдерд╛рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреБрдкрд▓реНрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдирд╛рдо рд╕реНрдерд╛рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдбрд┐рдЬрд┐рдЯрд▓ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░, рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ (PRIMARY) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдзреНрд╡рдЬ BOX_RETURN_TUPLE (0x01) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
INSERT рдЕрдиреБрд░реЛрдз рдХреА рд╕рдВрд░рдЪрдирд╛:
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 uint32_t namespaceNo;
	 uint32_t рдЭрдВрдбрд╛;
	 рдЯрдкрд▓ рдЯрдкрд▓;
 } рдЗрдиреНрд╕рдЯреНрд░рдХреНрд╡реЗрд╕реНрдЯ; 


рд╕рднреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреБрдкрд▓ рдЯреНрдпреВрдкрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЯрдкрд▓ рдореЗрдВ рдХрд╛рд░реНрдбрд┐рдиреИрд▓рд┐рдЯреА рдлрд╝реАрд▓реНрдб рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЯрдкрд▓ рдХреЗ рдЖрдпрд╛рдо (рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛) рдФрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 uint32_t рдХрд╛рд░реНрдб;
	 рдореИрджрд╛рди рдХрд╛ рдореИрджрд╛рди [];
 } рдЯрдкрд▓; 


рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: int32, int64, рдпрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдзрд╛рд░рд╛ред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВрдиреЗ рдРрд╕рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
рдЯрд╛рдЗрдкрдбрд┐рдл рдлреАрд▓реНрдб u_char * рдбреЗрдЯрд╛;

рд╕рднреА рдлрд╝реАрд▓реНрдб рдбреЗрдЯрд╛ LED128 en.wikipedia.org/wiki/LEB128 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рд╕реЗрд▓реЗрдХреНрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреЗ рдмреЙрдбреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдиреЗрдорд╕реНрдкреЗрд╕ рдирдВрдмрд░, рдЗрдВрдбреЗрдХреНрд╕ рдирдВрдмрд░ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реИрдВрдкрд▓рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рдСрдлрд╕реЗрдЯ рдСрдлрд╕реЗрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рд╛рдЗрдЬ рд▓рд┐рдорд┐рдЯ, рдФрд░ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЦреБрдж рдХреЛ рдЯреНрдпреВрдкрд▓ред рдСрдлрд╕реЗрдЯ рдФрд░ рд╕реАрдорд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЪрдпрди рдХреЗ рд╕рдорд╛рди рд╣реИрдВ: рдЪрдпрди рдХрд░реЗрдВ * рд╕реЗ ... рд╕реАрдорд╛

  рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 uint32_t namespaceNo;
	 uint32_t indexNo;
	 uint32_t рдСрдлрд╕реЗрдЯ;
	 uint32_t рд╕реАрдорд╛;
	 uint32_t рдЧрд┐рдирддреА;
	 рдЯреБрдкреНрдкрд▓ рдЯреБрдкрд▓реНрд╕ [];
 } SelectRequest; 


рдпрджрд┐ рд╣рдо SELECT * FROM t0 WHERE k0 = 1 рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ tuples = 1 рдФрд░ Tuple рдорд╛рди рдХреА рд╕рдВрдЦреНрдпрд╛ 1 рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдПрдХ рджреНрд╡рд┐рддреАрдпрдХ рд╕рдВрдпреБрдХреНрдд рд╕реВрдЪрдХрд╛рдВрдХ k1 (рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ рд╡рд░реНрдг рдлрд╝реАрд▓реНрдб) рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдХреНрд╡реЗрд░реА
* FROM t0 WHERE k1 = (21, 'USSR') рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдЯреБрдкрд▓реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ = 2 рдФрд░ рдЯреВрдкрд▓ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд sql рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИ рдФрд░ SQL'92 рдорд╛рдирдХ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рд░реЗрдВрдЯреВрд▓ / рдмреЙрдХреНрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЯреНрдпреВрдкрд▓реНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдЯреЗрдмрд▓ (рдХреЙрд▓рдо рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ) рдореЗрдВред рдПрдХ рдЯрдкрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдЯреБрдкрд▓реНрд╕ рдХреЛ рдЧреИрд░-рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрдорд╕реНрдкреЗрд╕ рдкрд░ рдЖрдк рдПрдХ HASH рдпрд╛ rbTREE рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рдВрдЦреНрдпрд╛, рдзреНрд╡рдЬ, рдЯреНрдпреВрдкрд▓, рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рд╕реНрд╡рдпрдВред рдлреНрд▓реИрдЧ рдФрд░ рдЯреНрдпреВрдкрд▓ рдлрд╝реАрд▓реНрдб UPDATE рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

  рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 uint32_t namespaceNo;
	 uint32_t рдЭрдВрдбрд╛;
	 рдЯрдкрд▓ рдЯрдкрд▓;
	 int32_t рдЧрд┐рдирддреА;
	 рдСрдкрд░реЗрд╢рди рдСрдкрд░реЗрд╢рди [];
 } UpdateRequest; 


рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдСрдкрд░реЗрд╢рди рдХреЛрдб рдФрд░ рддрд░реНрдХред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдкрд░реЗрд╢рди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
0 - рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХрд╛ рдХрд╛рд░реНрдпред
рдпрджрд┐ рддрд░реНрдХ int32 рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рднреА рд╕рдВрднрд╡ рд╣реИрдВ:
1 - рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рддрд░реНрдХ рдЬреЛрдбрд╝реЗрдВ
2 - рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдФрд░ рдПрдХ рдореМрдЬреВрджрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде
3 - рдореМрдЬреВрджрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде XOR рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
4 - рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 int32_t fieldNo;
	 int8_t opcode;
	 рдлрд╝реАрд▓реНрдб arg;
 } рдСрдкрд░реЗрд╢рди; 


DELETE рдСрдкрд░реЗрд╢рди рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЯрдкрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред DELETE рдСрдкрд░реЗрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 uint32_t namespaceNo;
	 рдЯрдкрд▓ рдЯрдкрд▓;
 } SelectRequest; 


рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: рд╣реЗрдбрд░ рд╣реЗрдбрд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмреЙрдбреАред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИрдбрд░ - рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдХреЗ рд╕рдорд╛рдиред рд░рд┐рдЯрд░реНрди рдХреЛрдб 0 - рд╕рдлрд▓рддрд╛, рдпрд╛ рд╢рд╛рдорд┐рд▓ / iproto.h рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ:
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {				
		 рд╣реЗрдбрд░ рд╣реЗрдбрд░
		 int32_t рдХреЛрдб;
		 рд╕рдВрдШ {
			 SelectResponce selectBody;
			 рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛;
			 uint8_t * рдбреЗрдЯрд╛;
			 int32_t рдЧрд┐рдирддреА;
		 };			
 } рд░рд┐рд╕реНрдкреЙрдиреНрд╕;


рдПрдХ рд╕реЗрд▓реЗрдХреНрдЯ рдХреНрд╡реЗрд░реА рдХреЗ рдЬрд╡рд╛рдм рдХреА рдмреЙрдбреА рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреБрдкрд▓реНрд╕ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд▓реМрдЯреЗ рд╣реБрдП рдЯреБрдкрд▓реНрд╕ рдХрд╛ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рд░рд┐рдХреНрдд рд╣реИ, рддреЛ рдЯреНрдпреВрдкрд▓реНрд╕ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рддреНрд░рд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИред
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 int32_t рдЧрд┐рдирддреА;
	 FqTuple tuples [];
 } SelectResponce; 


рдкреНрд░рддреНрдпреЗрдХ рд▓реМрдЯреЗ рд╣реБрдП рдЯреБрдкрд▓ (FqTuple) рдореЗрдВ рдЯрдкрд▓ рдХрд╛ рдЖрдХрд╛рд░, рдХреБрдЫ рдкрд╣рдЪрд╛рди рдХрд╛рд░реНрдбрд┐рдиреИрд▓рд┐рдЯреА рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рднрд╛рдЬрдХ (рд╕реАрдорд╛) рдФрд░ рдЯрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 int32_t рдЖрдХрд╛рд░;
	 uint32_t рдХрд╛рд░реНрдб;
	 рдЯрдкрд▓ рдЯрдкрд▓;
 } FqTuple; 


рдпрджрд┐ BOX_RETURN_TUPLE рдзреНрд╡рдЬ InsertRequest рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд░реАрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
 рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
	 int32_t рдЧрд┐рдирддреА;
	 FqTuple tuple;
 } рдЗрдВрд╕рдкреЗрдХреНрдЯрд░рд╕; 


рдЕрджреНрдпрддрди рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рди рд╣реИред

рд╣рдЯрд╛рдПрдВ рдХреНрд╡реЗрд░реА рд╣рдЯрд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рдкреНрд░рд╛рдердорд┐рдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдХреНрд░рдорд╢рдГ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ 0 рдпрд╛ 1 рдкрд░ рд▓реМрдЯреЗрдЧрд╛ред рдпрд╣ рд░реЗрд╕реНрдкреЛрдВрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдХрд╛рдЙрдВрдЯ рдлрд╝реАрд▓реНрдб рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рдкрд╛рда рдореЗрдВ рдХреБрдЫ рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВ, рдХрд╣реАрдВ рдЖрдк uint32_t рдХреЗ рдмрдЬрд╛рдп int32_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рд╕реЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In118036/


All Articles