summary refs log tree commit diff stats
path: root/lib/impure/db_odbc.nim
Commit message (Collapse)AuthorAgeFilesLines
* Fix wrong integer types in odbcsql and db_odbc (#10419)pgkos2019-01-221-46/+18
| | | | | * Fix wrong parameter type in SQLErr * Fix wrong types of integers passed to SQLGetData
* Restrict ptr/ref to ptr/ref implicit conversion (#10411)LemonBoy2019-01-221-5/+9
| | | | | | | | * Restrict ptr/ref to ptr/ref implicit conversion Fixes #10409 * Make the ptr conversions explicit in db_odbc
* Fix ODBC SQL Error string decoding (#10207) [backport]Leonardo Cecchi2019-01-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | ODBC Errors were presented to the users as a sequence of characters. I.e.: >test_oracle.exe Error: ['H', 'Y', '0', '0', '0', '\x00', '\x00', ...] test_oracle.nim(15) test_oracle test_oracle.nim(8) test_oracle db_odbc.nim(534) open db_odbc.nim(168) dbError Error: unhandled exception: ODBC Error [DbError] This patch fix the string decoding, creating a real string: >test_oracle.exe Error: HY000 [Oracle][ODBC][Ora]ORA-12541: TNS:no listener test_oracle.nim(15) test_oracle test_oracle.nim(8) test_oracle db_odbc.nim(534) open db_odbc.nim(168) dbError Error: unhandled exception: ODBC Error [DbError]
* removes deprecated T/P typesAraq2018-11-161-2/+0
|
* docs: remove most stale links; refs #9109Araq2018-09-291-9/+6
|
* Merge branch 'db_odbc2' of https://github.com/jlp765/Nim into jlp765-db_odbc2Andreas Rumpf2016-05-281-23/+22
|\
| * Fix row reading procs to not use SQLRowCount, but SQLFetch until returns ↵JamesP2016-01-241-54/+49
| | | | | | | | | | | | SQL_NO_DATA change SqlCheck() and SqlGetDBMS() to sqlCheck() and sqlGetDBMS() (camelCase consistency)
* | Repair using the db_odbc module to query the Oracle database, the program ↵lihf85152016-03-211-80/+122
|/ | | | compiled in the release mode, the return of the field value is null.
* Improved documentation for all db modules.Dominik Picheta2016-01-181-3/+45
|
* updated db*.nim modulesAndreas Rumpf2015-12-161-50/+33
|
* add db_odbc library moduleJamesP2015-12-091-0/+480
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373







                                                                                  


                                                  
                                                                                                     
                                   







































































































































































































































































































































































                                                                                                                                                                                                                                                                                                                         
#+title: Architecture 1
#+AUTHOR: Crystal
#+OPTIONS: ^:{}
#+OPTIONS: num:nil
#+EXPORT_FILE_NAME: ../../../uni_notes/architecture.html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../src/css/colors.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../src/css/style.css"/>
#+OPTIONS: html-style:nil
#+OPTIONS: toc:4
#+OPTIONS: \n:y
#+HTML_LINK_HOME: https://crystal.tilde.institute/
#+HTML_HEAD: <link rel="icon" type="image/x-icon" href="https://crystal.tilde.institute/favicon.png">
#+HTML_LINK_UP: ../../../uni_notes/

* Premier cours : Les systémes de numération /Sep 27/ :
Un système de numération est une méthode pour représenter des nombres à l'aide de symboles et de règles. Chaque système, comme le décimal (base 10) ou le binaire (base 2), utilise une base définie pour représenter des valeurs numériques. Il est caractérisé par 3 entitiés mathématiques importantes:

 1. Une base (genre 10, ou 2)
 2. Un ensemble de chiffres
 3. Des régles de représentations des nombres

*** *Examples :*
/B10 est un systéme de numération caractérisé par:/
- Base = 10
- Un ensemble de chiffres : (0,1,2,3,4,5,6,7,8,9)

/B16 est un autre systéme de numération caractérisé par:/
- Base = 16
- Un ensemble de chiffres : (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

  *Puisse-qu'on peut pas utiliser des nombres a deux chiffres, on utilise des lettres aprés 9, en leur donnant des valeurs tel que :*

   A : 10 ; B : 11 ; C : 12 ; D : 13 ; E : 14 ; F : 15

** Comment passer d'un systéme a base 10 a un autre

On symbolise un chiffre dans la base x par : (Nombre)x

*** Pour les chiffres entiers :
*On fait une division successive, on prends le nombre 3257 comme exemple, on veut le faire passer d'une base décimale á une base 16:*


(3257)10 ----> (?)16


On dévise 3257 par 16, et les restants de la division serra la valeur en base16:

3257/16 = 203 + *9* / 16

203/16 = 12 + *B* / 16  /REMARQUE, 11 N'APPARTIENS PAS A L'ENSEMBLE DES CHIFFRES EN BASE16, CE QUI VEUT DIRE QU'ON LE REMPLACE PAR SON EQUIVALENT, DANS CE CAS LA: *B*/

12/16 = 0 + *C* / 16 /Pareil ici, 12 n'existe pas, donc c'est C. Autre note : La division s'arréte quand le résultat de la division est nul/

**** *Conclusion:*

(3257)10 ----> (CB9)16

*** Pour les chiffres non entiers :

*On fait la division successive pour la partie entiére, et une multiplication successive pour la partie rationelle:*

(3257,32)10 ----> (?)16

On a déja la partie entiére donc on s'occupe de la partie aprés la virgule:

0,32 x 16 = *5*,12

0,12 x 16 = *1*,92

0,92 x 16 = *E*,72 /On a pas de 15 donc c'est un E/

0,72 x 16 = *B*,52

0,52 x 16 = *8*,32

0,32 x 16 = *5*,12

...

/On s'arréte quand on trouve un chiffre entier, et si on trouve pas, on s'arréte quand on remarque une répetition, dans ce cas la, la séquance 51EB8 vas se répéter indéfiniment, donc on se contente d'écrire la partie qui se répéte avec une barre en haut/


(3257,32)10 ----> (CB9, _51EB8_)16


* 2nd cours : Les systèmes de numération (Suite) /Oct 3/ :
** Comment passer d'une base N a la base 10 :

Prenons comme exemple le nombre (11210,0011)3 , chaque chiffre dans ce nombre a un rang qui commence par 0 au premier chiffre (a gauche de la virgule) et qui augmente d'un plus qu'on avance a gauche, et diminue si on part a droite. Dans ce cas la :


(11210,0011)3 ; le 0 est de rang 0, le 1 est de rang 1, le 2 est de rang 2, le 1 est de rang 3, le 1 est de rang 4. Et si on part du coté de la virgule, 0 est de rang -1, 0 est de rang -2, le 1 est de rang -3, et le 1 est de rang -4.


Et pour passer a la base 10, il suffit d'appliquer cette formule : *Chiffre x Base^(rang) + 2emeChiffre x Base^(rang)... etc*, donc dans notre example:


/0 x 3° + 1 x 3¹ + 2 x 3² + 1 x 3³ + 1 x 3^4 + 0 x 3¯¹ + 0 x 3¯² + 1 x 3¯³ + 1 x 3^(-4) ≈ (129,05)10/


** Comment passer d'une base N a une base N^(n) :

Si il ya une relation entre une base et une autre, on peut directement transformer vers cette base.

*** Exemple :
Pour passer de la base 2 a la base 8 (8 qui est 2³) on découpe les chiffres 3 par 3


(1 101 011, 011)2 ; Pour le dernier 1 qui est seul ~tout comme moi~ il suffit d'ajouter des 0 à gauche (car on peut) pour compléter le découpage.


(001 101 011, 011)2; Next step c'est de dessiner le tableau de conversion de la base 2 a la base 8 ( un tableau a 3 bits )


| N |   |   |   |
|---+---+---+---|
| 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 1 | 1 |
| 4 | 1 | 0 | 0 |
| 5 | 1 | 0 | 1 |
| 6 | 1 | 1 | 0 |
| 7 | 1 | 1 | 1 |


Pour remplir on a qu'a diviser les chiffres en deux, et mettre des 0 dans la première partie et des 1 dans la 2éme, et en faire de même pour les autres colonnes .


Maintenant il suffit de trouver l'équivalent de la base2 en base8 :


001 c'est 1 ; 101 c'est 5 ; 011 c'est 3 ; donc *(1101011,011)2 ---> (153,3)8*

** L'arithmétique binaire :
*** L'addition :
0 + 0 = 0 On retiens 0


1 + 0 = 1 On retiens 0


0 + 1 = 1 On retiens 0


1 + 1 = 0 On retiens 1


1 + 1 + 1 = 1 On retiens 1


Donc 0110 + 1101 = 10011

*** La soustraction :
0 - 0 = 0 On emprunt = 0


1 - 0 = 1 On emprunt = 0


0 - 1 = 1 On emprunt = 1


1 - 1 = 0 On emprunt = 0


** TP N°1 :
*** Exo1:
| Base 10  | Base 2           | Base 3        | Base 8 | Base 16 |
|----------+------------------+---------------+--------+---------|
| 22,75    | 10110,11         | 211, _20_     | 26,6   | F6,C    |
| 684,125  | 1010101100,001   | 221100, _01_  | 1254,1 | 2AC,2   |
| 3931,625 | 111101011011,101 | 1101121, _12_ | 7533,5 | F5B,A   |
| 52,38    | 110100,011       | 1221,101      | 64,3   | 34,6147 |
| 10,67    | 1010,101         | 23,5          | 12,5   | A,AB85  |

**** (10110,11)2
0 x 2° + 1 x 2¹ + 1 x 2² + 0 x 2³ + 1 x 2^(4) + 1 x 2¯¹ + 1 x 2¯² = (22.75)10


***** (22,75)10 ----> (3)



22/3 = 7 R *1* ; 7/3 = 2 R *1* ; 2/3 = 0 R *2*


0,75 x 3 = *2*.25 ; 0,25 x 3 = *0*.75 .....


(22,75)10 ----> (211, _20_)

***** (10110,11)2 ----> (8)
8 = 2³ ; (010 110,110)2 ----> (?)8


En utilisant le tableau 3bits :


010 : 2 ; 110 : 6 ; 110 : 6


(10110,11)2 ----> (26,6)8

***** (22,75)10 ----> (16)
22/16 = 1 R *6* ; 1/16 : 0 R *F*


0,75 x 16 = *C*


(22,75)10 ----> (F6,C)16

**** (1254,1)8
4 x 8° + 5 x 8¹ + 2 x 8² + 1 x 8³ + 1 x 8¯¹ = (684,125)10

***** (1254,1)8 ----> (?)2
En utilisant le tableau 3bits :


001 010 101 100,001 /We will get rid of the leading zeros/


(1010101100,001)2

***** (684,125)10 ----> (?)3
684/3 = 228 R *0* ; 228/3 = 76 R *0* ; 76/3 = 25 R *1* ; 25/3 = 8 R *1* ; 8/3 = 2 R *2* ; 2/3 = 0 R *2*


0,125 x 3 = *0*,375 ; 0,375 x 3 = *1*,125


(221100, _01_)3

***** (684,125)10 ----> (?)16
684/16 = 42 R *C* ; 42/16 = 2 R *A* ; 2/16 0 R *2*


0,125 x 16 = *2*


(2AC,2)16

**** (F5B,A)16
11 x 16° + 5 x 16 + 15 x 16² + 10 x 16¯¹ = (3931,625)10
***** (3931,625)10 ----> (8)
3931/8 = 491 R *3* ; 491/8 = 61 R *3* ; 61/8 = 7 R *5* ; 7/8 = 0 R *7*


0,625 x 8 = *5*


(7533,5)8
***** (7533,5)8 ----> (2)

En utilisant le tableau 3bits

(111 101 011 011,101)2

***** (3931,625)10 ----> (3)
3931/3 = 1310 R *1* ; 1310/3 = 436 R *2* ; 436/3 = 145 R *1* ; 145/3 = 48 R *1* ; 48/3 = 16 R *0* ; 16/3 = 5 R *1* ; 5/3 = 1 R *2* ; 1/3 = 0 R *1*


0.625 x 3 = *1*,875 ; 0,875 x 3 = *2*,625


(1101121, _12_)3

**** (52,38)10
52/2 = 26 R *0* ; 26/2 = 13 R *0* ; 13/2 = 6 R *1* ; 6/2 = 3 R *0* ; 3/2 = 1 R *1* ; 1/2 = 0 R *1*


0,38 x 2 = *0*,76 ; 0,76 x 2 = *1*,52 ; 0,52 x 2 = *1*,04 ; 0,04 x 2 = *0*,08 ....


(110100,0110)2

***** (52,38)10 ----> (3)
52/3 = 17 R *1* ; 17/3 = 5 R *2* ; 5/3 = 1 R *2* ; 1/3 = 0 R *1*


0,38 x 3 = *1*.14 ; 0,14 x 3 = *0*.42 ; 0,42 x 3 = *1*.26 ; 0.26 x 3 = *0*.78 ...


(1221,101)3

***** (110100,011)2 ----> (8)
En utilisant le tableau 3bits:


(110 100,011)2 ----> (64,3)8

***** (52,38)10 ----> (16)
52/16 = 3 R *4* ; 3/16 = 0 R *3*


0,38 x 16 = *6*,08 ; 0,08 x 16 = *1*,28 ; 0,28 x 16 = *4*,48 ; 0,48 x 16 = *7*,68 ....


(34,6147)16

**** (23,5)3
3 x 3° + 2 x 3 + 5 x 3¯¹ = (10.67)10

***** (10,67)10 ----> (2)
10/2 = 5 R *0* ; 5/2 = 2 R *1* ; 2/2 = 1 R *0* ; 1/2 = 0 R *1*


0,67 x 2 = *1*,34 ; 0,34 x 2 = *0*,68 ; 0,68 x 2 = *1*,36 ; 0,36 x 2 = *0*,72 ...


(1010,101)2

***** (001 010,101)2 ----> (8)
*Ô Magic 3bits table, save me soul, me children and me maiden:*


(12,5)8
***** (10,67)10 ----> (16)
10/16 = 0 R *A*


0,67 x 16 = *A*,72 ; 0,72 x 16 = *B*,52 ; 0,52 x 16 = *8*,32 ; 0,32 x 16 = *5*,12 ...


(A,AB85)16

*** Exo2:
**** (34)? = (22)10
(34)a = (22)10 ; 4 x a° + 3 x a = 22 ; 4 + 3a = 22 ; 3a = 18


*a = 6*
**** (75)? = (117)10
(75)b = (117)10 ; 5 x b° + 7 x b¹ = 117 ; 5 + 7b = 117 ; 7b = 112


*b = 16*
*** Exo3:
**** (101011)2 + (111011)2
  101011 + 111011 = 1100110
**** (1011,1101)2 + (11,1)2
  1011,1101 + 11,1000 = 1111,0101
**** (1010,0101)2 - (110,1001)2
1010,0101 - 110,1001 = 11,1100
** L'arithmétique binaire (Suite): /Oct 4/
*** La multiplication :
0 x 0 = 0


0 x 1 = 0


1 x 0 = 0


1 x 1 = 1

*** La division :
On divise de la manière la plus normale du monde !!!
* 4th cours : Le codage /Oct 10/
** Le codage des entiers positifs
Le codage sur n bits permet de representer tout les entiers naturels compris entre [0, 2^n - 1]. On peut coder sur 8bits les entiers entre [0;2^8 - 1(255)]
** Le codage des nombres relatifs
*** Remarque
Quelque soit le codage utilise, par convention le dernier bit est reserve pour le signe. ou 1 est negatif et 0 est positif.
*** Le codage en signe + valeur absolue (SVA):
Avec n bits le n eme est reserve au signe : [-(2^n-1)-1 , 2^n-1 -1]. Sur 8bits [-127, 127]

*** Codage en compliment a 1 (CR):
On obtiens le compliment a 1 d'un nombre binaire en inversant chaqu'un de ses bits (1 -> 0 et 0-> 1) les nombres positifs sont la meme que SVA (il reste tel qu'il est)
*** Codage en compliment a 2 (CV):
C'est literallement CR + 1 pour les negatifs et SVA pour les nombres positifs