SQLite: рд╣реЙрдЯ рдбреЗрдЯрд╛ рдмреИрдХрдЕрдк рдмрдирд╛рдирд╛

SQLite рдореЗрдВ рдлреНрд▓рд╛рдИ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИред рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗред рдпрд╣ рддрдВрддреНрд░ рдЖрджрд┐рдо рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд┐рд▓реНрдЯ-рдЗрди рдмреИрдХрдЕрдк рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреИрдХрдЕрдк рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦреЗрдВрдЧреЗред рдареАрдХ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рджрд┐рд╢рд╛ рджреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



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

рдСрдирд▓рд╛рдЗрди рдмреИрдХрдЕрдк рдПрдкреАрдЖрдИ

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рд╕реНрдореГрддрд┐ рдореЗрдВ рдЖрдзрд╛рд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рддреЛ, рдСрдирд▓рд╛рдЗрди рдмреИрдХрдЕрдк рдПрдкреАрдЖрдИ ред рдпрд╣ рдордХреНрдЦреА рдкрд░ рдмреИрдХрдЕрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП SQLite API рд╣реИред рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Sqlite3_backup_init рдлрд╝рдВрдХреНрд╢рди рдмреИрдХрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ:

sqlite3_backup *sqlite3_backup_init( sqlite3 *pDest, /*     */ const char *zDestName, /*    */ sqlite3 *pSource, /*     */ const char *zSourceName /*    */ ); 


рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЧрдВрддрд╡реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореБрдЦреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП "рдореБрдЦреНрдп" , рдЕрд╕реНрдерд╛рдпреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП "рдЕрд╕реНрдерд╛рдпреА" рдпрд╛ ATTACH рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЙрд░реНрдл тАЛтАЛрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдмреИрдХрдЕрдк рдкреНрд░рдмрдВрдзрди рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ (рдпрджрд┐ 0 рд▓реМрдЯрд╛ рд╣реИ, рддреЛ рдЧрдВрддрд╡реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рддреНрд░реБрдЯрд┐ рджреЗрдЦреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП), рдЬрд┐рд╕реЗ рд╢реЗрд╖ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рдЖрдк рдмреИрдХрдЕрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдкреЗрдЬ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред NPage рдкреГрд╖реНрдареЛрдВ (рдпрд╛ рд╕рднреА, рдпрджрд┐ nPage = -1) рд╕реЗ рднрд╛рдЧреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ sqlite3_backup_step рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  int sqlite3_backup_step(sqlite3_backup *p, int nPage); 

рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди SQLITE_DONE рд▓реМрдЯрд╛ рд╣реИ, рддреЛ рдмреИрдХрдЕрдк рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдкреГрд╖реНрда рдХреЙрдкреА рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрджрд┐ рдХреЛрдб SQLITE_OK, SQLITE_BUSY, SQLITE_LOCKED рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ , рддреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рд░рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ - рдЖрдкрдХреЛ sqlite3_backup_step () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рдЕрдиреНрдп рд░рд┐рдЯрд░реНрди рдХреЛрдб рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИред рдпрджрд┐ SQLITE_DONE рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ , рддреЛ sqlite3_backup_finish () рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП :

  int sqlite3_backup_finish(sqlite3_backup *p); 

рдФрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рд╕реЛ рдЬрд╛рдУ, рдПрдХ рд╕рдлрд▓ рдмреИрдХрдЕрдк рдкрд░ рдЖрдирдиреНрджрд┐рддред рдмреИрдХрдЕрдк рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

  int sqlite3_backup_remaining(sqlite3_backup *p); //    int sqlite3_backup_pagecount(sqlite3_backup *p); //    

Dst рдореЗрдВ SOME_PAGE_COUNT рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде Src рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо pseudocode a la pascal рдкрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  Backup = sqlite3_backup_init(Dst, 'main', Src, 'main'); if Backup = nil then Abort; try repeat case sqlite3_backup_step(Backup, SOME_PAGE_COUNT) of SQLITE_DONE: break; SQLITE_OK, SQLITE_BUSY, SQLITE_LOCKED: continue; else Abort; end; Write(' ', sqlite3_backup_remaining(Backup) * 100 div sqlite3_backup_pagecount(Backup), '%'); Sleep(SOME_TIME); until false; finally sqlite3_backup_finish(Backup) end; 

рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, SQLite рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рди рдХреЗрд╡рд▓ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдмреИрдЪреЛрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ ( nPage > 0, рдпрд╛рдиреА рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдкреЗрдЬреЛрдВ рдореЗрдВ sqlite3_backup_step ()) рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ? рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЛ! рд╣рдорд╛рд░реЗ рд▓рд┐рдП SQLite рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкреГрд╖реНрдареЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧреАред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рд╕реНрд░реЛрдд рдЖрдзрд╛рд░ рддреЗрдЬреА рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЖрд░рдХреНрд╖рдг рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред рдХреБрдЫ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИред рдпрджрд┐ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмреИрдХрдЕрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рд╕реЗ рднреА), рддреЛ SQLite рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдЧрдВрддрд╡реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирдХрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рдмреИрдХрдЕрдк рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

SQLite рдСрдирд▓рд╛рдЗрди рдмреИрдХрдЕрдк рдПрдкреАрдЖрдИ рдХреЗ рд▓рд╛рдн - рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирдпрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХреА рдорджрдж рд╕реЗ рд╣рдо рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдмрджрд▓ рдЧрдП рд╣реИрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ ROWID рдХреЙрд▓рдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд░рд┐рдХреЙрд░реНрдб рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреВрд╕рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрд╕ рдпрд╣ рджрд┐рдЦрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд░рд▓ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдпреЛрдЬрдирд╛

рдЗрд╕рд▓рд┐рдП, рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ, рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  CREATE TABLE IF NOT EXISTS system_replicate_table(name TEXT UNIQUE); CREATE TABLE IF NOT EXISTS system_replicate_record(name TEXT, id INTEGER, PRIMARY KEY(name,id) ); 

рдлреВ рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ system_replicate_table рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

  INSERT OR IGNORE INTO system_replicate_table(name) VALUES ('Foo'); 

рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреГрддрд┐ рдЯреНрд░рд┐рдЧрд░ рдмрдирд╛рдПрдВ:

 function CreateTrigger(const Operation, TableName: string): string; begin result := Format('CREATE TRIGGER IF NOT EXISTS system_trigger_%s_replicate_%s AFTER %s ON %s FOR EACH ROW BEGIN ', [ TableName, Operation, Operation, TableName ]); if (Operation = 'INSERT') or (Operation = 'UPDATE') then result := result + Format('INSERT OR IGNORE INTO system_replicate_record(name, id) VALUES("%s", NEW.ROWID); ', [ TableName ]); if (Operation = 'DELETE') or (Operation = 'UPDATE') then result := result + Format('INSERT OR IGNORE INTO system_replicate_record(name, id) VALUES("%s", OLD.ROWID); ', [ TableName ]); result := result + ' END; '; end; Execute( CreateTrigger('INSERT', 'Foo') ); Execute( CreateTrigger('UPDATE', 'Foo') ); Execute( CreateTrigger('DELETE', 'Foo') ); 

рдЯреНрд░рд┐рдЧрд░ рд╕рд░рд▓ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╡реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА ROWID рдХреЛ system_replicate_record (SQLite рдореЗрдВ рдирдП рдФрд░ OLD рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВ) рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░рд┐рдЧрд░ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░реИрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ (рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдпрд╛ system_replicate_record рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ), рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН , рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд╝реВ рдЯреЗрдмрд▓ рд╕реЗ рдЧрдВрддрд╡реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдХреИрд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдП? рдпрд╣ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╣рдо sqlite_master рд╕рд┐рд╕реНрдЯрдо рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА SQL рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдПрд╕рдХреНрдпреВрдПрд▓ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд░рд┐рдПрд╢рди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ (рдпрд╛рдиреА, рдЯреЗрдмрд▓ рдлреВ рдХреЗ рд▓рд┐рдП "рдХреНрд░рд┐рдПрдЯ рдЯреЗрдмрд▓ рдлреВ (...)") рд╣реЛрдЧрд╛ред

рдлреВ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреАрдПрд╕рдЯреА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

1) SQL рдЯреЗрдмрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
  SELECT sql FROM sqlite_master WHERE tbl_name = 'Foo' and type = 'table'; 

рдФрд░ рдЗрд╕реЗ рдЧрдВрддрд╡реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ "рдЬреИрд╕рд╛ рд╣реИ" рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рд╣рдо рдЧрдВрддрд╡реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ)ред
2) рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ (рдмрд┐рд▓реНрдХреБрд▓ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ):
  SELECT rowid as rowid, * FROM Foo 

3) рдпрджрд┐ рдЖрдкрдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХреЛ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЧрдВрддрд╡реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ (рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░):
  SELECT sql FROM sqlite_master WHERE tbl_name = 'Foo' and (type = "index" or type = "trigger") and not name LIKE 'system_%' and not name LIKE 'sqlite_%' 

Src рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ Dst рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ Foo рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред

1) рдпрджрд┐ Dst рдореЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рддрд╛рд▓рд┐рдХрд╛ Foo рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ Src (рдКрдкрд░ рджреЗрдЦреЗрдВ) рд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ 5 рдкрд░ рдЬрд╛рдПрдВ)
2) рдЕрдиреНрдпрдерд╛, рдкреНрд░рднрд╛рд╡рд┐рдд рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:
  SELECT id FROM sqlite_replicate_record WHERE name = 'Foo'; 

рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд▓рдВрдмреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрд░ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рддред "123,256,334,4700, ..." рдЬреИрд╕реЗ рдЖрд░ рдореЗрдВ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
(рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдордд рд╕реЛрдЪреЛ! рдПрдХ рдмрдлрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ ROWID рдПрдХ 8 рдмрд╛рдЗрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ) ред
3) Dst рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ Foo рдЯреЗрдмрд▓ рд╕реЗ рдЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:
  DELETE FROM [Foo] WHERE rowid IN (<   R>); 

4) Src рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ Foo рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ Dst рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЙрдкреА (рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП):
  SELECT rowid as rowid, * FROM [Foo] WHERE rowid IN (SELECT id FROM system_replicate_record WHERE name = 'Foo'); 

5) рд╣рдо Src рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ:
  DELETE FROM sqlite_replicate_record WHERE name = 'Foo'; 

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

  SELECT rowid as rowid, * FROM [Foo] [ WHERE ... ] 

рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ROWID рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдФрд░ "ROWID" рдирд╛рдо рд╣реЛрдЧрд╛)ред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ SQL рдЗрдиреНрд╕рд░реНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ (UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ):
  INSERT INTO [Foo](<>) VALUES(<>) 

рдЪрдпрдирд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рднреА рд╕реНрддрдВрднреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдХреЙрд▓рдо рдирд╛рдо рдХреЛ " <рдирд╛рдо> " рднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдорд╛рди рдХреЛ " <рдорд╛рди >>" рднрд╛рдЧ рдореЗрдВ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо '[' рдФрд░ ']' рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╛рди рдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, SQLite рдореЗрдВ рдирд┐рдореНрди рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
  SQLITE_INTEGER = 1; SQLITE_FLOAT = 2; SQLITE_TEXT = 3; SQLITE_BLOB = 4; SQLITE_NULL = 5; 

рд╣рдореЗрдВ рдпрд╣ рд╕реАрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╢рд╛рдмреНрджрд┐рдХ SQLITE_NULL "рдЕрд╢рдХреНрдд" рд╣реИ ред рд╢рд╛рдмреНрджрд┐рдХ SQLITE_INTEGER рдкреВрд░реНрдгрд╛рдВрдХ (64 рдмрд┐рдЯреНрд╕), 1234567890: "1234567890" рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рд╢рд╛рдмреНрджрд┐рдХ SQLITE_FLOAT рдЖрдВрд╢рд┐рдХ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рдЧреЛрдВ рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдбреЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ, 123.456789: "123.456789" ред рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ ( SQLITE_TEXT ) рдХреЛ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рд╕рднреА рдПрдХрд▓ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХрд▓ рдЙрджреНрдзрд░рдг, "рд╣реИрд▓реЛ, рдореИрдХрдбрдХ": "'рд╣реИрд▓реЛ, рдореИрдХ'рдбрдХ' рдХреЗ рд╕рд╛рде рдлреНрд░реЗрдо рдХрд░реЗрдВред BLOB рдмрдиреЗ рд░рд╣реЗред SQLite рдореЗрдВ SQLITE_BLOB (рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛) рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рдореЗрдВ "x'A0B1C2 ... '" рд╣реИ , рдЬрд╣рд╛рдВ "A0" рдкрд╣рд▓реА рдмрд╛рдЗрдЯ рдХрд╛ рд╣реЗрдХреНрд╕ рдХреЛрдб рд╣реИ, "B1" рджреВрд╕рд░реА рдмрд╛рдЗрдЯ рдХрд╛ рд╣реЗрдХреНрд╕ рдХреЛрдб рд╣реИ, рдЖрджрд┐ред

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

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

рдкреБрдирд╢реНрдЪред SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзреБрдирд┐рдХ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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


All Articles