Revision 189

View differences:

tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.mssqlserver.app</artifactId>
7
  <packaging>pom</packaging>
8
  <name>${project.artifactId}</name>
9
  <parent>
10
      <groupId>org.gvsig</groupId>
11
      <artifactId>org.gvsig.mssqlserver</artifactId>
12
      <version>1.0.32</version>
13
  </parent>
14

  
15
  <modules>
16
    <module>org.gvsig.mssqlserver.app.mainplugin</module>
17
  </modules>
18

  
19
</project>
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/org.gvsig.mssqlserver.app.mainplugin/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.mssqlserver.app.mainplugin</artifactId>
7
  <packaging>jar</packaging>
8
  <name>${project.artifactId}</name>
9
  <description>MS SQLServer support</description>
10

  
11
  <parent>
12
      <groupId>org.gvsig</groupId>
13
      <artifactId>org.gvsig.mssqlserver.app</artifactId>
14
      <version>1.0.32</version>
15
  </parent>
16

  
17
  <dependencies>
18
    <dependency>
19
        <groupId>org.gvsig</groupId>
20
        <artifactId>org.gvsig.tools.lib</artifactId>
21
        <scope>compile</scope>
22
    </dependency>
23
    <dependency>
24
        <groupId>org.gvsig</groupId>
25
        <artifactId>org.gvsig.andami</artifactId>
26
        <scope>compile</scope>
27
    </dependency>
28
    <dependency>
29
        <groupId>org.gvsig</groupId>
30
        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
31
        <scope>compile</scope>
32
    </dependency>
33
    <dependency>
34
        <groupId>org.gvsig</groupId>
35
        <artifactId>org.gvsig.mssqlserver.provider</artifactId>
36
        <scope>compile</scope>
37
    </dependency>
38

  
39
    <dependency>
40
      <groupId>com.microsoft.sqlserver</groupId>
41
      <artifactId>sqlserver-jdbc</artifactId>
42
      <scope>runtime</scope>
43
    </dependency>
44
    <dependency>
45
      <groupId>commons-dbcp</groupId>
46
      <artifactId>commons-dbcp</artifactId>
47
      <scope>runtime</scope>
48
    </dependency>
49
    <dependency>
50
      <groupId>commons-collections</groupId>
51
      <artifactId>commons-collections</artifactId>
52
      <scope>runtime</scope>
53
    </dependency>
54
    <dependency>
55
      <groupId>commons-pool</groupId>
56
      <artifactId>commons-pool</artifactId>
57
      <scope>runtime</scope>
58
    </dependency>
59
  </dependencies>
60

  
61
    <properties>
62
        <!-- Package info property values -->
63
        <!-- Default values in org.gvsig.desktop -->
64
        <gvsig.package.info.name>Formats: MS SQLServer support</gvsig.package.info.name>
65
        <gvsig.package.info.state>testing</gvsig.package.info.state>
66
        <gvsig.package.info.official>true</gvsig.package.info.official>
67
        <gvsig.package.info.javaVM>j1_8</gvsig.package.info.javaVM>
68
        <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.3.0</gvsig.package.info.dependencies>
69
        <gvsig.package.info.categories>Formats,Vector,Database</gvsig.package.info.categories>
70
        <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-mssqlserver/pool/</gvsig.package.info.poolURL>
71
    </properties>
72

  
73

  
74
</project>
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/org.gvsig.mssqlserver.app.mainplugin/buildNumber.properties
1
#Tue Jan 15 14:22:50 CET 2019
2
buildNumber=34
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/org.gvsig.mssqlserver.app.mainplugin/src/main/resources-plugin/readme_es.txt
1

  
2
Notas acerca de la implementacion del proveedor de MS SQLServer.
3
====================================================================
4

  
5
Software
6
----------
7

  
8
Las pruebas realizadas durante el desarrollo se han hecho sobre:
9

  
10
- Microsoft SQL Server Express 2014 (64-bit), versi?n 12.0.2000.8
11
- Microsoft Windows NT 6.3 (9600), plataforma NT x64
12

  
13
El acceso al servidor se realiza a traves de JDBC usando el driver:
14

  
15
- Microsoft JDBC Driver 6.0 for SQL Server, may 2016 (sqljdbc42.jar).
16

  
17
Configuraci?n
18
--------------
19

  
20
Las pruebas se han realizado usando la instancia por defecto "SQLEXPRESS".
21

  
22
Para poder acceder al servidor es necesario:
23

  
24
- Habilitar la conexion al servidor a traves de TCP/IP. Esto se activara
25
  desde:
26
  - Sql Server Configuration Manager
27
  - Configuracion de red de SQL Server
28
  - Protocolos de SQLEXPRESS
29
  - TCP/IP
30
   - General
31
     - Habilitado: Si
32
   - Direcciones IP
33
     - IP4
34
       - Activo: Si
35
       - Habilitado: Si
36

  
37
- Deberan estar "En ejecucion" los servicios de:
38
  - SQL Server (SQLEXPRESS)
39
  - SQL Server Browser.
40
    Este servicio es necesario para poder aceptar conexiones TCP/IP contra el
41
    servidor y por defecto, tras la instalacion de MS SQL Sever, no se iniciaba
42
    automaticamente en mi equipo.
43

  
44
- Durante todas las pruebas se ha utilizado "Autenticaci?n de SQL Server".
45
  Es posible que para otros tipos de autenticaci?n sea necesario incluir alguna
46
  otra libreria (como sqljdbc_auth.dll x64/x86).
47

  
48
Soporte espacial
49
-------------------
50

  
51
Siempre que se exporta a BBDD se utilizara el tipo "geometry" para crear los
52
campos de tipo geometria, y en general se usara siempre este tipo de datos.
53

  
54
Se ha implementado un soporte limitado para el tipo de datos "geography". Si una
55
tabla contiene un campo de este tipo se leera y gvSIG podra trabajar con el. Si
56
una tabla contiene mas de un campo de tipo geometria siendo estos de tipos distintos,
57
unos "geometry" y otros "geography", gvSIG puede dar problemas para acceder a estos,
58
especialmente al de tipo "geography".
59

  
60
Ahora mismo el tipo de geometria asociado a una columna de la BBDD es GEOMETRY,
61
es decir, no se sabe si es punto, linea o poligono.
62

  
63
Sistemas de referencia
64
------------------------
65

  
66
La lista de sistemas de referencia disponibles esta almacenada en la tabla
67
sys.spatial_reference_systems, y solo tiene definidas unos 390 sistemas
68
de referencia. Habria que averiguar cargar otros sistemas de referencia.
69

  
70
Valores por defecto
71
---------------------
72

  
73
Los datos de conexion por defecto son:
74

  
75
- Host: 127.0.0.1
76
- Instance: SQLEXPRESS
77
- Database: master
78
- Schema: dbo
79
- user: sa
80
- password: 123
81

  
82
Los valores instance, database, schema y user se corresponden con valores
83
validos para una instalacion por defecto de SQL Server.
84

  
85
Problemas conocidos
86
--------------------
87

  
88
- No se guardan los datos de la conexion entre sesiones de gvSIG.
89

  
90
- La herramienta "Selection by layer" no funciona.
91

  
92
- Si una capa de gvSIG declara un campo "double" con precision y size,
93
  al expportarlo a BBDD lo exporta como "DOUBLE PRECISION" en lugar de como
94
  "NUMERIC(size,precision)".
95

  
96
- No se estan creando indices sobre los campos al exportar a BBDD.
97

  
98
- En la exportacion a BBDD, en el paso que pide el nombre de la tabla,
99
  primero muestra como esquema "public" y cuando termina de leer las tablas
100
  de la BBDD para mostrarlas (tarda unos segundos) cambia de public a "dbo".
101
  Esto puede causar problemas si el usuario pulsa en siguiente antes de que se
102
  haya actualizado el esquema con el que se corresponde con la BBDD ya que
103
  intentaria crear la tabla en el esquema "public" y este no existe en SQLServer.
104

  
105
- Solo se ha implememtado soporte para geometrias 2D (no 3D, 2DM o 3DM).
106

  
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/org.gvsig.mssqlserver.app.mainplugin/src/main/resources-plugin/mssqlserver-jdbc-driver-license60.txt
1
MICROSOFT SOFTWARE LICENSE TERMS
2

  
3
MICROSOFT JDBC DRIVER 6.0 FOR SQL SERVER
4

  
5
These license terms are an agreement between Microsoft Corporation (or based on where you 
6
live, one of its affiliates) and you. Please read them. They apply to the software 
7
named above, which includes the media on which you received it, if any. The terms also apply to 
8
any Microsoft
9

  
10
? updates,
11
? supplements,
12
? Internet-based services, and
13
? support services
14

  
15
for this software, unless other terms accompany those items. If so, those terms apply.
16

  
17
BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT 
18
ACCEPT THEM, DO NOT USE THE SOFTWARE.
19

  
20
If you comply with these license terms, you have the rights below.
21

  
22
1. INSTALLATION AND USE RIGHTS. 
23

  
24
a. Installation and Use.
25

  
26
i. You may install and use any number of copies of the software on your devices.
27

  
28
b. Third Party Programs. The software may include third party programs that Microsoft, 
29
not the third party, licenses to you under this agreement. Notices, if any, for the third 
30
party program are included for your information only.
31

  
32
2. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.
33

  
34
a. Distributable Code.
35

  
36
i.	Right to Use and Distribute. You are permitted to distribute the software in programs you 
37
develop if you comply with the terms below:
38

  
39
* You may copy and distribute the object code form of the software (?Distributable Code?) in 
40
programs you develop. You may not modify the software.
41
* You may permit distributors of your programs to copy and distribute the Distributable Code 
42
as part of those programs.
43
ii.	Distribution Requirements. For any Distributable Code you distribute, you must
44
* add significant primary functionality to it in your programs;
45
* require distributors and external end users to agree to terms that protect it at least as 
46
much as this agreement;
47
* display your valid copyright notice on your programs; and
48
* indemnify, defend, and hold harmless Microsoft from any claims, including attorneys? fees, 
49
related to the distribution or use of your programs.
50
iii.	Distribution Restrictions. You may not
51
* alter any copyright, trademark or patent notice in the Distributable Code;
52
* use Microsoft?s trademarks in your programs? names or in a way that suggests your programs 
53
come from or are endorsed by Microsoft;
54
* include Distributable Code in malicious, deceptive or unlawful programs; or
55
* modify or distribute the source code of any Distributable Code so that any part of it 
56
becomes subject to an Excluded License. An Excluded License is one that requires, as a 
57
condition of use, modification or distribution, that
58
* the code be disclosed or distributed in source code form; or
59
* others have the right to modify it.
60

  
61

  
62
3. SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you 
63
some rights to use the software. Microsoft reserves all other rights. Unless applicable law 
64
gives you more rights despite this limitation, you may use the software only as expressly 
65
permitted in this agreement. In doing so, you must comply with any technical limitations in 
66
the software that only allow you to use it in certain ways. You may not
67

  
68
? work around any technical limitations in the software;
69
? reverse engineer, decompile or disassemble the software, except and only to the extent 
70
that applicable law expressly permits, despite this limitation;
71
? make more copies of the software than specified in this agreement or allowed by 
72
applicable law, despite this limitation;
73
? publish the software for others to copy;
74
? rent, lease or lend the software;
75
? transfer the software or this agreement to any third party; or
76
? use the software for commercial software hosting services.
77

  
78
4. EXPORT RESTRICTIONS. The software is subject to United States export laws and 
79
regulations. You must comply with all domestic and international export laws and 
80
regulations that apply to the software. These laws include restrictions on destinations, end 
81
users and end use. For additional information, see www.microsoft.com/exporting.
82

  
83
5. SUPPORT SERVICES. Because this software is ?as is,? we may not provide support 
84
services for it.
85

  
86
6. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-
87
based services and support services that you use, are the entire agreement for the software 
88
and support services.
89

  
90
7. APPLICABLE LAW.
91

  
92
a. United States. If you acquired the software in the United States, Washington state law 
93
governs the interpretation of this agreement and applies to claims for breach of it, 
94
regardless of conflict of laws principles. The laws of the state where you live govern all 
95
other claims, including claims under state consumer protection laws, unfair competition 
96
laws, and in tort.
97

  
98
b. Outside the United States. If you acquired the software in any other country, the laws of 
99
that country apply.
100

  
101
8. LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights 
102
under the laws of your country. You may also have rights with respect to the party from 
103
whom you acquired the software. This agreement does not change your rights under the laws 
104
of your country if the laws of your country do not permit it to do so.
105

  
106
9. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED ?AS-IS.? YOU 
107
BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS 
108
WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE 
109
ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS 
110
AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER 
111
YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES 
112
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-
113
INFRINGEMENT.
114

  
115
10. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. YOU CAN 
116
RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP 
117
TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING 
118
CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL 
119
DAMAGES.
120

  
121
This limitation applies to
122

  
123
? anything related to the software, services, content (including code) on third party Internet 
124
sites, or third party programs, and
125
? claims for breach of contract, breach of warranty, guarantee or condition, strict liability, 
126
negligence, or other tort to the extent permitted by applicable law.
127

  
128
It also applies even if Microsoft knew or should have known about the possibility of the 
129
damages. The above limitation or exclusion may not apply to you because your country may 
130
not allow the exclusion or limitation of incidental, consequential or other damages.
131

  
132
Please note: As this software is distributed in Quebec, Canada, some of the clauses in this 
133
agreement are provided below in French.
134

  
135
Remarque : Ce logiciel ?tant distribu? au Qu?bec, Canada, certaines des clauses dans ce 
136
contrat sont fournies ci-dessous en fran?ais.
137

  
138
EXON?RATION DE GARANTIE. Le logiciel vis? par une licence est offert ? tel quel ?. 
139
Toute utilisation de ce logiciel est ? votre seule risque et p?ril. Microsoft n?accorde aucune 
140
autre garantie expresse. Vous pouvez b?n?ficier de droits additionnels en vertu du droit local 
141
sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont 
142
permises par le droit locale, les garanties implicites de qualit? marchande, d?ad?quation ? un 
143
usage particulier et d?absence de contrefa?on sont exclues.
144

  
145
LIMITATION DES DOMMAGES-INT?R?TS ET EXCLUSION DE 
146
RESPONSABILIT? POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de 
147
ses fournisseurs une indemnisation en cas de dommages directs uniquement ? hauteur de 5,00 
148
$ US. Vous ne pouvez pr?tendre ? aucune indemnisation pour les autres dommages, y 
149
compris les dommages sp?ciaux, indirects ou accessoires et pertes de b?n?fices.
150

  
151
Cette limitation concerne :
152
? tout ce qui est reli? au logiciel, aux services ou au contenu (y compris le code) figurant 
153
sur des sites Internet tiers ou dans des programmes tiers ; et
154
? les r?clamations au titre de violation de contrat ou de garantie, ou au titre de 
155
responsabilit? stricte, de n?gligence ou d?une autre faute dans la limite autoris?e par la loi 
156
en vigueur.
157

  
158
Elle s?applique ?galement, m?me si Microsoft connaissait ou devrait conna?tre l??ventualit? 
159
d?un tel dommage. Si votre pays n?autorise pas l?exclusion ou la limitation de responsabilit? 
160
pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la 
161
limitation ou l?exclusion ci-dessus ne s?appliquera pas ? votre ?gard.
162

  
163
EFFET JURIDIQUE. Le pr?sent contrat d?crit certains droits juridiques. Vous pourriez avoir 
164
d?autres droits pr?vus par les lois de votre pays. Le pr?sent contrat ne modifie pas les droits 
165
que vous conf?rent les lois de votre pays si celles-ci ne le permettent pas.
166

  
167

  
168

  
169

  
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/org.gvsig.mssqlserver.app.mainplugin/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<plugin-config>
3
  <libraries library-dir="lib/"/>
4
  <depends plugin-name="org.gvsig.app.mainplugin"/>
5
  <resourceBundle name="text"/>
6
  <extensions>
7
     <extension class-name="org.gvsig.mssqlserver.MSSQLServerExtension" active="true"/>
8
  </extensions>    
9
</plugin-config>
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/org.gvsig.mssqlserver.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<assembly>
2
  <id>gvsig-plugin-package</id>
3
  <formats>
4
    <format>zip</format>
5
  </formats>
6
  <baseDirectory>${project.artifactId}</baseDirectory>
7
  <includeBaseDirectory>true</includeBaseDirectory>
8
  <files>
9
    <file>
10
      <source>target/${project.artifactId}-${project.version}.jar</source>
11
      <outputDirectory>lib</outputDirectory>
12
    </file>
13
    <file>
14
      <source>target/package.info</source>
15
    </file>
16
    <file>
17
      <source>src/main/resources-plugin/config.xml</source>
18
    </file>
19
  </files>
20
  <fileSets>
21
    <fileSet>
22
      <directory>src/main/resources-plugin</directory>
23
      <outputDirectory>.</outputDirectory>
24
    </fileSet>
25
  </fileSets>
26
  <dependencySets>
27

  
28
    <dependencySet>
29
      <useProjectArtifact>false</useProjectArtifact>
30
      <useTransitiveDependencies>false</useTransitiveDependencies>
31
      <outputDirectory>lib</outputDirectory>
32
      <includes>
33
        <include>org.gvsig:org.gvsig.mssqlserver.provider</include>
34
      </includes>
35
    </dependencySet>
36

  
37
    <dependencySet>
38
      <useProjectArtifact>false</useProjectArtifact>
39
      <useTransitiveDependencies>false</useTransitiveDependencies>
40
      <outputDirectory>lib</outputDirectory>
41
      <includes>
42
		<include>com.microsoft.sqlserver:sqlserver-jdbc</include>
43
		<include>commons-dbcp:commons-dbcp</include>
44
		<include>commons-collections:commons-collections</include>
45
		<include>commons-pool:commons-pool</include>
46
      </includes>
47
    </dependencySet>
48

  
49
  </dependencySets>
50

  
51
</assembly>
52

  
53

  
54

  
55

  
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.app/org.gvsig.mssqlserver.app.mainplugin/src/main/java/org/gvsig/mssqlserver/MSSQLServerExtension.java
1

  
2
package org.gvsig.mssqlserver;
3

  
4
import org.gvsig.andami.IconThemeHelper;
5
import org.gvsig.andami.plugins.Extension;
6
import org.gvsig.fmap.mapcontext.MapContextLocator;
7
import org.gvsig.fmap.mapcontext.MapContextManager;
8

  
9

  
10
public class MSSQLServerExtension  extends Extension {
11

  
12
    @Override
13
    public void initialize() {
14
    }
15

  
16
    @Override
17
    public void postInitialize() {
18
        MapContextManager mapContextMgr = MapContextLocator.getMapContextManager();
19
        
20
        IconThemeHelper.registerIcon("layer", "layer-icon-mssqlserver", this);
21
        mapContextMgr.registerIconLayer("MSSQLServer", "layer-icon-mssqlserver");
22
    }
23
    
24
    @Override
25
    public void execute(String actionCommand) {
26
    }
27

  
28
    @Override
29
    public boolean isEnabled() {
30
        return false;
31
    }
32

  
33
    @Override
34
    public boolean isVisible() {
35
        return false;
36
    }
37
    
38
}
0 39

  
tags/org.gvsig.mssqlserver-1.0.32/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
    <modelVersion>4.0.0</modelVersion>
6
    <artifactId>org.gvsig.mssqlserver</artifactId>
7
    <version>1.0.32</version>
8
    <packaging>pom</packaging>
9
    <name>${project.artifactId}</name>
10
    <description>MS SQLServer support fort DAL and gvSIG</description>
11
    <parent>
12
        <groupId>org.gvsig</groupId>
13
        <artifactId>org.gvsig.desktop</artifactId>
14
        <version>2.0.234</version>
15
    </parent>
16

  
17
    <url>https://devel.gvsig.org/redmine/projects/gvsig-mssqlserver</url>
18
    <scm>
19
        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-mssqlserver/tags/org.gvsig.mssqlserver-1.0.32</connection>
20
        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-mssqlserver/tags/org.gvsig.mssqlserver-1.0.32</developerConnection>
21
        <url>https://devel.gvsig.org/redmine/projects/gvsig-mssqlserver/repository/show/tags/org.gvsig.mssqlserver-1.0.32</url>
22
    </scm>
23

  
24
    <repositories>
25
        <repository>
26
            <id>gvsig-public-http-repository</id>
27
            <name>gvSIG maven public HTTP repository</name>
28
            <url>http://devel.gvsig.org/m2repo/j2se</url>
29
            <releases>
30
                <enabled>true</enabled>
31
                <updatePolicy>daily</updatePolicy>
32
                <checksumPolicy>warn</checksumPolicy>
33
            </releases>
34
            <snapshots>
35
                <enabled>true</enabled>
36
                <updatePolicy>daily</updatePolicy>
37
                <checksumPolicy>warn</checksumPolicy>
38
            </snapshots>
39
        </repository>
40
    </repositories>
41

  
42

  
43
    <build>
44
        <plugins>
45
            <plugin>
46
                <groupId>org.apache.maven.plugins</groupId>
47
                <artifactId>maven-release-plugin</artifactId>
48
                <configuration>
49
                    <tagBase>https://devel.gvsig.org/svn/gvsig-mssqlserver/tags/</tagBase>
50
                    <goals>deploy</goals>
51
                </configuration>
52
            </plugin>                     
53
        </plugins>
54
    </build>
55

  
56

  
57
    <dependencyManagement>
58
        <dependencies>
59
            <dependency>
60
                <groupId>org.gvsig</groupId>
61
                <artifactId>org.gvsig.mssqlserver.provider</artifactId>
62
                <version>1.0.32</version>
63
            </dependency>
64
            <dependency>
65
                <groupId>org.gvsig</groupId>
66
                <artifactId>org.gvsig.mssqlserver.app.mainplugin</artifactId>
67
                <version>1.0.32</version>
68
            </dependency>
69
            <dependency>
70
                <groupId>com.microsoft.sqlserver</groupId>
71
                <artifactId>sqlserver-jdbc</artifactId>
72
                <version>6.0.0</version>
73
            </dependency>
74
        </dependencies>
75
    </dependencyManagement>
76
  
77
    <modules>
78
        <module>org.gvsig.mssqlserver.app</module>
79
        <module>org.gvsig.mssqlserver.provider</module>
80
    </modules>
81

  
82

  
83
</project>
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.provider/src/test/java/org/gvsig/fmap/dal/store/jdbc2/ExpressionBuilderTest.java
1
package org.gvsig.fmap.dal.store.jdbc2;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.apache.commons.lang3.ArrayUtils;
6
import org.cresques.cts.IProjection;
7
import org.gvsig.fmap.crs.CRSFactory;
8
import org.gvsig.fmap.dal.ExpressionBuilder;
9
import org.gvsig.fmap.dal.ExpressionBuilder.Config;
10
import org.gvsig.fmap.dal.ExpressionBuilder.GeometrySupportType;
11
import org.gvsig.fmap.dal.ExpressionBuilder.Parameter;
12
import static org.gvsig.fmap.dal.ExpressionBuilder.ParameterType.Constant;
13
import org.gvsig.fmap.dal.ExpressionBuilder.Variable;
14
import org.gvsig.fmap.dal.feature.spi.ExpressionBuilderBase;
15
import org.gvsig.fmap.geom.Geometry;
16
import org.gvsig.fmap.geom.GeometryLocator;
17
import org.gvsig.fmap.geom.GeometryManager;
18
import org.gvsig.fmap.geom.exception.CreateGeometryException;
19
import org.gvsig.fmap.geom.primitive.Point;
20
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
21

  
22
public class ExpressionBuilderTest extends AbstractLibraryAutoInitTestCase {
23
    
24
    @Override
25
    protected void doSetUp() throws Exception {
26

  
27
    }
28
    
29
    List<String> getVariableNames(ExpressionBuilder builder) {
30
        List<String> vars = new ArrayList<>();
31
        for (Variable var : builder.getVariables()) {
32
            vars.add(var.getName());
33
        }
34
        return vars;
35
    }
36
    
37
    List<String> getParameterNames(ExpressionBuilder builder) {
38
        List<String> params = new ArrayList<>();
39
        for (Parameter param : builder.getParameters()) {
40
            String s;
41
            switch(param.getType()) {
42
                case Constant:
43
                    Object value = param.getValue();
44
                    if( value==null ) {
45
                        s = "null";
46
                    } else if( value instanceof String ) {
47
                        s = "'" + (String)value + "'";
48
                    } else {
49
                        s = value.toString();
50
                    }    
51
                    break;
52
                case Geometry:
53
                case Variable:
54
                default:
55
                    s = "\"" + param.getName() + "\"";
56
            }
57
            params.add(s);
58
        }
59
        return params;
60
    }
61
    
62
    public void test2() {
63
        ExpressionBuilder builder = new ExpressionBuilderBase();
64
        
65
        builder.and(
66
          builder.eq(
67
            builder.lcase(builder.variable("colum_name_c")),
68
            builder.parameter("colum_name_p")
69
          )
70
        );
71
        builder.and(
72
            builder.group(
73
                builder.or(
74
                    builder.like(
75
                        builder.lcase( builder.variable("uno")),
76
                        builder.constant("%10")
77
                    ),
78
                    builder.lt(
79
                        builder.variable("dos"),
80
                        builder.constant(-3.5)
81
                    )
82
                )
83
            )
84
        );
85
        builder.and(
86
                builder.ST_Intersects(
87
                    builder.variable("geom1"), 
88
                    builder.ST_Envelope(
89
                        builder.ST_GeomFromWKB(
90
                                builder.parameter("geom2"), 
91
                                builder.parameter().value(4326).as_constant()
92
                        )
93
                    )
94
                )
95
        );
96
        builder.and(
97
            builder.gt(
98
                builder.variable("tres"),
99
                builder.constant(123456789)
100
            )
101
        );
102
        assertEquals(
103
                "( (LCASE(\"colum_name_c\")) = (?) ) AND ( ( (LCASE(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) ) AND ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?))))) AND ( (\"tres\") > (123456789) )",
104
                builder.toString()
105
        );
106
        assertEquals(
107
                "[colum_name_c, dos, geom1, tres, uno]",
108
                ArrayUtils.toString(getVariableNames(builder))
109
        );
110
        assertEquals(
111
                "[\"colum_name_p\", \"geom2\", 4326]",
112
                ArrayUtils.toString(getParameterNames(builder))
113
        );
114
    }
115
    
116
    public void test3() throws CreateGeometryException {
117
        ExpressionBuilder builder = new ExpressionBuilderBase();
118
                
119
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
120
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
121
        
122
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
123
        builder.set(        
124
            builder.ST_Intersects(
125
              builder.geometry(point,proj),
126
              builder.variable("the_geom")
127
            )
128
        );
129
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKT);
130
        System.out.println(builder.toString());
131
        assertEquals(
132
                "ST_Intersects((ST_GeomFromText('POINT (10 20)', (4326))), (\"the_geom\"))",
133
                builder.toString()
134
        );
135
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKB);
136
        System.out.println(builder.toString());
137
        assertEquals(
138
                "ST_Intersects((ST_GeomFromWKB((0x000000000140240000000000004034000000000000), (4326))), (\"the_geom\"))",
139
                builder.toString()
140
        );
141
        assertEquals(
142
                "[the_geom]",
143
                ArrayUtils.toString(getVariableNames(builder))
144
        );
145
        assertEquals(
146
                "[]",
147
                ArrayUtils.toString(getParameterNames(builder))
148
        );
149
    }
150
    
151
    public void test4() throws CreateGeometryException {
152
        ExpressionBuilder builder = new ExpressionBuilderBase();
153
                
154
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
155
        
156
        builder.and(
157
                builder.ST_Intersects(
158
                    builder.variable("geom1"), 
159
                    builder.ST_Envelope(
160
                        builder.ST_GeomFromWKB(
161
                                builder.parameter("geom2"), 
162
                                builder.parameter().value(proj).as_constant()
163
                        )
164
                    )
165
                )
166
        );
167
        
168
        System.out.println(builder.toString());
169
        assertEquals(
170
                "ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?)))))",
171
                builder.toString()
172
        );
173
        assertEquals(
174
                "[geom1]",
175
                ArrayUtils.toString(getVariableNames(builder))
176
        );
177
        assertEquals(
178
                "[\"geom2\", 4326]",
179
                ArrayUtils.toString(getParameterNames(builder))
180
        );
181
    }
182
        
183
    public void test5() throws CreateGeometryException {
184
        ExpressionBuilder builder = new ExpressionBuilderBase();
185
                
186
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
187
        
188
        builder.and(
189
                builder.eq(
190
                        builder.ST_SRID( builder.variable("geom") ),
191
                        builder.srs(proj)
192
                )
193
        );
194
        
195
        System.out.println(builder.toString());
196
        assertEquals(
197
                "( (ST_SRID(\"geom\")) = (4326) )",
198
                builder.toString()
199
        );
200
        assertEquals(
201
                "[geom]",
202
                ArrayUtils.toString(getVariableNames(builder))
203
        );
204
        assertEquals(
205
                "[]",
206
                ArrayUtils.toString(getParameterNames(builder))
207
        );
208
    }
209
}
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.provider/src/test/java/org/gvsig/fmap/dal/store/jdbc2/SQLBuilderTest.java
1
package org.gvsig.fmap.dal.store.jdbc2;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.apache.commons.lang3.ArrayUtils;
6
import org.cresques.cts.IProjection;
7
import org.gvsig.fmap.crs.CRSFactory;
8
import org.gvsig.fmap.dal.ExpressionBuilder;
9
import org.gvsig.fmap.dal.ExpressionBuilder.Constant;
10
import org.gvsig.fmap.dal.ExpressionBuilder.Parameter;
11
import org.gvsig.fmap.dal.ExpressionBuilder.Variable;
12
import org.gvsig.fmap.dal.SQLBuilder;
13
import org.gvsig.fmap.dal.SQLBuilder.Privilege;
14
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
15
import org.gvsig.fmap.geom.DataTypes;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryLocator;
18
import org.gvsig.fmap.geom.GeometryManager;
19
import org.gvsig.fmap.geom.primitive.Polygon;
20
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
21

  
22
public class SQLBuilderTest extends AbstractLibraryAutoInitTestCase {
23
    
24
    @Override
25
    protected void doSetUp() throws Exception {
26

  
27
    }
28
    
29
    List<String> getVariableNames(ExpressionBuilder builder) {
30
        List<String> vars = new ArrayList<>();
31
        for (Variable var : builder.getVariables()) {
32
            vars.add(var.getName());
33
        }
34
        return vars;
35
    }
36
    
37
    List<String> getParameterNames(ExpressionBuilder builder) {
38
        List<String> params = new ArrayList<>();
39
        for (Parameter param : builder.getParameters()) {
40
            String s;
41
            switch(param.getType()) {
42
                case Constant:
43
                    Object value = param.getValue();
44
                    if( value==null ) {
45
                        s = "null";
46
                    } else if( value instanceof String ) {
47
                        s = "'" + (String)value + "'";
48
                    } else {
49
                        s = value.toString();
50
                    }    
51
                    break;
52
                case Geometry:
53
                case Variable:
54
                default:
55
                    s = "\"" + param.getName() + "\"";
56
            }
57
            params.add(s);
58
        }
59
        return params;
60
    }
61
    
62
 
63
    public void testCalulateEnvelope() throws Exception {
64
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
65
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
66
        
67
        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
68
        limit.addVertex(0, 0);
69
        limit.addVertex(0, 100);
70
        limit.addVertex(100, 100);
71
        limit.addVertex(100, 0);
72
        limit.addVertex(0, 0);
73
        
74
        SQLBuilder builder = new SQLBuilderBase();
75
        
76
        builder.select().column().value(
77
            builder.getAsGeometry(
78
              builder.ST_ExtentAggregate(
79
                builder.column("the_geom")
80
              )
81
            )
82
        ).as("envelope");
83
        builder.select().from().table().database("master").schema("dbo").name("test1");
84
        builder.select().where().set(
85
            builder.ST_Intersects(
86
                builder.ST_Envelope(
87
                    builder.column("the_geom")
88
                ),
89
                builder.geometry(limit, proj)
90
            )
91
        );
92
        builder.select().where().and(
93
                builder.custom("x = 27")
94
        );
95
        
96
        // SELECT ST_AsBinary(ST_Extent("the_geom")) AS "envelope" FROM "master"."dbo"."test1" WHERE ST_Intersects((ST_Envelope("the_geom")), (ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', (4326)))) AND x = 27
97
        
98
        System.out.println("# Test:: testCalulateEnvelope");
99
        System.out.println("# SQL:: " + builder.toString());
100
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
101
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
102
        assertEquals(
103
                "SELECT ST_AsBinary(ST_Extent(\"the_geom\")) AS \"envelope\" FROM \"master\".\"dbo\".\"test1\" WHERE ST_Intersects((ST_Envelope(\"the_geom\")), (ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', (4326)))) AND x = 27",
104
                builder.toString()
105
        );
106
        assertEquals(
107
                "[the_geom]",
108
                ArrayUtils.toString(getVariableNames(builder))
109
        );
110
        assertEquals(
111
                "[]",
112
                ArrayUtils.toString(getParameterNames(builder))
113
        );
114
    }
115

  
116
    public void testCount() throws Exception {
117
        SQLBuilder builder = new SQLBuilderBase();
118
        
119
        builder.select().column().value(builder.count().all());
120
        builder.select().from().table().database("master").schema("dbo").name("test1");
121
        builder.select().from().subquery(null);
122
        builder.select().where().set( builder.custom("pp = 200"));
123

  
124
        System.out.println("# Test:: testCount");
125
        System.out.println("# SQL:: " + builder.toString());
126
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
127
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
128

  
129
        //# Test:: testCount
130
        //# SQL:: SELECT COUNT(*) FROM "master"."dbo"."test1" WHERE pp = 200
131
        //# Variables:: []
132
        //# Parametros:: []
133

  
134
        assertEquals(
135
                "SELECT COUNT(*) FROM \"master\".\"dbo\".\"test1\" WHERE pp = 200",
136
                builder.toString()
137
        );
138
        assertEquals(
139
                "[]",
140
                ArrayUtils.toString(getVariableNames(builder))
141
        );
142
        assertEquals(
143
                "[]",
144
                ArrayUtils.toString(getParameterNames(builder))
145
        );
146
    }
147
    
148
    public void testCreateTable() throws Exception {
149
        SQLBuilder builder = new SQLBuilderBase();
150

  
151
        builder.create_table().table().database("master").schema("dbo").name("test1");
152
        builder.create_table().add_column(
153
                "name",
154
                DataTypes.STRING,
155
                45,
156
                0,
157
                false,
158
                false,
159
                true,
160
                false,
161
                null
162
        );
163
        builder.create_table().add_column(
164
                "id",
165
                DataTypes.INT,
166
                0,
167
                0,
168
                true,
169
                false,
170
                false,
171
                true,
172
                0
173
        );
174
        builder.create_table().add_column(
175
                "geom",
176
                DataTypes.GEOMETRY,
177
                0,
178
                0,
179
                false,
180
                false,
181
                true,
182
                false,
183
                null
184
        );
185

  
186
        
187
        // CREATE TABLE "master"."dbo"."test1" ("name" VARCHAR(45) DEFAULT NULL NULL, "id" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, "geom" TEXT DEFAULT NULL NULL )
188
        System.out.println("# Test:: testCreateTable");
189
        System.out.println("# SQL:: " + builder.toString());
190
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
191
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
192
        assertEquals(
193
                "CREATE TABLE \"master\".\"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL NULL, \"id\" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, \"geom\" TEXT DEFAULT NULL NULL )",
194
                builder.toString()
195
        );
196
        assertEquals(
197
                "[]",
198
                ArrayUtils.toString(getVariableNames(builder))
199
        );
200
        assertEquals(
201
                "[]",
202
                ArrayUtils.toString(getParameterNames(builder))
203
        );
204
    }
205

  
206
    public void testDropTable() throws Exception {
207
        SQLBuilder builder = new SQLBuilderBase();
208
        
209
        builder.drop_table().table().database("master").schema("dbo").name("test1");
210

  
211
        // DROP TABLE "master"."dbo"."test1"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'
212
        
213
        System.out.println("# Test:: testDropTable");
214
        System.out.println("# SQL:: " + builder.toString());
215
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
216
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
217
        assertEquals(
218
                "DROP TABLE \"master\".\"dbo\".\"test1\"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'",
219
                builder.toString()
220
        );
221
        assertEquals(
222
                "[]",
223
                ArrayUtils.toString(getVariableNames(builder))
224
        );
225
        assertEquals(
226
                "[]",
227
                ArrayUtils.toString(getParameterNames(builder))
228
        );
229
    }
230
    
231
    public void testFetchFeatureProviderByReference() throws Exception {
232
        SQLBuilder builder = new SQLBuilderBase();
233
        
234
        String value = "yoyo";
235
        builder.select().column().name("name");
236
        builder.select().column().name("id");
237
        builder.select().column().name("geom").as_geometry();
238
        builder.select().from().table().database("master").schema("dbo").name("test1");
239
        builder.select().where().set(
240
            builder.eq(
241
                builder.column("name"),
242
                builder.parameter(value).as_constant()
243
            )
244
        );
245
        builder.select().limit(1);
246

  
247
        // SELECT "name", "id", ST_AsBinary("geom") FROM "master"."dbo"."test1" WHERE ( ("name") = (?) ) LIMIT 1
248

  
249
        System.out.println("# Test:: testFetchFeatureProviderByReference");
250
        System.out.println("# SQL:: " + builder.toString());
251
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
252
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
253
        assertEquals(
254
                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
255
                builder.toString()
256
        );
257
        assertEquals(
258
                "[geom, id, name]",
259
                ArrayUtils.toString(getVariableNames(builder))
260
        );
261
        assertEquals(
262
                "['yoyo']",
263
                ArrayUtils.toString(getParameterNames(builder))
264
        );
265
    }
266
    
267
    public void testFetchFeatureType() throws Exception {
268
        SQLBuilder builder = new SQLBuilderBase();
269

  
270
        builder.select().column().all();
271
        builder.select().from().table().database("master").schema("dbo").name("test1");
272
        builder.select().limit(1);
273

  
274
        System.out.println("# Test:: testFetchFeatureType");
275
        System.out.println("# SQL:: " + builder.toString());
276
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
277
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
278
        
279
        //# Test:: testFetchFeatureType
280
        //# SQL:: SELECT * FROM [master].[dbo].[test1] LIMMIT 1
281
        //# Variables:: []
282
        //# Parametros:: []        
283
        
284
        assertEquals(
285
                "SELECT * FROM \"master\".\"dbo\".\"test1\" LIMIT 1",
286
                builder.toString()
287
        );
288
        assertEquals(
289
                "[]",
290
                ArrayUtils.toString(getVariableNames(builder))
291
        );
292
        assertEquals(
293
                "[]",
294
                ArrayUtils.toString(getParameterNames(builder))
295
        );
296
    }
297
        
298
    public void testPerformDeletes() throws Exception {
299
        SQLBuilder builder = new SQLBuilderBase();
300

  
301
        builder.delete().table().database("master").schema("dbo").name("test1");
302
        builder.delete().where().and(
303
            builder.eq( 
304
                builder.column("id1"),
305
                builder.parameter("id1").as_variable()
306
            )
307
        );
308
        builder.delete().where().and(
309
            builder.eq( 
310
                builder.column("id2"),
311
                builder.parameter("id2").as_variable()
312
            )
313
        );
314

  
315
        // DELETE FROM "master"."dbo"."test1" WHERE ( ("id1") = (?) ) AND ( ("id2") = (?) )
316

  
317
        System.out.println("# Test:: testPerformDeletes");
318
        System.out.println("# SQL:: " + builder.toString());
319
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
320
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
321
        assertEquals(
322
                "DELETE FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"id1\") = (?) ) AND ( (\"id2\") = (?) )",
323
                builder.toString()
324
        );
325
        assertEquals(
326
                "[id1, id2]",
327
                ArrayUtils.toString(getVariableNames(builder))
328
        );
329
        assertEquals(
330
                "[\"id1\", \"id2\"]",
331
                ArrayUtils.toString(getParameterNames(builder))
332
        );
333
    }
334

  
335
    public void testPerformInserts1() throws Exception {
336
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
337

  
338
        SQLBuilder builder = new SQLBuilderBase();
339

  
340
        builder.insert().table().database("master").schema("dbo").name("test1");
341
        builder.insert().column().name("id").with_value(builder.parameter("id"));
342
        builder.insert().column().name("name").with_value(builder.parameter("name"));
343
        builder.insert().column().name("geom").with_value(builder.parameter("geom").as_geometry_variable().srs(proj));
344
        
345
        // INSERT INTO "master"."dbo"."test1" ( "id", "name", "geom" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )
346
        
347
        System.out.println("# Test:: testPerformInserts1");
348
        System.out.println("# SQL:: " + builder.toString());
349
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
350
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
351
        assertEquals(
352
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )",
353
                builder.toString()
354
        );
355
        assertEquals(
356
                "[geom, id, name]",
357
                ArrayUtils.toString(getVariableNames(builder))
358
        );
359
        assertEquals(
360
                "[\"id\", \"name\", \"geom\"]",
361
                ArrayUtils.toString(getParameterNames(builder))
362
        );
363
    }
364

  
365
    public void testPerformInserts2() throws Exception {
366
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
367

  
368
        SQLBuilder builder = new SQLBuilderBase();
369

  
370
        builder.insert().table().database("master").schema("dbo").name("test1");
371
        builder.insert().column().name("id").with_value(builder.parameter("id"));
372
        builder.insert().column().name("name").with_value(builder.parameter("name"));
373
        builder.insert().column().name("geom").with_value(builder.parameter("geom").as_geometry_variable().srs(builder.parameter().value(proj)));
374
        
375
        // INSERT INTO "master"."dbo"."test1" ( "id", "name", "geom" ) VALUES ( ?, ?, ST_GeomFromText(?, (?)) )
376
        
377
        System.out.println("# Test:: testPerformInserts2");
378
        System.out.println("# SQL:: " + builder.toString());
379
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
380
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
381
        assertEquals(
382
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (?)) )",
383
                builder.toString()
384
        );
385
        assertEquals(
386
                "[geom, id, name]",
387
                ArrayUtils.toString(getVariableNames(builder))
388
        );
389
        assertEquals(
390
                "[\"id\", \"name\", \"geom\", 4326]",
391
                ArrayUtils.toString(getParameterNames(builder))
392
        );
393
    }
394

  
395
    public void testPerformUpdates() throws Exception {
396
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
397

  
398
        SQLBuilder builder = new SQLBuilderBase();
399

  
400
        builder.update().table().database("master").schema("dbo").name("test1");
401
        builder.update().where().and(
402
            builder.eq(
403
                builder.column("id"), 
404
                builder.parameter("id").as_variable()
405
            )
406
        );
407
        builder.update().column().name("name").with_value(builder.parameter("name"));
408
        builder.update().column().name("geom").with_value(
409
                builder.parameter("geom").as_geometry_variable().srs( builder.parameter().value(proj)) 
410
        );
411

  
412
        // UPDATE "master"."dbo"."test1" SET "name" = ?, "geom" = ST_GeomFromText(?, (?)) WHERE ( ("id") = (?) )
413

  
414
        System.out.println("# Test:: testPerformUpdates");
415
        System.out.println("# SQL:: " + builder.toString());
416
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
417
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
418
        assertEquals(
419
                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromText(?, (?)) WHERE ( (\"id\") = (?) )",
420
                builder.toString()
421
        );
422
        assertEquals(
423
                "[geom, id, name]",
424
                ArrayUtils.toString(getVariableNames(builder))
425
        );
426
        assertEquals(
427
                "[\"name\", \"geom\", 4326, \"id\"]",
428
                ArrayUtils.toString(getParameterNames(builder))
429
        );
430
    }
431

  
432
    public void testGrant1() throws Exception {
433

  
434
        SQLBuilder builder = new SQLBuilderBase();
435

  
436
        builder.grant().table().database("master").schema("dbo").name("test1");
437
        builder.grant().role("prueba").select().insert().update();
438
        builder.grant().role("gis").all();
439
                
440
        
441
        System.out.println("# Test:: testGrant1");
442
        System.out.println("# SQL:: " + builder.toString());
443
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
444
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
445
        assertEquals(
446
                "",
447
                builder.toString()
448
        );
449
        assertEquals(
450
                "[]",
451
                ArrayUtils.toString(getVariableNames(builder))
452
        );
453
        assertEquals(
454
                "[]",
455
                ArrayUtils.toString(getParameterNames(builder))
456
        );
457
    }
458

  
459
    public void testGrant2() throws Exception {
460

  
461
        SQLBuilder builder = new SQLBuilderBase();
462

  
463
        builder.grant().table().database("master").schema("dbo").name("test1");
464
        builder.grant().role("prueba").privilege(Privilege.SELECT)
465
                .privilege(Privilege.INSERT)
466
                .privilege(Privilege.UPDATE);
467
        builder.grant().role("gis").privilege(Privilege.ALL);
468
                
469
        
470
        System.out.println("# Test:: testGrant2");
471
        System.out.println("# SQL:: " + builder.toString());
472
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
473
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
474
        assertEquals(
475
                "",
476
                builder.toString()
477
        );
478
        assertEquals(
479
                "[]",
480
                ArrayUtils.toString(getVariableNames(builder))
481
        );
482
        assertEquals(
483
                "[]",
484
                ArrayUtils.toString(getParameterNames(builder))
485
        );
486
    }
487

  
488

  
489
}
tags/org.gvsig.mssqlserver-1.0.32/org.gvsig.mssqlserver.provider/src/test/java/org/gvsig/mssqlserver/dal/MSSQLServerSQLBuilderTest.java
1
package org.gvsig.mssqlserver.dal;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.apache.commons.lang3.ArrayUtils;
6
import org.cresques.cts.IProjection;
7
import org.gvsig.fmap.crs.CRSFactory;
8
import org.gvsig.fmap.dal.DALLocator;
9
import org.gvsig.fmap.dal.ExpressionBuilder;
10
import org.gvsig.fmap.dal.ExpressionBuilder.Parameter;
11
import org.gvsig.fmap.dal.ExpressionBuilder.Variable;
12
import org.gvsig.fmap.dal.SQLBuilder;
13
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
14
import org.gvsig.fmap.dal.store.db.DBHelper;
15
import org.gvsig.fmap.geom.DataTypes;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryLocator;
18
import org.gvsig.fmap.geom.GeometryManager;
19
import org.gvsig.fmap.geom.primitive.Polygon;
20
import static org.gvsig.mssqlserver.dal.MSSQLServerLibrary.NAME;
21
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
22

  
23
public class MSSQLServerSQLBuilderTest extends AbstractLibraryAutoInitTestCase {
24

  
25
    private MSSQLServerHelper helper;
26
    
27
    @Override
28
    protected void doSetUp() throws Exception {
29
        DataManagerProviderServices dataman = 
30
                (DataManagerProviderServices) DALLocator.getDataManager();
31

  
32
        DBHelper.registerParametersDefinition(
33
                NAME + "StoreParameters",
34
                MSSQLServerStoreParameters.class,
35
                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
36
        );
37
        
38
        MSSQLServerStoreParameters params = new MSSQLServerStoreParameters();
39
        params.setHost("127.0.0.1");
40
        params.setDynValue("InstanceName", "SQLEXPRESS");
41
        params.setDBName("master");
42
        params.setSchema("dbo");
43
        params.setTable("test1");
44
        params.setPort(1433);
45
        params.setUser("sa");
46
        params.setPassword("123");
47
        helper = new MSSQLServerHelper(params);
48
    }
49
    
50
    List<String> getVariableNames(ExpressionBuilder builder) {
51
        List<String> vars = new ArrayList<>();
52
        for (Variable var : builder.getVariables()) {
53
            vars.add(var.getName());
54
        }
55
        return vars;
56
    }
57
    
58
    List<String> getParameterNames(ExpressionBuilder builder) {
59
        List<String> params = new ArrayList<>();
60
        for (Parameter param : builder.getParameters()) {
61
            String s;
62
            switch(param.getType()) {
63
                case Constant:
64
                    Object value = param.getValue();
65
                    if( value==null ) {
66
                        s = "null";
67
                    } else if( value instanceof String ) {
68
                        s = "'" + (String)value + "'";
69
                    } else {
70
                        s = value.toString();
71
                    }    
72
                    break;
73
                case Geometry:
74
                case Variable:
75
                default:
76
                    s = "\"" + param.getName() + "\"";
77
            }
78
            params.add(s);
79
        }
80
        return params;
81
    }
82
    
83
    public SQLBuilder createSQLBuilder() {
84
        return new MSSQLServerSQLBuilder(helper);
85
    }
86
 
87
    public void testCalulateEnvelope() throws Exception {
88
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
89
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
90
        
91
        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
92
        limit.addVertex(0, 0);
93
        limit.addVertex(0, 100);
94
        limit.addVertex(100, 100);
95
        limit.addVertex(100, 0);
96
        limit.addVertex(0, 0);
97
        
98
        SQLBuilder builder = createSQLBuilder();
99
        
100
        builder.select().column().value(
101
            builder.getAsGeometry(
102
              builder.ST_ExtentAggregate(
103
                builder.column("the_geom")
104
              )
105
            )
106
        ).as("envelope");
107
        builder.select().from().table().database("master").schema("dbo").name("test1");
108
        builder.select().where().set(
109
            builder.ST_Intersects(
110
                builder.ST_Envelope(
111
                    builder.column("the_geom")
112
                ),
113
                builder.geometry(limit, proj)
114
            )
115
        );
116
        builder.select().where().and(
117
                builder.custom("x = 27").add( builder.variable("x") )
118
        );
119
        
120
        System.out.println("# Test:: testCalulateEnvelope");
121
        System.out.println("# SQL:: " + builder.toString());
122
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
123
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
124
    
125
        //# Test:: testCalulateEnvelope
126
        //# SQL:: SELECT (geometry::EnvelopeAggregate([the_geom])).STAsBinary() AS [envelope] FROM [master].[dbo].[test1] WHERE (([the_geom]).STEnvelope()).STIntersects(geometry::STGeomFromWKB(0x000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000, 4326)) AND x = 27
127
        //# Variables:: [the_geom, x]
128
        //# Parametros:: []    
129
        assertEquals(
130
                "SELECT (geometry::EnvelopeAggregate([the_geom])).STAsBinary() AS [envelope] FROM [master].[dbo].[test1] WHERE (([the_geom]).STEnvelope()).STIntersects(geometry::STGeomFromWKB(0x000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000, 4326)) AND x = 27",
131
                builder.toString()
132
        );
133
        assertEquals(
134
                "[the_geom, x]",
135
                ArrayUtils.toString(getVariableNames(builder))
136
        );
137
        assertEquals(
138
                "[]",
139
                ArrayUtils.toString(getParameterNames(builder))
140
        );
141
    }
142

  
143
    public void testCount() throws Exception {
144
        SQLBuilder builder = createSQLBuilder();
145
        
146
        builder.select().column().value(builder.count().all());
147
        builder.select().from().table().database("master").schema("dbo").name("test1");
148
        builder.select().from().subquery(null);
149
        builder.select().where().set( builder.custom("pp = 200").add(builder.variable("pp")));
150

  
151
        System.out.println("# Test:: testCount");
152
        System.out.println("# SQL:: " + builder.toString());
153
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
154
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
155

  
156
        //# Test:: testCount
157
        //# SQL:: SELECT COUNT(*) FROM [master].[dbo].[test1] WHERE pp = 200
158
        //# Variables:: []
159
        //# Parametros:: []
160
    
161
        assertEquals(
162
                "SELECT COUNT(*) FROM [master].[dbo].[test1] WHERE pp = 200",
163
                builder.toString()
164
        );
165
        assertEquals(
166
                "[pp]",
167
                ArrayUtils.toString(getVariableNames(builder))
168
        );
169
        assertEquals(
170
                "[]",
171
                ArrayUtils.toString(getParameterNames(builder))
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff