Skip to content

Commit

Permalink
initialize each charsetmap separately
Browse files Browse the repository at this point in the history
  • Loading branch information
toddtreece committed Dec 20, 2023
1 parent f54e4da commit 00eaca5
Show file tree
Hide file tree
Showing 17 changed files with 64,397 additions and 64,276 deletions.
61 changes: 35 additions & 26 deletions internal/cp/charset.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,117 +2,126 @@ package cp

import (
"strings"
"sync"
)

var initOnce sync.Once

type charsetMap struct {
sb [256]rune // single byte runes, -1 for a double byte character lead byte
db map[int]rune // double byte runes
}

// lazy initialization of all charset maps
func initCharsetMaps() {
initOnce.Do(func() {
initcp437()
initcp850()
initcp874()
initcp932()
initcp936()
initcp949()
initcp950()
initcp1250()
initcp1251()
initcp1252()
initcp1253()
initcp1254()
initcp1255()
initcp1256()
initcp1257()
initcp1258()
})
}

func collation2charset(col Collation) *charsetMap {
initCharsetMaps()
// http://msdn.microsoft.com/en-us/library/ms144250.aspx
// http://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx
switch col.SortId {
case 30, 31, 32, 33, 34:
initcp437()
return cp437
case 40, 41, 42, 44, 49, 55, 56, 57, 58, 59, 60, 61:
initcp850()
return cp850
case 50, 51, 52, 53, 54, 71, 72, 73, 74, 75:
initcp1252()
return cp1252
case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96:
initcp1250()
return cp1250
case 104, 105, 106, 107, 108:
initcp1251()
return cp1251
case 112, 113, 114, 121, 124:
initcp1253()
return cp1253
case 128, 129, 130:
initcp1254()
return cp1254
case 136, 137, 138:
initcp1255()
return cp1255
case 144, 145, 146:
initcp1256()
return cp1256
case 152, 153, 154, 155, 156, 157, 158, 159, 160:
initcp1257()
return cp1257
case 183, 184, 185, 186:
initcp1252()
return cp1252
case 192, 193:
initcp932()
return cp932
case 194, 195:
initcp949()
return cp949
case 196, 197:
initcp950()
return cp950
case 198, 199:
initcp936()
return cp936
case 200:
initcp932()
return cp932
case 201:
initcp949()
return cp949
case 202:
initcp950()
return cp950
case 203:
initcp936()
return cp936
case 204, 205, 206:
initcp874()
return cp874
case 210, 211, 212, 213, 214, 215, 216, 217:
initcp1252()
return cp1252
}
// http://technet.microsoft.com/en-us/library/aa176553(v=sql.80).aspx
switch col.getLcid() {
case 0x001e, 0x041e:
initcp874()
return cp874
case 0x0411, 0x10411:
initcp932()
return cp932
case 0x0804, 0x1004, 0x20804:
initcp936()
return cp936
case 0x0012, 0x0412:
initcp949()
return cp949
case 0x0404, 0x1404, 0x0c04, 0x7c04, 0x30404:
initcp950()
return cp950
case 0x041c, 0x041a, 0x0405, 0x040e, 0x104e, 0x0415, 0x0418, 0x041b, 0x0424, 0x1040e:
initcp1250()
return cp1250
case 0x0423, 0x0402, 0x042f, 0x0419, 0x081a, 0x0c1a, 0x0422, 0x043f, 0x0444, 0x082c:
initcp1251()
return cp1251
case 0x0408:
initcp1253()
return cp1253
case 0x041f, 0x042c, 0x0443:
initcp1254()
return cp1254
case 0x040d:
initcp1255()
return cp1255
case 0x0401, 0x0801, 0xc01, 0x1001, 0x1401, 0x1801, 0x1c01, 0x2001, 0x2401, 0x2801, 0x2c01, 0x3001, 0x3401, 0x3801, 0x3c01, 0x4001, 0x0429, 0x0420:
initcp1256()
return cp1256
case 0x0425, 0x0426, 0x0427, 0x0827:
initcp1257()
return cp1257
case 0x042a:
initcp1258()
return cp1258
case 0x0439, 0x045a, 0x0465:
return nil
}
initcp1252()
return cp1252
}

Expand Down
Loading

0 comments on commit 00eaca5

Please sign in to comment.