|
39 | 39 | }
|
40 | 40 | )
|
41 | 41 |
|
42 |
| -const maxLineBuffer = 2 * 1024 * 1024 // 2Mb |
43 |
| - |
44 | 42 | // Console defines methods used for console input and output
|
45 | 43 | type Console interface {
|
46 | 44 | // Readline returns the next line of input.
|
@@ -327,24 +325,29 @@ func (s *Sqlcmd) IncludeFile(path string, processAll bool) error {
|
327 | 325 | b := s.batch.batchline
|
328 | 326 | utf16bom := unicode.BOMOverride(unicode.UTF8.NewDecoder())
|
329 | 327 | unicodeReader := transform.NewReader(f, utf16bom)
|
330 |
| - scanner := bufio.NewScanner(unicodeReader) |
331 |
| - buf := make([]byte, maxLineBuffer) |
332 |
| - scanner.Buffer(buf, maxLineBuffer) |
| 328 | + scanner := bufio.NewReader(unicodeReader) |
333 | 329 | curLine := s.batch.read
|
334 | 330 | echoFileLines := s.echoFileLines
|
| 331 | + ln := make([]byte, 0, 2*1024*1024) |
335 | 332 | s.batch.read = func() (string, error) {
|
336 |
| - if !scanner.Scan() { |
337 |
| - err := scanner.Err() |
338 |
| - if err == nil { |
339 |
| - return "", io.EOF |
340 |
| - } |
341 |
| - return "", err |
| 333 | + var ( |
| 334 | + isPrefix bool = true |
| 335 | + err error = nil |
| 336 | + line []byte |
| 337 | + ) |
| 338 | + |
| 339 | + for isPrefix && err == nil { |
| 340 | + line, isPrefix, err = scanner.ReadLine() |
| 341 | + ln = append(ln, line...) |
342 | 342 | }
|
343 |
| - t := scanner.Text() |
344 |
| - if echoFileLines { |
345 |
| - _, _ = s.GetOutput().Write([]byte(s.Prompt() + t + SqlcmdEol)) |
| 343 | + if err == nil && echoFileLines { |
| 344 | + _, _ = s.GetOutput().Write([]byte(s.Prompt())) |
| 345 | + _, _ = s.GetOutput().Write(ln) |
| 346 | + _, _ = s.GetOutput().Write([]byte(SqlcmdEol)) |
346 | 347 | }
|
347 |
| - return t, nil |
| 348 | + t := string(ln) |
| 349 | + ln = ln[:0] |
| 350 | + return t, err |
348 | 351 | }
|
349 | 352 | err = s.Run(false, processAll)
|
350 | 353 | s.batch.read = curLine
|
|
0 commit comments