@@ -222,7 +222,7 @@ func (p *Parser) Release() {
222222}
223223
224224// parseStatement parses a single SQL statement
225- // Uses fast int-based ModelType comparisons with fallback for hot path optimization
225+ // Uses O(1) switch dispatch on ModelType (compiles to jump table) for optimal performance
226226func (p * Parser ) parseStatement () (ast.Statement , error ) {
227227 // Check context if available
228228 if p .ctx != nil {
@@ -264,6 +264,9 @@ func (p *Parser) parseStatement() (ast.Statement, error) {
264264 case models .TokenTypeRefresh :
265265 p .advance ()
266266 return p .parseRefreshStatement ()
267+ case models .TokenTypeTruncate :
268+ p .advance ()
269+ return p .parseTruncateStatement ()
267270 }
268271 // ModelType set but not a statement keyword - fall through to fallback
269272 }
@@ -273,7 +276,6 @@ func (p *Parser) parseStatement() (ast.Statement, error) {
273276 if p .isType (models .TokenTypeWith ) {
274277 return p .parseWithStatement ()
275278 }
276- // Use matchType() for check-and-advance pattern
277279 if p .matchType (models .TokenTypeSelect ) {
278280 return p .parseSelectWithSetOperations ()
279281 }
@@ -301,6 +303,9 @@ func (p *Parser) parseStatement() (ast.Statement, error) {
301303 if p .matchType (models .TokenTypeRefresh ) {
302304 return p .parseRefreshStatement ()
303305 }
306+ if p .matchType (models .TokenTypeTruncate ) {
307+ return p .parseTruncateStatement ()
308+ }
304309 return nil , p .expectedError ("statement" )
305310}
306311
@@ -387,6 +392,7 @@ var modelTypeToString = map[models.TokenType]token.Type{
387392 models .TokenTypeCreate : "CREATE" ,
388393 models .TokenTypeAlter : token .ALTER ,
389394 models .TokenTypeDrop : token .DROP ,
395+ models .TokenTypeTruncate : "TRUNCATE" ,
390396 models .TokenTypeTable : "TABLE" ,
391397 models .TokenTypeIndex : "INDEX" ,
392398 models .TokenTypeView : "VIEW" ,
0 commit comments