퇴근5분전

 

 오늘 수정해간 프로그램 다시 설치해서 작업을 해봤다.

 

오더 떨어진게 11시   작업 끝난 시간 15시 30분.

 

음. 점심시간 빼면 오늘은 좀더 걸렸네... 근데 중요한건 빠른건지 느린건지... 감이 안오네?

 

1. 엑셀에 대충 그려진 화면정의서를 가지고 툴로 화면을 디자인한다.

 

2. 툴로 소스를 만들어낸다.

 

3. 만들어진 소스에 사용되는 SP들과 파라미터 셋팅부분을 붙여넣는다.

     이때 파라미터 소스는 쿼리를 통해서 뽑아내서 붙여넣는다.

 

4. 조건판넬의 컨트롤에 대한 소스 처리를 한다.

     이때 또 다른 프로그램을 띄운다.

    > 컬럼:설명 ... 조합으로 만들면 설정후 소스를 만들어낼수 있다.

 

5. 작업버튼들이 있는 경우. 해당 작업버튼의 sp는 위에 사용된 쿼리로 만들어낸다.

   화면인 경우 링크를 해주면 된다.

 

6. 그리드 컬럼 폭을 조절 해준다.

     이때 직접 가로폭을 지정하는 방법이 있고, 툴에서 특정 소스를 떠다가 소스에 붙여넣고 프로그램을 실행해서

    그리드 열 넓이를 데이타를 보면서 조정한 후 그리드 셋팅 정보를 다시 생성하여 소스로 사용한다.

 

7. 기타 테스트를 진행한다.

 

우선 여기까지인데...

 

뭔가... 작업을 하다보면 매끄럽지 않은듯 한 느낌이 들때가 있다.

 

복사 하고 붙여넣기가 꾀 많다. 대부분 소스를 프로그램이 만들어주니까 ...

 

가장 불만인건... 컬럼 메타 정보가 따로 관리되지 않고 그때 그때 만들어지니까 소스에 주석문 작성이 될때 빵꾸가...생긴다.

 

요새 뭔가 부족함을 많이 느낀다. 업무용 프로그램을 시뮬레이션 할 수 있으면 어떨가 싶었는데...

 

또 디자인을 직접 하다보면 번거롭다 느끼는것도 있고 좀더 쉽게는 안될까 고민하게 된다.

 

차차 고민을 좀더 해봐야지...

 

 

 

 새 디자인 컨트롤을 다시 구상해봤는데... 중간에 생각이 꼬여서 UI StoryBoard 처럼 되어버려서 버렸다. ㅡ.,ㅡ;

 

#####################################################################################

 

또 하나는 TCP/IP 모듈을 다시 설계해서 만들어보고 있다. 모니터링을 다시 만들어보고 있는 셈인데...

 

다른것보단 TCP/IP 통신에서 그때 말썽이 일어나서리... 내부 망에서는 잘되었는데...

 

외부망에 연결되면 불규칙하게 끊긴단 말이지...

 

#####################################################################################

 

디자이너를 업데이트를 조금씩 조금씩 버그 잡고 편의기능 잡고 뭐.... 이런 저런...

 

아래 화면 오더를 받고 디자이너로 작업을 시작하고 이벤트 및 다른 코드들을 넣고 테스트해서 배포하는데

 

걸린 시간은 3시간 30분... 음 빠른건지 느린건지 ... 알 수 없지만 소스를 만들어내도 할게 많네...

 

# 최근 몇일간 추가한 내용을 기록해둔다.

 - 컬럼이 숫자 타입인경우 색상을 DodgerBlue 색상으로 표기, visible = false 인건 LightGray

 - 뷰어와 디자이너에 그리드에 헤더에 외곽선 추가 ( 병합은 되는데 색이 안보여서... )

 - 디자인 요소들이 새로 만들어지고 삭제 될때의 정리소스 처리 ( 사용자 객체가 지워지지 않아 나중에 뻗어버리는 현상 제거 )

 

# 조건판넬과 데이타판넬에 대해 수정( 예정 )

  - {컬럼:컬럼설명} 단위로 목록을 등록하면 별도의 도구상자를 띄워 해당 컬럼에 대한 컨트롤 목록을 보여주고 거기서 드래그 드랍으로 조건판넬에 넣을 수 있게

   수정할 예정임

 

# 쿼리

  - 소스를 만들어내서 쿼리처리부분등을 만들어둔 쿼리를 통해서 얻어내는데! 이게 좀 고쳐야 됨( 복사 붙여넣기 하고 또 코드에 맞춰 수정하는 영역이 있음. )

   아니면 별도의 쿼리를 따로 생성해서 그때 그때 만들어내야겠다.

  - ssms Addins 많이 쓸만해졌는데... 역시 메타관리가 별도로 안되니까. 카피 앤 패스트가... 걸리적거리네.

 

 

 

 추가 수정.

지난번 수정 후 사용하는데 정상적으로 동작을 안하고 미쳐날뛴다...

이번주말에 작업을 해야지 했는데 의외로 저녁에 3시간 손봐서 마쳤다.

 

 이번 문제는 리본바구성을 했을때, 버튼 목록을 재구성하면서 제대로 컨트롤이 안지워졌다.

 

판넬

   - 리본버튼1

        - 속성뷰

        - 속성 ( 13개 )

                - 속성뷰컨트롤

   - 리본버튼2

   - 리본버튼3

   - 리본버튼4

 

저렇게 되어 있는데 mockup xml을 읽어들이면서 컨트롤 생성하면서 버튼만 판넬에서 지웠더니

나머지 객체들이 살아 남아서 메모리에 둥둥 떠있었다. 그래서 지난번 제거하던 소스코드를 모두 지우고

다시 지우는 코드를 다시 만들어놓고 테스트해서 원래 동작하던 코드로 만들어놨다.

 

for( int loop = Controls.Count ; loop <= 0 ; loop ++)

     Controls[ loop ].Dispose();   // 요렇게 하니까 일일이 컨트롤에서 빼는것도 자동으로 빠진다.

 

 

------------------------------------------------------------------------------------------------------------

  이번에 복잡한 화면 하나 구성하는데 ... 몇번 두번 다시 열었더니 프로그램이 뻗었다... ㅡ,.ㅡ?

 이번 연휴기간에 차근 차근 확인해보니 두가지 문제가 있었는데, 예외처리를 해서 막았다.

 

원인은 MockupLayoutGrid 와 MockupRibbonBar 두개가 이상하게 생성되었던 컨트롤들이 제대로

제거가 안되는 현상이 있어서 화면을 열때마다 1000개씩 증가했었다. 예외처리를 계속하다가 줄이고 줄였는데...

MockupRibbonBar에서 32개짜리가 도저히 줄일 방법을 못찾겠네. 그래서 생성 자체를 막아버렸더니

동작을 제대로 한다! +_+;;; 어차피 디자인 저장된 xml 파일을 불러들여서 버튼까지 생성하는 거니까

내부에서의 프로퍼티에 의한 생성은 굳이 필요없겠지만... 왜 제대로 안지워질까??

 

 이제 다시 프로그램이 뻗는 일은 없을 것 같다.

--------------------------------------------------------------------------------------------------------------------------

 

 메뉴를 등록하는데 자꾸 까먹게 되네...

# 1lv

## 2lv

### 3lv 인데... 거꾸로 작업을 하게 되네.

 

문서 작업할때 내가 반대로 작업을 해와서 ... 쩝... 검색도 추가했다.

 

--------------------------------------------------------------------------------------------------------------------------

 

 디자인 작업을 하다가 문득 떠오른 건데..

 

현재 PL로 있는 분들과 좀 떨어져서 개발 지원을 하고 있다. 카톡을 이용해서 엑셀로 화면정의서를 받고 전화로

내용을 전달 받고 있는데...

 

 어차피 화면에 디자인 될 내용이니까 mockup을 화면 프레임웍에 밀어 넣어놓으면 어떨까? 싶은 생각은 들었다.

화면을 등록할때 dll이 없으면 빈 화면의 디자인 가능한 컨트롤들을 올려주면. PL은 해당 디자인을 하고, 코멘트를

거기에 달아둔 다음 개발자를 할당해주면! 개발자는 해당 화면을 열어서 소스변환을 통해 소스를 내려받고

 이걸 토대로 작업을 해서 완료시킨다. 그리고 dll을 올리면 올라간 디자이너로 열리게 되는... 뭐 그런... 생각을

잠깐 했다. 정직이 아닌지라 상상만 해봤다.

 

 

 

 

 

## 실행할때 ...

textDoc.DTE.ExecuteCommand("Query.Execute");

실행은 안해봤고...  SendKeys.Send( ... ) 로 하면 된다.

 

## 현재 로그인정보 ... ( 추후에 직접 sql 쿼리나 시스템 뷰를 이용해서 뭔가 만들때 필요할 듯 하다. )

 

VSIntergration.dll삭제,  SqlPackageBase.dll이 4.0 런타임 이므로 프로젝트 자체를 4.0으로 변경.
var conn = ServiceCache.ScriptFactory

                                .CurrentlyActiveWndConnectionInfo

                                .UIConnectionGroupInfo;

 

textDoc.Selection.NewLine();
textDoc.Selection.Insert( string.Format("S:{0},U:{1},P:{2},D:{3}",

                                                 conn[0].ServerName,

                                                 conn[0].UserName,

                                                 conn[0].Password,

                                                 conn[0].AdvancedOptions[6] ), 0);

 
## 솔루션과 선택된 노드와 에디터 연계 ...

/*
// Nuget 패키지관리자 ( 콘솔 ) : Install-Package VSSDK.Shell.10
// Shell.10.dll이 필요해서 구글링.
// : ServiceProvider
*/
IObjectExplorerService objExplorer = ServiceCache.ServiceProvider.GetService(typeof(IObjectExplorerService)) as IObjectExplorerService;

 

// 솔루션 탐색기에서 선택된 것 ...
int selectedNodeCount = 0;
INodeInformation[] selectedNodes = null ;
objExplorer.GetSelectedNodes( out selectedNodeCount, out selectedNodes );


// DB정보 : Server[@Name='DB-SVR']/Database[@Name='TabeName']
//  테이블 : Server[@Name='DB-SVR']/Database[@Name='DBName']/Table[@Name='TabeName' and @Schema='dbo']
INodeInformation findNode = objExplorer.FindNode(

                      "Server[@Name='DB-SVR']/Database[@Name='DBName']/Table[@Name='TabeName' and @Schema='dbo']");


// 테스트 아직 로딩 안된 객체 선택! ( 찾아감 )
objExplorer.SynchronizeTree( findNode );

 

*** 이거 쉽지 않더라.

 우선 SQL Server 버젼이 2014! AddIn 만드는것은 VS2013 Community로 .Net 4.0, SqlFormatter는 .NET 3.5

 

 구글링을 해도 대부분 2008버젼, 또는 2012가 있긴한데... 영어해석이 안되서 그런건지... 번역기돌려서 그런지...

참조된 dll경로도 인터넷 글과 조금씩... ( 많이 다르면 다른 글을 봤을텐데... ) 다르다.

 

 참고사항으로 아래 project파일의 참조 링크경로를 복사해둔다.

 

<Reference Include="Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
      <EmbedInteropTypes>False</EmbedInteropTypes>
    </Reference>
    <Reference Include="Microsoft.SqlServer.RegSvrEnum, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.RegSvrEnum.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.VisualStudio.OLE.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
      <HintPath>..\packages\VSSDK.OLE.Interop.7.0.4\lib\net20\Microsoft.VisualStudio.OLE.Interop.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.VisualStudio.Shell.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\VSSDK.Shell.10.10.0.4\lib\net40\Microsoft.VisualStudio.Shell.10.0.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="ObjectExplorer">
      <HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\ObjectExplorer.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="SQLEditors">
      <HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\Extensions\Application\SQLEditors.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="SqlPackageBase, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
      <HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\SqlPackageBase.dll</HintPath>
      <SpecificVersion>False</SpecificVersion>
      <Private>False</Private>
    </Reference>
    <Reference Include="SqlWorkbench.Interfaces">
      <HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\SqlWorkbench.Interfaces.dll</HintPath>
      <Private>True</Private>
    </Reference>

 

 

  구글링해도 자세한건 대부분 영어라 찾기 어렵다. 한글이 없네...

 

# VS AddIns 만들면서

 - 솔루션탐색기에서 프로젝트에 Context Menu를 띄울때.

      CommandBars cBars = (CommandBars)_applicationObject.CommandBars;

      CommandBar vsBarProject = cBars["Project"];

      commandProjectSettings.AddControl(vsBarProject, 1);

 

- 솔루션탐색기에서 특정 파일에 대해 Context Menu를 띄울때

      CommandBar vsBarFile = cBars["Item"];

    * Status 설정할때

                    UIHierarchy UIH = _applicationObject.ToolWindows.SolutionExplorer;
                    SelectedItem SelectItem = _applicationObject.SelectedItems.Item(1);
                    if (SelectItem != null)
                    {
                        if (Path.GetExtension(SelectItem.Name) == ".xaml")  //확장자가 .xaml일때 메뉴가 뜸.
                        {

                             Status = 지원, 활성화;

                        }

                   }

 

 - 솔루션 탐색기에서 선택된 항목에 대한 실제 파일 경로를 가져올때.

 

                    UIHierarchy UIH = _applicationObject.ToolWindows.SolutionExplorer;
                    Array SelectItems = (Array)UIH.SelectedItems;
                    if (SelectItems != null)
                    {
                        foreach (UIHierarchyItem item in SelectItems)
                        {                      
                            ProjectItem prj = item.Object as ProjectItem;
                            string projectName = prj.ContainingProject.Name;
                            string projectPath = "" + prj.Properties.Item("FullPath").Value;  // 경로

                        }

                    }

 

 

 워... 드디어 성공했다. 썩을 편집기에 붙여넣는게 더 어려웠다.

편집기에서 쿼리를 선택해서 단축키를 통해 addin된게 바꿔준다.

 

 참고 링크에 apexsql reflect 라는 sql formatter가 있는데 이거 free무료라고 되있어서 다운 받고 설치해서 이거 저거 돌려봤는데...

콤마위치나 문법체크해서 틀리면 변환을 안해준다. 에러 떨궈버림...  그외 많은 링크들을 봤지만... 여기 part 1, 2, 3과 몇개 글을 보면 된다.

 

조금 대략적으로 기억나는데로 써놓자.

 

참고 : http://solutioncenter.apexsql.com/the-art-and-science-of-creating-ssms-2012-add-ins-part-1-laying-the-foundation/

 

Visual Studio 2013 Community 에서 AddIns를 개발하려면...
프로젝트에 확장성 > AddIns 프로젝트가 나타나야 되는데 없다!

https://www.visualstudio.com/downloads/download-visual-studio-vs

 

여기서... 2013용 도구 > 2013 SDK 다운로드!

설치...

대략 집에서도 30분 정도...

New Project에서 확장성 > AddIn 선택
  = JSFW.AddIns 이름 지정.

 

 

위자드가 뜸.

... 스샷 6개.
스샷에서 4번째에서 두번째 체크박스(I would like .. )를 체크 하면 아래 Connection.cs 에서
OnConnection의 구현부는 딱히 수정하지 않아도 우선 뜸.
- 추가적으로 Command 아이디와 버튼텍스트, 툴팁 정도만 수정하면 됨.

 

 

그리고 Exe( ) 메서드 본문을 작성.

 

프로젝트 생성이 끝나면


dll참조 : 설치된 SSMS 위치에 찾아가서...  2014버젼이라 120에 있었는데..

  Microsoft\MicroSoft SQL Server\120\tools\binn\     dll들이 있다. (binn맞음)
  - SQLEditors
  - SqlPackageBase
  - SqlWorkbench.Interfaces

 

 

 


생성된 프로젝트에서 Connect.cs 파일에서
## using문
using System.Collections.Generic;
using System.Linq;
using System.Resources;
using System.Reflection;
using System.Globalization;
using System.Windows.Forms;

using Microsoft.SqlServer.Management.UI.VSIntegration;
using Microsoft.SqlServer.Management.UI.VSIntegration.Editors;
using Microsoft.SqlServer.Management.QueryExecution;
using Microsoft.SqlServer.Management.SqlMgmt;
using Microsoft.VisualStudio.CommandBars;

using JSFW.NEWFMT;


## OnConnection 구현 : 위 내용.


## Exec 구현 : 지정된 명령이 실행될때!!!
 여기선 에디터에서 선택된 쿼리정보를 가져와서 재정렬 한 후 가져온 곳에 덮어씌워주면 된다.

try
{
    //열려진 문서의 인스턴스를 취득해서
    TextDocument textDoc = (TextDocument)_applicationObject.ActiveWindow.Document.Object("TextDocument");
    if (textDoc != null)
    {
        textDoc.StartPoint.CreateEditPoint();
        string currentSelectedQuery = textDoc.Selection.Text;
        //커맨드를 삽입하고
        if (string.IsNullOrEmpty(currentSelectedQuery) == false)
        {
            currentSelectedQuery = Exec_Formatter(currentSelectedQuery);
            textDoc.Selection.Insert(currentSelectedQuery,   (int)vsInsertFlags.vsInsertFlagsContainNewText);
        }
    }
}
catch (Exception exx)
{
    System.Windows.Forms.MessageBox.Show(exx.Message);
}

Exec_Formatter() 는 쿼리 정렬 메서드.

여기서 Insert 에서 시간을 많이 잡아먹었다.

붙여 넣었더니 정렬된 쿼리가 이상한 모양으로 ~~~!
클립보드에 붙였다가 textDoc.Paste() 호출하니 잘 붙긴하더라... 원하던 기능이 아니므로 최후에 하기로 남겨두고
방법을 찾다가... 결국엔 찾았다.

AddIns 파일을 수정하고 빌드 정해진 AddIns폴더에 두고 SSMS를 켜주면 도구메뉴 밑에 만들어둔 버튼명이 있다.

이걸 옵션가서 원하는 단축키로 만들어주고, 쿼리 대충 하나 불러놓고 선택한 후 단축키를 딱!!!! 결과 확인!

AddIns 수정과 설치하는 방법은 좀더 공부와 삽질을 해야 된다. ( Poor Sql formatter 소스보고 공부 중.. .)
영어가 안되서... 많이 힘들다.

 

#바꾸기 전

 

# 바꾼 후

 

아싸~~

AddIns 되니까. 흐흐흐.... 뭔가 더 바꿔볼 수 있게 되었다. +_+;;

 

짜놓은 프로그램들 비쥬얼스튜디오에 추가하면 일일이 따로 안 띄워도 되고 복사해서 붙여넣기 안해도 되공...

 

 

  작업을 하다보면 리포트관련 폼을 만들때 너무 어렵다. 선그리고 일일이 지정하고...

거창한 툴을 만들고 싶은건 아니다.

 

 엑셀을 드로잉 도구로 사용하고 엑셀을 받아서 리포트 구성을 마치고, 프린트가 가능하다면???

 

첫번째, 두번째까지는 이미 만들어둔 것이 있다. 리포트 구성을 끝내고 이 소스는 프린트를 해주는게 아닌

엑셀에 담는 소스를 만들어서 클립보드에 붙여주는 ...

 

 머리속에 있는 것들을 대충 메모장에 순서대로 정리해서 관련 된 것들을 나열해보니, 될것 같다!

 > 고민 고민 하면서 여러가지 상황을 고려해보니... 다른거 하는게 남는 거라고 생각된다.

 > 리포트 양식이란게 워낙 여러가지고 마스터 디테일... 예외 상황들 처리하다가 몇년 훌쩍 가겠다.

 > 어차피 리포트 많이 그리지도 않는데... 다른데 시간을 쓰자.

 

 

 리포트툴을 사용했던 경험들을 되새겨서 좀 더 편하게 리포트를 그리고 만들수 있는 방법들을

정리해봤고, 프린트 하는 소스를 샘플구현해서 띄웠더니 어렵지않게 나오긴 했다.

 

 예외 처리를 어떻게 하느냐. 또 직접 그려보니 단위가 다르던데... 이걸 맞춰서 보기 좋게 꾸미려면

좀 긴작업이 될듯 하다.

 

 아주 작은 기능으로 우선 리포트 프린트 하고 추가적인 기능들도 고려해봐야지...

 

우선 쿼리 포맷터를 마무리 하고....

 

 

 자고 아침에 일어나서 생각이 난게... 괜한짓 같다는 걸 느끼고

주석문 일체 삭제하는 것으로 방향을 잡았음.

 있는 주석 유지하느라 포멧 지정하는 소스가 더 지저분해지는 것을 방지하고,

정말 긴... 쿼리문에 주석을 내가 더 쉽게 달수 있는 기능을 넣어주면 되니까.

있는 주석들 정렬하기도 번거롭고...

 실제 쿼리들로 테스트 한 결과는 만족!!

 텍스트박스가 아닌 RichTextBox로 컬러를 넣을까?... 아니면 add을 구현해서

mssql에 붙여버릴까...

 

------------------------------------------------------------------------------------------

수정사항이 생겼다.

1. 콤마위치와 주석문 사이에서 오락가락...

   : 디버깅이 쉽지 않네.. 앞에 뒀다 뒤에 뒀다...

   : 더 복잡해지면.. 그냥 프로시져 앞에 배치된 주석 빼고 제거 해야겠네!!!


select col1, /*aa*/ col2 as c2 /*aaa*/, col3 c3 from TB00 a
where  a.KEY = @a
order by    col1, /*oa*/ col2 /*oaa*/, col3 

이런 쿼리가 있을때!!!

 

 *** 콤마 위치가 중요함.

 

select col1, /*aa*/                  주석문 앞에...

        col2 as c2 /*aaa*/,         주석문 뒤에...

        col3 c3

 

양쪽 모두 동일하게 배치되도록 수정하였다.

order by, group by 역시 동일하다.

 

# 앞으로 배치

SELECT  col1/*aa*/
          ,col2 AS c2/*aaa*/       
          ,col3 c3
FROM    TB00 a
WHERE   a.KEY = @a
ORDER   BY col1/*oa*/
           ,col2/*oaa*/           
           ,col3

 

# 뒤로 배치

SELECT  col1,/*aa*/
           col2 AS c2,/*aaa*/
           col3 c3
  FROM  TB00 a
 WHERE  a.KEY = @a
 ORDER  BY col1,/*oa*/
           col2,/*oaa*/
           col3 

 

2. 엄청 긴 쿼리를 생각 못했다.  textbox에서 maxlength에서 짤리더라.

  그래서 클립보드에서 긁어서 길이보다 넘는것은 maxlength 를 재설정.

 

 

+ CTE도 정렬 마쳤다.

+ declare 문

+ while

+ exec

+ Merge

+ pivot

 

 기타 버그.

 

디테일이 조금 떨어지는? 공백이 어쩌다 원하지 않은 공간에 들어간다.

 

Merge 구문을 ..? 할까 말까 고민된다...  필요한 구문인가 싶어서...

 

 

UI 작업을 시작해야지!!

 

 + 추가 기능

 - 주석문 템플릿

 - 쿼리 백업기능

 

 

라인수를 보니 3500 라인을 쳤네...  타수도 느린데 많이도 쳤네.

 

 

음  sql formatter 소스...

https://github.com/TaoK/PoorMansTSqlFormatter

 

검색해서 소스를 열어봤는데... 잠깐 봤지만 완전 다른 세상의 코드...

 

어떻게 소스를 처음 생각할때 코드를 저렇게 만들까? 영어가 가능하니까 그럴까???

 

외국에 소스코드를 볼때마다 뭔가 내 코드는 아쉬운점이 있다.

 

 

 

오전에 투표하고 와서 계속 디버깅을 하며 1차 작업을 완성했다.

 

미진한 부분은 다양한 쿼리를 직접 돌려보면서 테스트하면서 디버깅을 하면 될 것 같다.

 

-- sql은 웹사이트에 긁어온 쿼리를 정렬해본것.

 

-- 간단 간단한 쿼리들 해봤고.

 

http://www.dpriver.com/pp/sqlformat.htm  이 포맷터의 예문으로 테스트 해봤는데 조금 손델곳이 보임.

 

이 포맷터의 C#버젼이 지금 내 프로그램 양식과 많이 흡사하네...

 

 

## 내 프로그램 추가 할 내용은 컬럼에 주석 자동으로 넣어주기!!!

 

SP 2개를 작성해서 테이블에 대한 CRUD 프로시져를 통째로 만들어내는 걸 이미 만들어놓았으니...

 

이번주엔 일하면서 버그 찾아야지...

 

+ While 조건문

   begin

         ...

   end

 

+ declare @tb table

   (

         ...

   )

 

 

 

 

 

 드디어!!! 드디어 case문에 대하 정렬 방법을 제대로 찾았다. 아싸!

 

괄호 ( ), begin ~ end, case ~ end

 

바로 전 버젼도 case문을 여러개 겹쳐놓으면 제대로 위치 못찾고 해맸는데... 해결이 되었다.

 

앞에서 계속 칸수 계산했었는데... 퇴근전에 떠오른 아이디어가 해결해줬다.

 

툴 개발은 이제 뭐... 다른건 칸수 맞춰서 띄워주고 newline 넣는 것만 남았다.

 

굿... 굿... 낼 투표하고 와서 수정하면 이번주에 끝날 수 도 있겠는데...

 

 

# CASE ~ END와 괄호'(', ')'를 테스트 한 결과

 

 

case문에 막 끼워넣는 것.. 위치 잘 잡고.. 내가 원하는 포맷대로 맞춰졌다.